Compare commits
No commits in common. "3" and "2.0.5" have entirely different histories.
@ -1,17 +0,0 @@
|
||||
# For more information about the properties used in this file,
|
||||
# please see the EditorConfig documentation:
|
||||
# http://editorconfig.org
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[{*.yml,*.scss,*.js,package.json}]
|
||||
indent_size = 2
|
||||
|
||||
# The indent size used in the package.json file cannot be changed:
|
||||
# https://github.com/npm/npm/pull/3180#issuecomment-16336516
|
@ -1,2 +0,0 @@
|
||||
client/dist/
|
||||
client/lang/
|
@ -1 +0,0 @@
|
||||
module.exports = require('@silverstripe/eslint-config/.eslintrc');
|
7
.gitattributes
vendored
@ -1,7 +0,0 @@
|
||||
/tests export-ignore
|
||||
/docs export-ignore
|
||||
/.gitattributes export-ignore
|
||||
/.gitignore export-ignore
|
||||
/.travis.yml export-ignore
|
||||
/.scrutinizer.yml export-ignore
|
||||
/codecov.yml export-ignore
|
11
.github/workflows/ci.yml
vendored
@ -1,11 +0,0 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
name: CI
|
||||
uses: silverstripe/gha-ci/.github/workflows/ci.yml@v1
|
16
.github/workflows/deploy-userhelp-docs.yml
vendored
@ -1,16 +0,0 @@
|
||||
name: Deploy Userhelp Docs
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '4'
|
||||
- '3'
|
||||
- '2'
|
||||
paths:
|
||||
- 'docs/en/userguide/**'
|
||||
jobs:
|
||||
deploy:
|
||||
name: deploy-userhelp-docs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Run build hook
|
||||
run: curl -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.NETLIFY_BUILD_HOOK }}
|
16
.github/workflows/dispatch-ci.yml
vendored
@ -1,16 +0,0 @@
|
||||
name: Dispatch CI
|
||||
|
||||
on:
|
||||
# At 12:20 PM UTC, only on Tuesday and Wednesday
|
||||
schedule:
|
||||
- cron: '20 12 * * 2,3'
|
||||
|
||||
jobs:
|
||||
dispatch-ci:
|
||||
name: Dispatch CI
|
||||
# Only run cron on the silverstripe account
|
||||
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Dispatch CI
|
||||
uses: silverstripe/gha-dispatch-ci@v1
|
17
.github/workflows/keepalive.yml
vendored
@ -1,17 +0,0 @@
|
||||
name: Keepalive
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
# The 4th of every month at 10:50am UTC
|
||||
schedule:
|
||||
- cron: '50 10 4 * *'
|
||||
|
||||
jobs:
|
||||
keepalive:
|
||||
name: Keepalive
|
||||
# Only run cron on the silverstripe account
|
||||
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Keepalive
|
||||
uses: silverstripe/gha-keepalive@v1
|
17
.github/workflows/update-js.yml
vendored
@ -1,17 +0,0 @@
|
||||
name: Update JS
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
# Run on a schedule of once per quarter
|
||||
schedule:
|
||||
- cron: '0 0 1 */3 *'
|
||||
|
||||
jobs:
|
||||
update-js:
|
||||
name: Update JS
|
||||
# Only run cron on the silverstripe account
|
||||
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Update JS
|
||||
uses: silverstripe/gha-update-js@v1
|
8
.gitignore
vendored
@ -1,5 +1,5 @@
|
||||
/vendor/*
|
||||
.ssh/*
|
||||
.bash*
|
||||
.profile
|
||||
vendor/*
|
||||
.sass-cache/*
|
||||
/node_modules/
|
||||
**/*.js.map
|
||||
**/*.css.map
|
||||
|
179
.sass-lint.yml
@ -1,179 +0,0 @@
|
||||
# sass-lint config to match the AirBNB style guide
|
||||
# See silverstripe-admin
|
||||
files:
|
||||
include: '**/client/src/**/*.scss'
|
||||
ignore:
|
||||
- 'client/src/styles/legacy/*'
|
||||
- 'src/**/*'
|
||||
options:
|
||||
formatter: stylish
|
||||
merge-default-rules: false
|
||||
rules:
|
||||
# Warnings
|
||||
# Things that require actual refactoring are marked as warnings
|
||||
class-name-format:
|
||||
- 1
|
||||
- convention: hyphenatedbem
|
||||
placeholder-name-format:
|
||||
- 1
|
||||
- convention: hyphenatedlowercase
|
||||
nesting-depth:
|
||||
- 1
|
||||
- max-depth: 3
|
||||
no-ids: 1
|
||||
no-important: 1
|
||||
no-misspelled-properties:
|
||||
- 1
|
||||
- extra-properties:
|
||||
- "-moz-border-radius-topleft"
|
||||
- "-moz-border-radius-topright"
|
||||
- "-moz-border-radius-bottomleft"
|
||||
- "-moz-border-radius-bottomright"
|
||||
variable-name-format:
|
||||
- 1
|
||||
- allow-leading-underscore: true
|
||||
convention: hyphenatedlowercase
|
||||
no-extends: 1
|
||||
|
||||
# Warnings: these things are preferential rather than mandatory
|
||||
no-css-comments: 1
|
||||
|
||||
# Errors
|
||||
# Things that can be easily fixed are marked as errors
|
||||
indentation:
|
||||
- 2
|
||||
- size: 2
|
||||
final-newline:
|
||||
- 2
|
||||
- include: true
|
||||
no-trailing-whitespace: 2
|
||||
border-zero:
|
||||
- 2
|
||||
- convention: '0'
|
||||
brace-style:
|
||||
- 2
|
||||
- allow-single-line: true
|
||||
clean-import-paths:
|
||||
- 2
|
||||
- filename-extension: false
|
||||
leading-underscore: false
|
||||
no-debug: 2
|
||||
no-empty-rulesets: 2
|
||||
no-invalid-hex: 2
|
||||
no-mergeable-selectors: 2
|
||||
# no-qualifying-elements:
|
||||
# - 1
|
||||
# - allow-element-with-attribute: false
|
||||
# allow-element-with-class: false
|
||||
# allow-element-with-id: false
|
||||
no-trailing-zero: 2
|
||||
no-url-protocols: 2
|
||||
quotes:
|
||||
- 2
|
||||
- style: double
|
||||
space-after-bang:
|
||||
- 2
|
||||
- include: false
|
||||
space-after-colon:
|
||||
- 2
|
||||
- include: true
|
||||
space-after-comma:
|
||||
- 2
|
||||
- include: true
|
||||
space-before-bang:
|
||||
- 2
|
||||
- include: true
|
||||
space-before-brace:
|
||||
- 2
|
||||
- include: true
|
||||
space-before-colon: 2
|
||||
space-between-parens:
|
||||
- 2
|
||||
- include: false
|
||||
trailing-semicolon: 2
|
||||
url-quotes: 2
|
||||
zero-unit: 2
|
||||
single-line-per-selector: 2
|
||||
one-declaration-per-line: 2
|
||||
empty-line-between-blocks:
|
||||
- 2
|
||||
- ignore-single-line-rulesets: true
|
||||
|
||||
|
||||
# Missing rules
|
||||
# There are no sass-lint rules for the following AirBNB style items, but thess
|
||||
# - Put comments on their own line
|
||||
# - Put property delcarations before mixins
|
||||
|
||||
# Disabled rules
|
||||
|
||||
# These are other rules that we may wish to consider using in the future
|
||||
# They are not part of the AirBNB CSS standard but they would introduce some strictness
|
||||
# bem-depth: 0
|
||||
# variable-for-property: 0
|
||||
# no-transition-all: 0
|
||||
# hex-length:
|
||||
# - 1
|
||||
# - style: short
|
||||
# hex-notation:
|
||||
# - 1
|
||||
# - style: lowercase
|
||||
# property-units:
|
||||
# - 1
|
||||
# - global:
|
||||
# - ch
|
||||
# - em
|
||||
# - ex
|
||||
# - rem
|
||||
# - cm
|
||||
# - in
|
||||
# - mm
|
||||
# - pc
|
||||
# - pt
|
||||
# - px
|
||||
# - q
|
||||
# - vh
|
||||
# - vw
|
||||
# - vmin
|
||||
# - vmax
|
||||
# - deg
|
||||
# - grad
|
||||
# - rad
|
||||
# - turn
|
||||
# - ms
|
||||
# - s
|
||||
# - Hz
|
||||
# - kHz
|
||||
# - dpi
|
||||
# - dpcm
|
||||
# - dppx
|
||||
# - '%'
|
||||
# per-property: {}
|
||||
# force-attribute-nesting: 1
|
||||
# force-element-nesting: 1
|
||||
# force-pseudo-nesting: 1
|
||||
# function-name-format:
|
||||
# - 1
|
||||
# - allow-leading-underscore: true
|
||||
# convention: hyphenatedlowercase
|
||||
# no-color-literals: 1
|
||||
# no-duplicate-properties: 1
|
||||
# mixin-name-format:
|
||||
# - 1
|
||||
# - allow-leading-underscore: true
|
||||
# convention: hyphenatedlowercase
|
||||
# shorthand-values:
|
||||
# - 1
|
||||
# - allowed-shorthands:
|
||||
# - 1
|
||||
# - 2
|
||||
# - 3
|
||||
# leading-zero:
|
||||
# - 1
|
||||
# - include: false
|
||||
# no-vendor-prefixes:
|
||||
# - 1
|
||||
# - additional-identifiers: []
|
||||
# excluded-identifiers: []
|
||||
# placeholder-in-extend: 1
|
||||
# no-color-keywords: 2
|
1
.scrutinizer.yml
Normal file
@ -0,0 +1 @@
|
||||
inherit: true
|
39
.travis.yml
Executable file
@ -0,0 +1,39 @@
|
||||
language: php
|
||||
|
||||
sudo: false
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- tidy
|
||||
|
||||
env:
|
||||
global:
|
||||
- DB=MYSQL CORE_RELEASE=3.1
|
||||
|
||||
matrix:
|
||||
allow_failures:
|
||||
- php: hhvm-nightly
|
||||
include:
|
||||
- php: 5.6
|
||||
env: DB=MYSQL
|
||||
- php: 5.5
|
||||
env: DB=MYSQL
|
||||
- php: 5.4
|
||||
env: DB=MYSQL
|
||||
- php: 5.3
|
||||
env: DB=MYSQL
|
||||
- php: hhvm
|
||||
env: DB=MYSQL
|
||||
before_install:
|
||||
|
||||
|
||||
before_script:
|
||||
- phpenv rehash
|
||||
- composer self-update || true
|
||||
- git clone git://github.com/silverstripe-labs/silverstripe-travis-support.git ~/travis-support
|
||||
- php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss
|
||||
- cd ~/builds/ss
|
||||
|
||||
script:
|
||||
- vendor/bin/phpunit blog/tests/
|
@ -1,9 +1,8 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[o:silverstripe:p:silverstripe-blog:r:master-v2]
|
||||
[silverstripe-blog.master-v2]
|
||||
file_filter = lang/<lang>.yml
|
||||
source_file = lang/en.yml
|
||||
source_lang = en
|
||||
type = YML
|
||||
|
||||
type = YML
|
||||
|
33
.upgrade.yml
@ -1,33 +0,0 @@
|
||||
mappings:
|
||||
GridFieldCategorisationConfig: SilverStripe\Blog\Admin\GridFieldCategorisationConfig
|
||||
GridFieldFormAction: SilverStripe\Blog\Admin\GridFieldFormAction
|
||||
GridFieldMergeAction: SilverStripe\Blog\Admin\GridFieldMergeAction
|
||||
BlogCommentExtension: SilverStripe\Blog\Model\BlogCommentExtension
|
||||
BlogFilter: SilverStripe\Blog\Model\BlogFilter
|
||||
BlogFilter_GridField: SilverStripe\Blog\Model\BlogFilter\BlogFilterGridField
|
||||
BlogMemberExtension: SilverStripe\Blog\Model\BlogMemberExtension
|
||||
BlogPostFilter: SilverStripe\Blog\Model\BlogPostFilter
|
||||
BlogPostNotifications: SilverStripe\Blog\Model\BlogPostNotifications
|
||||
Blog: SilverStripe\Blog\Model\Blog
|
||||
Blog_Controller: SilverStripe\Blog\Model\BlogController
|
||||
BlogController: SilverStripe\Blog\Model\BlogController
|
||||
BlogCategory: SilverStripe\Blog\Model\BlogCategory
|
||||
BlogPost: SilverStripe\Blog\Model\BlogPost
|
||||
BlogPost_Controller: SilverStripe\Blog\Model\BlogPostController
|
||||
BlogPostController: SilverStripe\Blog\Model\BlogPostController
|
||||
BlogTag: SilverStripe\Blog\Model\BlogTag
|
||||
CategorisationObject: SilverStripe\Blog\Model\CategorisationObject
|
||||
BlogAdminSidebar: SilverStripe\Blog\Forms\BlogAdminSidebar
|
||||
GridFieldAddByDBField: SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField
|
||||
GridFieldBlogPostState: SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState
|
||||
GridFieldConfig_BlogPost: SilverStripe\Blog\Forms\GridField\GridFieldConfigBlogPost
|
||||
BlogArchiveWidget: SilverStripe\Blog\Widgets\BlogArchiveWidget
|
||||
BlogArchiveWidget_Controller: SilverStripe\Blog\Widgets\BlogArchiveWidgetController
|
||||
BlogCategoriesWidget: SilverStripe\Blog\Widgets\BlogCategoriesWidget
|
||||
BlogCategoriesWidget_Controller: SilverStripe\Blog\Widgets\BlogCategoriesWidgetController
|
||||
BlogRecentPostsWidget: SilverStripe\Blog\Widgets\BlogRecentPostsWidget
|
||||
BlogRecentPostsWidget_Controller: SilverStripe\Blog\Widgets\BlogRecentPostsWidgetController
|
||||
BlogTagsCloudWidget: SilverStripe\Blog\Widgets\BlogTagsCloudWidget
|
||||
BlogTagsCloudWidget_Controller: SilverStripe\Blog\Widgets\BlogTagsCloudWidgetController
|
||||
BlogTagsWidget: SilverStripe\Blog\Widgets\BlogTagsWidget
|
||||
BlogTagsWidget_Controller: SilverStripe\Blog\Widgets\BlogTagsWidgetController
|
23
LICENSE
Executable file
@ -0,0 +1,23 @@
|
||||
Copyright (c) 2013, Michael Strong
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
Redistributions in binary form must reproduce the above copyright notice, this
|
||||
list of conditions and the following disclaimer in the documentation and/or
|
||||
other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
55
README.md
@ -1,40 +1,53 @@
|
||||
# Silverstripe Blog Module
|
||||
# SilverStripe Blog Module
|
||||
|
||||
[![CI](https://github.com/silverstripe/silverstripe-blog/actions/workflows/ci.yml/badge.svg)](https://github.com/silverstripe/silverstripe-blog/actions/workflows/ci.yml)
|
||||
[![Silverstripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/)
|
||||
[![Build Status](https://travis-ci.org/silverstripe/silverstripe-blog.png?branch=master)](https://travis-ci.org/silverstripe/silverstripe-blog) [![Latest Stable Version](https://poser.pugx.org/silverstripe/blog/v/stable.svg)](https://packagist.org/packages/silverstripe/blog) [![Total Downloads](https://poser.pugx.org/silverstripe/blog/downloads.svg)](https://packagist.org/packages/silverstripe/blog) [![Latest Unstable Version](https://poser.pugx.org/silverstripe/blog/v/unstable.svg)](https://packagist.org/silverstripe/silverstripe/blog) [![License](https://poser.pugx.org/silverstripe/blog/license.svg)](https://packagist.org/packages/silverstripe/blog)
|
||||
|
||||
## Documentation
|
||||
## Features
|
||||
|
||||
* [User guide](docs/en/userguide/index.md)
|
||||
* [Developer documentation](docs/en/index.md)
|
||||
* [User roles](docs/en/roles.md)
|
||||
* [Tags and categories](docs/en/tags-and-categories.md)
|
||||
* [Custom publish dates](docs/en/custom-publish-dates.md)
|
||||
* [RSS Feed](docs/en/rss-feed.md)
|
||||
* [Widgets](docs/en/widgets.md) (optional)
|
||||
* [Custom pagination](docs/en/pagination.md)
|
||||
* [Minimal design reduces SiteTree clutter](#usage)
|
||||
|
||||
## Requirements
|
||||
|
||||
* Silverstripe CMS 4.0+
|
||||
* Silverstripe Lumberjack Module 2.0+
|
||||
* Silverstripe Tag Field Module 2.0+
|
||||
* Silverstripe Assets 1.0+
|
||||
* Silverstripe Asset Admin Module 1.0+
|
||||
|
||||
Note: this version is compatible with Silverstripe 4. For Silverstripe 3, please see [the 2.x release line](https://github.com/silverstripe/silverstripe-blog/tree/2).
|
||||
```
|
||||
silverstripe/cms: ~3.1
|
||||
```
|
||||
|
||||
### Suggested Modules
|
||||
|
||||
* Silverstripe Widgets Module
|
||||
* Silverstripe Comments Module
|
||||
```
|
||||
silverstripe/widgets: *
|
||||
silverstripe/comments: *
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
composer require silverstripe/blog
|
||||
composer require silverstripe/blog 2.0.x-dev
|
||||
```
|
||||
|
||||
## Upgrading
|
||||
## Upgrading legacy blog to 2.0
|
||||
|
||||
### Upgrading from 2.x to 3.x
|
||||
If you're upgrading from blog version 1.0 to 2.0 you will need to run the `BlogMigrationTask`. Run the task using `dev/tasks/BlogMigrationTask` either via the browser or sake CLI to migrate your legacy blog to the new version data structure.
|
||||
|
||||
Aside from the framework and CMS upgrades required the blog module should not require anything extra to be completed.
|
||||
## Usage
|
||||
|
||||
### Upgrading legacy blog to 2.x
|
||||
Because your blog is part of the SiteTree, usage is the same as any other page.
|
||||
|
||||
If you're upgrading from blog version 1.0 to 2.x you will need to run the `BlogMigrationTask`. Run the task using `dev/tasks/BlogMigrationTask` either via the browser or sake CLI to migrate your legacy blog to the new version data structure.
|
||||
By default, blog posts don't appear in the SiteTree, to avoid clutter. Instead they appear inside your blog as a GridField.
|
||||
|
||||
![](docs/en/_images/blog-post-management.png)
|
||||
|
||||
If you'd rather display your posts within the SiteTree, you can do so using SilverStripe config.
|
||||
|
||||
In mysite/_config/settings.yml
|
||||
|
||||
```yaml
|
||||
BlogPost:
|
||||
show_in_sitetree: true
|
||||
```
|
||||
|
@ -1 +1,8 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Fetches the name of the current module folder name.
|
||||
*
|
||||
* @return string
|
||||
**/
|
||||
define('BLOGGER_DIR', ltrim(Director::makeRelative(realpath(__DIR__)), DIRECTORY_SEPARATOR));
|
||||
|
@ -3,15 +3,15 @@ Name: blogcommentsconfig
|
||||
Only:
|
||||
moduleexists: comments
|
||||
---
|
||||
SilverStripe\Comments\Model\Comment:
|
||||
Comment:
|
||||
extensions:
|
||||
- SilverStripe\Blog\Model\BlogCommentExtension
|
||||
- BlogCommentExtension
|
||||
|
||||
---
|
||||
Name: blogcommentnotifications
|
||||
Only:
|
||||
moduleexists: 'comment-notifications'
|
||||
---
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
BlogPost:
|
||||
extensions:
|
||||
- SilverStripe\Blog\Model\BlogPostNotifications
|
||||
- BlogPostNotifications
|
||||
|
@ -1,15 +1,6 @@
|
||||
---
|
||||
Name: blogconfig
|
||||
---
|
||||
SilverStripe\Security\Member:
|
||||
Member:
|
||||
extensions:
|
||||
- SilverStripe\Blog\Model\BlogMemberExtension
|
||||
|
||||
---
|
||||
Name: featuredpostswidget
|
||||
Only:
|
||||
moduleexists: silverstripe/widgets
|
||||
---
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
extensions:
|
||||
- SilverStripe\Blog\Model\BlogPostFeaturedExtension
|
||||
- BlogMemberExtension
|
||||
|
@ -1,14 +0,0 @@
|
||||
---
|
||||
Name: bloglegacy
|
||||
---
|
||||
SilverStripe\ORM\DatabaseAdmin:
|
||||
classname_value_remapping:
|
||||
Blog: SilverStripe\Blog\Model\Blog
|
||||
BlogCategory: SilverStripe\Blog\Model\BlogCategory
|
||||
BlogPost: SilverStripe\Blog\Model\BlogPost
|
||||
BlogTag: SilverStripe\Blog\Model\BlogTag
|
||||
BlogArchiveWidget: SilverStripe\Blog\Widgets\BlogArchiveWidget
|
||||
BlogCategoriesWidget: SilverStripe\Blog\Widgets\BlogCategoriesWidget
|
||||
BlogRecentPostsWidget: SilverStripe\Blog\Widgets\BlogRecentPostsWidget
|
||||
BlogTagsCloudWidget: SilverStripe\Blog\Widgets\BlogTagsCloudWidget
|
||||
BlogTagsWidget: SilverStripe\Blog\Widgets\BlogTagsWidget
|
29
behat.yml
@ -1,29 +0,0 @@
|
||||
default:
|
||||
suites:
|
||||
blog:
|
||||
paths:
|
||||
- "%paths.modules.blog%/tests/behat/features"
|
||||
contexts:
|
||||
- SilverStripe\Admin\Tests\Behat\Context\AdminContext
|
||||
- SilverStripe\BehatExtension\Context\BasicContext
|
||||
- SilverStripe\BehatExtension\Context\EmailContext
|
||||
- SilverStripe\BehatExtension\Context\LoginContext
|
||||
- SilverStripe\Framework\Tests\Behaviour\CmsFormsContext
|
||||
- SilverStripe\Framework\Tests\Behaviour\CmsUiContext
|
||||
- SilverStripe\Blog\Tests\Behat\Context\FeatureContext
|
||||
- SilverStripe\Blog\Tests\Behat\Context\FixtureContext
|
||||
-
|
||||
SilverStripe\Blog\Tests\Behat\Context\FixtureContext:
|
||||
- "%paths.modules.blog%/tests/behat/files/"
|
||||
|
||||
extensions:
|
||||
SilverStripe\BehatExtension\MinkExtension:
|
||||
default_session: facebook_web_driver
|
||||
javascript_session: facebook_web_driver
|
||||
facebook_web_driver:
|
||||
browser: chrome
|
||||
wd_host: "http://127.0.0.1:9515"
|
||||
|
||||
SilverStripe\BehatExtension\Extension:
|
||||
screenshot_path: "%paths.base%/artifacts/screenshots"
|
||||
bootstrap_file: vendor/silverstripe/framework/tests/behat/serve-bootstrap.php
|
62
changelog.md
@ -1,62 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [2.4.2]
|
||||
|
||||
* Update translations
|
||||
|
||||
## [2.4.1]
|
||||
|
||||
* Added missing title attribute
|
||||
* Format dates in Blog Posts gridfield based on user preferences
|
||||
* FIX Ensure tag cloud widget does not break when there are zero tags
|
||||
* FIX Success/error message overflow in cms
|
||||
* FIX Prevent duplicate tags and categories
|
||||
* FIX Prevent showing future blog posts before their publish date
|
||||
* FIX Prevent the CMS Hijacking the return keypress in gridfieldaddbydbfield
|
||||
* FIX minInnerWidth should begin with upper-case M
|
||||
|
||||
## [2.4.0]
|
||||
|
||||
* Add BlogTagsCloudWidget
|
||||
* Added code coverage and extra badges on the home page
|
||||
* Changed blog page icon
|
||||
* Change image field label back to “Featured Image”
|
||||
* Rework documentation to have clear user guide and dev docs.
|
||||
* Fix blog date filtering for additional database server types
|
||||
* Tests now pass in Postgres on 3.1 and 3.2
|
||||
* improved pagination for blog posts
|
||||
|
||||
## [2.3.0]
|
||||
|
||||
* Allow injection on date
|
||||
* Added standard code of conduct
|
||||
* Converted to PSR-2
|
||||
* Update translations
|
||||
* BUG Fix regression in [#312](https://github.com/silverstripe/silverstripe-blog/pull/312) in PHP 5.3
|
||||
|
||||
## [2.2.0]
|
||||
|
||||
* Changelog added.
|
||||
* Added standard git attributes
|
||||
* Added standard license
|
||||
* Added standard editor config
|
||||
* Added hook for extension filters on tag blog posts
|
||||
* Update translations
|
||||
* Added hook for extension filters on category blog posts
|
||||
* FIX Title bug due to [#320](https://github.com/silverstripe/silverstripe-blog/pull/320)
|
||||
* FIX Hardcode the year to the current year in setUp()
|
||||
* BUG Fix tag / category filters not being filtered in PaginatedList()
|
||||
* ENHANCEMENT Default archive year
|
||||
* BUGFIX: Dropdowns do not use unique IDs
|
||||
* BUG Fix crash if parent page isn't Blog type
|
||||
* ENHANCEMENT filtering for large user base sites.
|
||||
* FIX Explicitly set the PostsPerPage during migration
|
||||
* i18n wrong label in BlogPost.php
|
||||
* Bugfix: avoid feeding null to PaginatedList constructor
|
||||
* Default PublishDate to NULL for drafts and sort them at the top
|
||||
* Update README to include additional requirements
|
||||
* Fixed a bug where an error occurred when attempting to change the page type of 'Blog'
|
1
client/dist/js/main.bundle.js
vendored
@ -1 +0,0 @@
|
||||
!function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s="./client/src/main.js")}({"./client/src/bundles/cms.js":function(t,e,n){"use strict";var i=n(0);n.n(i).a.entwine("ss",function(t){t(".cms-content-fields > #Form_EditForm_error").entwine({onadd:function(){var e=t(".blog-admin-outer");1===e.length&&e.prepend(this)}}),t(".toggle-description").entwine({onadd:function(){var e=t(this);if(!e.hasClass("toggle-description-enabled")){e.addClass("toggle-description-enabled");var n=!1,i=e.closest(".field").find(".form-text");e.on("click",function(){i[n?"hide":"show"](),e.toggleClass("toggle-description-shown"),n=!n}),i.hide(),e.parent().addClass("toggle-description-correct-right"),e.parent().prev(".middleColumn").addClass("toggle-description-correct-middle"),e.parent().next(".description").addClass("toggle-description-correct-description")}}}),t(".MergeAction").entwine({onadd:function(){var e=t(this);e.on("click","select",function(){return!1}),e.children("button").each(function(e,n){var i=t(n),o=i.prev("select");i.before('<input type="hidden" name="'+i.attr("data-target")+'" value="'+o.val()+'" />')}),e.on("change","select",function(e){var n=t(e.target);n.next("input").val(n.val())}),e.children("button, select").hide(),e.on("click",".MergeActionReveal",function(e){var n=t(e.target);return n.parent().children("button, select").show(),n.hide(),!1})}}),t(".blog-admin-sidebar.cms-panel").entwine({MinInnerWidth:620,onadd:function(){var e=this;this._super(),this.updateLayout(),!this.hasClass("collapsed")&&t(".blog-admin-outer").width()<this.getMinInnerWidth()&&this.collapsePanel();var n=function(){e.updateLayout()};n.bind(this),window.onresize=n},togglePanel:function(t,e){this._super(t,e),this.updateLayout()},updateLayout:function(){t(this).css("height","100%");var e=t(this).outerHeight(),n=t(".cms-content-actions").eq(0).outerHeight();t(this).css("height",e-n+"px"),t(this).css("bottom",n+"px"),t(".cms-container").updateLayoutOptions({minContentWidth:820+this.width()})}})})},"./client/src/bundles/gridfieldaddbydbfield.js":function(t,e,n){"use strict";var i=n(0);n.n(i).a.entwine("ss",function(t){t(".add-existing-autocompleter input.text").entwine({onkeydown:function(e){13===e.which&&(t(this).parents(".add-existing-autocompleter").find('button[type="submit"]').click(),e.preventDefault())}})})},"./client/src/main.js":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n("./client/src/bundles/cms.js"),n("./client/src/bundles/gridfieldaddbydbfield.js")},0:function(t,e){t.exports=jQuery}});
|
1
client/dist/styles/main.css
vendored
@ -1 +0,0 @@
|
||||
.no-sidebar .content-container.size3of4{width:75%}.blog-entry .post-image img{width:98.75%}.blog-sidebar .WidgetHolder ul{margin-left:0}.blog-sidebar .WidgetHolder ul li,ul.blogTagCloud{list-style-type:none}ul.blogTagCloud{clear:both}ul.blogTagCloud li{float:left;display:inline;padding-right:8px}ul.blogTagCloud li a span{float:left;line-height:30px;text-align:center;padding:0}ul.blogTagCloud .tagCount10{font-size:26pt}ul.blogTagCloud .tagCount9{font-size:24pt}ul.blogTagCloud .tagCount8{font-size:22pt}ul.blogTagCloud .tagCount7{font-size:20pt}ul.blogTagCloud .tagCount6{font-size:18pt}ul.blogTagCloud .tagCount5{font-size:16pt}ul.blogTagCloud .tagCount4{font-size:14pt}ul.blogTagCloud .tagCount3{font-size:12pt}ul.blogTagCloud .tagCount2{font-size:10pt}ul.blogTagCloud .tagCount1{font-size:8pt}#FeaturedImage .middleColumn{clear:none;float:left}.has-panel .cms-content-tools.blog-admin-sidebar{width:280px;border-right:0;border-left:1px solid #c0c0c2;position:absolute!important;right:0;top:0;height:100%}.has-panel .cms-content-tools.blog-admin-sidebar .cms-panel-toggle a{text-align:left;margin:0}.has-panel .cms-content-tools.blog-admin-sidebar .cms-panel-toggle.south{border-top:1px solid #aaa}.has-panel .cms-content-tools.blog-admin-sidebar~.blog-admin-outer{width:100%;padding-right:280px;position:absolute;height:100%;overflow-y:hidden;overflow-x:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}.has-panel .cms-content-tools.blog-admin-sidebar~.blog-admin-outer>.ss-tabset{position:relative;overflow:auto;height:100%;width:100%}.has-panel .cms-content-tools.blog-admin-sidebar~.blog-admin-outer>.ss-tabset #Title label{float:none}.has-panel .cms-content-tools.blog-admin-sidebar~.blog-admin-outer>.ss-tabset #Title .middleColumn,.has-panel .cms-content-tools.blog-admin-sidebar~.blog-admin-outer>.ss-tabset #Title input{width:100%;max-width:100%;margin-left:0}.has-panel .cms-content-tools.blog-admin-sidebar .cms-content-view>.field+.field{margin-top:10px}.has-panel .cms-content-tools.blog-admin-sidebar .cms-content-view>.field.urlsegment .preview{padding-top:0;line-height:25px}.has-panel .cms-content-tools.blog-admin-sidebar .cms-content-view>.field.urlsegment .edit{float:right}.has-panel .cms-content-tools.blog-admin-sidebar .cms-content-view>.field.datetime>.middleColumn>.date{width:60%}.has-panel .cms-content-tools.blog-admin-sidebar .cms-content-view>.field.datetime>.middleColumn>.time{width:36%;float:right}.has-panel .cms-content-tools.blog-admin-sidebar .cms-content-view>.field.datetime>.middleColumn .middleColumn,.has-panel .cms-content-tools.blog-admin-sidebar .cms-content-view>.field.datetime>.middleColumn input{width:100%}.has-panel .cms-content-tools.blog-admin-sidebar.collapsed~.blog-admin-outer{padding-right:41px}.has-panel .cms-content-tools.blog-admin-sidebar.collapsed~.blog-admin-outer #Root_Main{margin-right:15px}.has-panel .cms-content-tools.blog-admin-sidebar.cms-content-tools .cms-panel-content{width:auto}.toggle-description{display:inline-block;font-size:1.2rem;width:20px;height:20px;margin-top:1px;cursor:pointer}.middleColumn.toggle-description-correct-middle{margin-left:0;float:left;width:416px}.tab-content .field p.toggle-description-correct-right{display:inline-block;margin-left:0;padding-left:0;clear:none;float:left}.description.toggle-description-correct-description{width:416px;padding:12px 0}.custom-summary .ui-accordion-content,.custom-summary .ui-accordion-content .field{padding:0}.custom-summary .ui-icon-triangle-1-e{background-position:-16px -128px}.cms table.ss-gridfield-table tr td.MergeAction{width:225px}.cms table.ss-gridfield-table tr td.MergeAction a{display:block;height:100%;width:100%}.cms table.ss-gridfield-table tr td.MergeAction select{width:150px}.blog-cms-categorisation .toolbar--content{margin-top:0}.blog-cms-categorisation .MergeActionReveal:after{content:"@";font-family:silverstripe;display:inline-block;position:relative;margin-left:10px;top:3px}.blog-cms-categorisation .blog-merge-action{margin-top:5px}
|
Before Width: | Height: | Size: 550 B |
@ -1,142 +0,0 @@
|
||||
/* global window */
|
||||
import jQuery from 'jquery';
|
||||
|
||||
jQuery.entwine('ss', ($) => {
|
||||
/**
|
||||
* The page success/error message sits outside of the html block
|
||||
* containing the sidebar and cms fields. This means it overflows
|
||||
* underneath the sidebar.
|
||||
*
|
||||
* @see https://github.com/silverstripe/silverstripe-blog/issues/210
|
||||
*/
|
||||
$('.cms-content-fields > #Form_EditForm_error').entwine({
|
||||
onadd() {
|
||||
const $target = $('.blog-admin-outer');
|
||||
if ($target.length === 1) {
|
||||
$target.prepend(this);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Register expandable help text functions with fields.
|
||||
*/
|
||||
$('.toggle-description').entwine({
|
||||
onadd() {
|
||||
const $this = $(this);
|
||||
|
||||
/**
|
||||
* Prevent multiple events being added.
|
||||
*/
|
||||
if ($this.hasClass('toggle-description-enabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this.addClass('toggle-description-enabled');
|
||||
|
||||
/**
|
||||
* Toggle next description when button is clicked.
|
||||
*/
|
||||
let shown = false;
|
||||
const $helpInfo = $this.closest('.field').find('.form-text');
|
||||
|
||||
$this.on('click', () => {
|
||||
$helpInfo[shown ? 'hide' : 'show']();
|
||||
$this.toggleClass('toggle-description-shown');
|
||||
shown = !shown;
|
||||
});
|
||||
|
||||
/**
|
||||
* Hide next description by default.
|
||||
*/
|
||||
$helpInfo.hide();
|
||||
|
||||
/**
|
||||
* Add classes to correct inherited layout issues in a small context.
|
||||
*/
|
||||
$this.parent().addClass('toggle-description-correct-right');
|
||||
$this.parent().prev('.middleColumn').addClass('toggle-description-correct-middle');
|
||||
$this.parent().next('.description').addClass('toggle-description-correct-description');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Custom merge actions for tags and categories
|
||||
*/
|
||||
$('.MergeAction').entwine({
|
||||
onadd() {
|
||||
const $this = $(this);
|
||||
|
||||
$this.on('click', 'select', () => false);
|
||||
|
||||
$this.children('button').each((i, button) => {
|
||||
const $button = $(button);
|
||||
const $select = $button.prev('select');
|
||||
|
||||
$button.before(`<input type="hidden" name="${$button.attr('data-target')}" value="${$select.val()}" />`);
|
||||
});
|
||||
|
||||
$this.on('change', 'select', (e) => {
|
||||
const $target = $(e.target);
|
||||
|
||||
$target.next('input').val($target.val());
|
||||
});
|
||||
|
||||
$this.children('button, select').hide();
|
||||
|
||||
$this.on('click', '.MergeActionReveal', (e) => {
|
||||
const $target = $(e.target);
|
||||
|
||||
$target.parent().children('button, select').show();
|
||||
$target.hide();
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Customise the cms-panel behaviour for blog sidebar
|
||||
*
|
||||
* see LeftAndMain.Panel.js for base behaviour
|
||||
*/
|
||||
$('.blog-admin-sidebar.cms-panel').entwine({
|
||||
MinInnerWidth: 620,
|
||||
onadd() {
|
||||
this._super();
|
||||
this.updateLayout();
|
||||
|
||||
// Contract panel if it's open and the left hand column is smaller than the minimum
|
||||
if (!this.hasClass('collapsed') && ($('.blog-admin-outer').width() < this.getMinInnerWidth())) {
|
||||
this.collapsePanel();
|
||||
}
|
||||
|
||||
const onresize = () => {
|
||||
this.updateLayout();
|
||||
};
|
||||
onresize.bind(this);
|
||||
|
||||
window.onresize = onresize;
|
||||
},
|
||||
togglePanel(bool, silent) {
|
||||
this._super(bool, silent);
|
||||
this.updateLayout();
|
||||
},
|
||||
/**
|
||||
* Adjust minimum width of content to account for extra panel
|
||||
*
|
||||
* @returns {undefined}
|
||||
*/
|
||||
updateLayout() {
|
||||
$(this).css('height', '100%');
|
||||
const currentHeight = $(this).outerHeight();
|
||||
const bottomHeight = $('.cms-content-actions').eq(0).outerHeight();
|
||||
$(this).css('height', `${currentHeight - bottomHeight}px`);
|
||||
$(this).css('bottom', `${bottomHeight}px`);
|
||||
|
||||
$('.cms-container').updateLayoutOptions({
|
||||
minContentWidth: 820 + this.width()
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
@ -1,16 +0,0 @@
|
||||
import jQuery from 'jquery';
|
||||
|
||||
jQuery.entwine('ss', ($) => {
|
||||
/**
|
||||
* Prevent the CMS hijacking the return key
|
||||
*/
|
||||
$('.add-existing-autocompleter input.text').entwine({
|
||||
onkeydown(e) {
|
||||
if (e.which === 13) {
|
||||
const $parent = $(this).parents('.add-existing-autocompleter');
|
||||
$parent.find('button[type="submit"]').click();
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
@ -1,2 +0,0 @@
|
||||
import 'bundles/cms';
|
||||
import 'bundles/gridfieldaddbydbfield';
|
@ -1,2 +0,0 @@
|
||||
@import "styles/blog";
|
||||
@import "styles/cms";
|
@ -1,76 +0,0 @@
|
||||
.no-sidebar .content-container.size3of4 {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.blog-entry .post-image img {
|
||||
width: 98.75%;
|
||||
}
|
||||
|
||||
.blog-sidebar .WidgetHolder ul {
|
||||
margin-left: 0;
|
||||
|
||||
li {
|
||||
list-style-type: none;
|
||||
}
|
||||
}
|
||||
|
||||
// tag cloud related
|
||||
$base_tag_font_size: 4pt;
|
||||
|
||||
ul.blogTagCloud {
|
||||
list-style-type: none;
|
||||
clear: both;
|
||||
|
||||
li {
|
||||
float: left;
|
||||
display: inline;
|
||||
padding-right: 8px;
|
||||
|
||||
a span {
|
||||
float: left;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.tagCount10 {
|
||||
font-size: $base_tag_font_size + 22pt;
|
||||
}
|
||||
|
||||
.tagCount9 {
|
||||
font-size: $base_tag_font_size + 20pt;
|
||||
}
|
||||
|
||||
.tagCount8 {
|
||||
font-size: $base_tag_font_size + 18pt;
|
||||
}
|
||||
|
||||
.tagCount7 {
|
||||
font-size: $base_tag_font_size + 16pt;
|
||||
}
|
||||
|
||||
.tagCount6 {
|
||||
font-size: $base_tag_font_size + 14pt;
|
||||
}
|
||||
|
||||
.tagCount5 {
|
||||
font-size: $base_tag_font_size + 12pt;
|
||||
}
|
||||
|
||||
.tagCount4 {
|
||||
font-size: $base_tag_font_size + 10pt;
|
||||
}
|
||||
|
||||
.tagCount3 {
|
||||
font-size: $base_tag_font_size + 8pt;
|
||||
}
|
||||
|
||||
.tagCount2 {
|
||||
font-size: $base_tag_font_size + 6pt;
|
||||
}
|
||||
|
||||
.tagCount1 {
|
||||
font-size: $base_tag_font_size + 4pt;
|
||||
}
|
||||
}
|
@ -1,185 +0,0 @@
|
||||
/**
|
||||
* CMS Styles
|
||||
*/
|
||||
|
||||
#FeaturedImage .middleColumn {
|
||||
clear: none;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.has-panel .cms-content-tools.blog-admin-sidebar {
|
||||
width: 280px;
|
||||
border-right: 0;
|
||||
border-left: 1px solid #C0C0C2;
|
||||
position: absolute !important; /* overrides cms !imporant style */
|
||||
right: 0;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
|
||||
.cms-panel-toggle a {
|
||||
text-align: left;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.cms-panel-toggle.south {
|
||||
border-top: 1px solid #aaaaaa;
|
||||
}
|
||||
|
||||
~ .blog-admin-outer {
|
||||
width: 100%;
|
||||
padding-right: 280px;
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
overflow-y: hidden;
|
||||
overflow-x: hidden;
|
||||
box-sizing: border-box;
|
||||
|
||||
> .ss-tabset {
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
#Title {
|
||||
label {
|
||||
float: none;
|
||||
}
|
||||
|
||||
.middleColumn,
|
||||
input {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cms-content-view {
|
||||
> .field {
|
||||
+ .field {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
&.urlsegment {
|
||||
.preview {
|
||||
padding-top: 0;
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
.edit {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
&.datetime {
|
||||
> .middleColumn {
|
||||
> .date {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
> .time {
|
||||
width: 36%;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.middleColumn,
|
||||
input {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.collapsed {
|
||||
~ .blog-admin-outer {
|
||||
padding-right: 41px;
|
||||
|
||||
#Root_Main {
|
||||
margin-right: 15px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.cms-content-tools {
|
||||
.cms-panel-content {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.toggle-description {
|
||||
display: inline-block;
|
||||
font-size: 1.2rem;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-top: 1px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.middleColumn.toggle-description-correct-middle {
|
||||
margin-left: 0;
|
||||
float: left;
|
||||
width: 416px;
|
||||
}
|
||||
|
||||
.tab-content .field p.toggle-description-correct-right {
|
||||
display: inline-block;
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
clear: none;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.description.toggle-description-correct-description {
|
||||
width: 416px;
|
||||
padding: 12px 0;
|
||||
}
|
||||
|
||||
.custom-summary {
|
||||
.ui-accordion-content,
|
||||
.ui-accordion-content .field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
// Change the caret to a plus icon
|
||||
.ui-icon-triangle-1-e {
|
||||
background-position: -16px -128px;
|
||||
}
|
||||
}
|
||||
|
||||
.cms table.ss-gridfield-table {
|
||||
tr td.MergeAction {
|
||||
width: 225px;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
select {
|
||||
width: 150px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.blog-cms-categorisation {
|
||||
.toolbar--content {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.MergeActionReveal:after {
|
||||
content: "@";
|
||||
font-family: silverstripe;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
margin-left: 10px;
|
||||
top: 3px;
|
||||
}
|
||||
|
||||
.blog-merge-action {
|
||||
margin-top: 5px;
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
When having discussions about this module in issues or pull request please adhere to the [SilverStripe Community Code of Conduct](https://docs.silverstripe.org/en/contributing/code_of_conduct).
|
54
code/admin/GridFieldCategorisationConfig.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
class GridFieldCategorisationConfig extends GridFieldConfig_RecordEditor {
|
||||
/**
|
||||
* @param int $itemsPerPage
|
||||
* @param array|SS_List $mergeRecords
|
||||
* @param string $parentType
|
||||
* @param string $parentMethod
|
||||
* @param string $childMethod
|
||||
*/
|
||||
public function __construct($itemsPerPage = 15, $mergeRecords, $parentType, $parentMethod, $childMethod) {
|
||||
parent::__construct($itemsPerPage);
|
||||
|
||||
$this->removeComponentsByType('GridFieldAddNewButton');
|
||||
|
||||
$this->addComponent(
|
||||
new GridFieldAddByDBField('buttons-before-left')
|
||||
);
|
||||
|
||||
$this->addComponent(
|
||||
new GridFieldMergeAction($mergeRecords, $parentType, $parentMethod, $childMethod)
|
||||
);
|
||||
|
||||
/**
|
||||
* @var GridFieldDataColumns $columns
|
||||
*/
|
||||
$columns = $this->getComponentByType('GridFieldDataColumns');
|
||||
|
||||
$columns->setFieldFormatting(array(
|
||||
'BlogPostsCount' => function ($value, CategorisationObject $item) {
|
||||
return $item->BlogPosts()->Count();
|
||||
}
|
||||
));
|
||||
|
||||
$this->changeColumnOrder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reorders GridField columns so that Actions is last.
|
||||
*/
|
||||
protected function changeColumnOrder() {
|
||||
/**
|
||||
* @var GridFieldDataColumns $columns
|
||||
*/
|
||||
$columns = $this->getComponentByType('GridFieldDataColumns');
|
||||
|
||||
$columns->setDisplayFields(array(
|
||||
'Title' => 'Title',
|
||||
'BlogPostsCount' => 'Posts',
|
||||
'MergeAction' => 'MergeAction',
|
||||
'Actions' => 'Actions',
|
||||
));
|
||||
}
|
||||
}
|
27
code/admin/GridFieldFormAction.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
class GridFieldFormAction extends GridField_FormAction {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $extraAttributes = array();
|
||||
|
||||
/**
|
||||
* @param array $attributes
|
||||
*/
|
||||
public function setExtraAttributes(array $attributes) {
|
||||
$this->extraAttributes = $attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getAttributes() {
|
||||
$attributes = parent::getAttributes();
|
||||
|
||||
return array_merge(
|
||||
$attributes,
|
||||
$this->extraAttributes
|
||||
);
|
||||
}
|
||||
}
|
140
code/admin/GridFieldMergeAction.php
Normal file
@ -0,0 +1,140 @@
|
||||
<?php
|
||||
|
||||
class GridFieldMergeAction implements GridField_ColumnProvider, GridField_ActionProvider {
|
||||
/**
|
||||
* List of records to show in the MergeAction column.
|
||||
*
|
||||
* @var array|SS_List
|
||||
*/
|
||||
protected $records;
|
||||
|
||||
/**
|
||||
* Type of parent DataObject (i.e BlogTag, BlogCategory).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $parentType;
|
||||
|
||||
/**
|
||||
* Relationship method to reference parent (i.e BlogTags).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $parentMethod;
|
||||
|
||||
/**
|
||||
* Relationship method to reference child (i.e BlogPosts).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $childMethod;
|
||||
|
||||
/**
|
||||
* @param array|SS_List $records
|
||||
* @param string $parentType
|
||||
* @param string $parentMethod
|
||||
* @param string $childMethod
|
||||
*/
|
||||
public function __construct($records = array(), $parentType, $parentMethod, $childMethod) {
|
||||
$this->records = $records;
|
||||
$this->parentType = $parentType;
|
||||
$this->parentMethod = $parentMethod;
|
||||
$this->childMethod = $childMethod;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function augmentColumns($gridField, &$columns) {
|
||||
if(!in_array('MergeAction', $columns)) {
|
||||
$columns[] = 'MergeAction';
|
||||
}
|
||||
|
||||
return $columns;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnsHandled($gridField) {
|
||||
return array('MergeAction');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnContent($gridField, $record, $columnName) {
|
||||
if($columnName === 'MergeAction' && $record->{$this->childMethod}()->Count() > 0) {
|
||||
$dropdown = new DropdownField('Target', 'Target', $this->records->exclude('ID', $record->ID)->map());
|
||||
|
||||
$prefix = strtolower($this->parentMethod . '-' . $this->childMethod);
|
||||
|
||||
$action = GridFieldFormAction::create(
|
||||
$gridField,
|
||||
'MergeAction' . $record->ID,
|
||||
'Move',
|
||||
'merge',
|
||||
array(
|
||||
'record' => $record->ID,
|
||||
'target' => $prefix . '-target-record-' . $record->ID,
|
||||
)
|
||||
);
|
||||
|
||||
$action->setExtraAttributes(array(
|
||||
'data-target' => $prefix . '-target-record-' . $record->ID
|
||||
));
|
||||
|
||||
return $dropdown->Field() . $action->Field() . '<a title="Move posts to" class="MergeActionReveal">move posts to</a>';
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnAttributes($gridField, $record, $columnName) {
|
||||
return array('class' => 'MergeAction');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnMetadata($gridField, $columnName) {
|
||||
return array('title' => 'Move posts to');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getActions($gridField) {
|
||||
return array('merge');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function handleAction(GridField $gridField, $actionName, $arguments, $data) {
|
||||
if($actionName === 'merge') {
|
||||
$controller = Controller::curr();
|
||||
|
||||
$request = $controller->getRequest();
|
||||
|
||||
$target = $request->requestVar($arguments["target"]);
|
||||
|
||||
$parentType = $this->parentType;
|
||||
|
||||
$fromParent = $parentType::get()->byId($arguments['record']);
|
||||
$toParent = $parentType::get()->byId($target);
|
||||
|
||||
$posts = $fromParent->{$this->childMethod}();
|
||||
|
||||
foreach($posts as $post) {
|
||||
$relationship = $post->{$this->parentMethod}();
|
||||
|
||||
$relationship->remove($fromParent);
|
||||
$relationship->add($toParent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
112
code/compat/pages/BlogEntry.php
Normal file
@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @deprecated since version 2.0
|
||||
*
|
||||
* @property int $ParentID
|
||||
* @property string $Date
|
||||
* @property string $PublishDate
|
||||
* @property string $Tags
|
||||
*/
|
||||
class BlogEntry extends BlogPost implements MigratableObject {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $hide_ancestor = 'BlogEntry';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'Date' => 'SS_Datetime',
|
||||
'Author' => 'Text',
|
||||
'Tags' => 'Text',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canCreate($member = null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function up() {
|
||||
|
||||
//Migrate comma separated tags into BlogTag objects.
|
||||
foreach($this->TagNames() as $tag) {
|
||||
|
||||
$existingTag = BlogTag::get()->filter(array('Title' => $tag, 'BlogID' => $this->ParentID));
|
||||
if($existingTag->count()) {
|
||||
//if tag already exists we will simply add it to this post.
|
||||
$tagObject = $existingTag->First();
|
||||
|
||||
} else {
|
||||
|
||||
//if the tag is now we create it and add it to this post.
|
||||
$tagObject = new BlogTag();
|
||||
$tagObject->Title = $tag;
|
||||
$tagObject->BlogID = $this->ParentID;
|
||||
$tagObject->write();
|
||||
|
||||
|
||||
}
|
||||
|
||||
if($tagObject){
|
||||
$this->Tags()->add($tagObject);
|
||||
}
|
||||
}
|
||||
|
||||
//Store if the original entity was published or not (draft)
|
||||
$published = $this->IsPublished();
|
||||
// If a user has subclassed BlogEntry, it should not be turned into a BlogPost.
|
||||
if($this->ClassName === 'BlogEntry') {
|
||||
$this->ClassName = 'BlogPost';
|
||||
$this->RecordClassName = 'BlogPost';
|
||||
}
|
||||
//Migrate these key data attributes
|
||||
$this->PublishDate = $this->Date;
|
||||
$this->AuthorNames = $this->Author;
|
||||
$this->InheritSideBar = true;
|
||||
|
||||
//Write and additionally publish the item if it was published before.
|
||||
$this->write();
|
||||
if($published){
|
||||
$this->publish('Stage','Live');
|
||||
$message = "PUBLISHED: ";
|
||||
} else {
|
||||
$message = "DRAFT: ";
|
||||
}
|
||||
|
||||
return $message . $this->Title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Safely split and parse all distinct tags assigned to this BlogEntry.
|
||||
*
|
||||
* @deprecated since version 2.0
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function TagNames() {
|
||||
$tags = preg_split('/\s*,\s*/', trim($this->Tags));
|
||||
|
||||
$results = array();
|
||||
|
||||
foreach($tags as $tag) {
|
||||
if($tag) $results[mb_strtolower($tag)] = $tag;
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since version 2.0
|
||||
*/
|
||||
class BlogEntry_Controller extends BlogPost_Controller {
|
||||
|
||||
}
|
72
code/compat/pages/BlogHolder.php
Normal file
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @deprecated since version 2.0
|
||||
*/
|
||||
class BlogHolder extends BlogTree implements MigratableObject {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $hide_ancestor = 'BlogHolder';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'AllowCustomAuthors' => 'Boolean',
|
||||
'ShowFullEntry' => 'Boolean',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
'Owner' => 'Member',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canCreate($member = null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//Overload these to stop the Uncaught Exception: Object->__call(): the method 'parent' does not exist on 'BlogHolder' error.
|
||||
public function validURLSegment() {
|
||||
return true;
|
||||
}
|
||||
public function syncLinkTracking() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function up() {
|
||||
|
||||
$published = $this->IsPublished();
|
||||
|
||||
if($this->ClassName === 'BlogHolder') {
|
||||
$this->ClassName = 'Blog';
|
||||
$this->RecordClassName = 'Blog';
|
||||
$this->write();
|
||||
}
|
||||
|
||||
if($published){
|
||||
$this->publish('Stage','Live');
|
||||
$message = "PUBLISHED: ";
|
||||
} else {
|
||||
$message = "DRAFT: ";
|
||||
}
|
||||
|
||||
return $message . $this->Title;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since version 2.0
|
||||
*/
|
||||
class BlogHolder_Controller extends BlogTree_Controller {
|
||||
|
||||
}
|
53
code/compat/pages/BlogTree.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @deprecated since version 2.0
|
||||
*/
|
||||
class BlogTree extends Page implements MigratableObject {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $hide_ancestor = 'BlogTree';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'Name' => 'Varchar(255)',
|
||||
'LandingPageFreshness' => 'Varchar',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canCreate($member = null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function up() {
|
||||
$published = $this->IsPublished();
|
||||
if($this->ClassName === 'BlogTree') {
|
||||
$this->ClassName = 'Page';
|
||||
$this->RecordClassName = 'Page';
|
||||
$this->write();
|
||||
}
|
||||
if($published){
|
||||
$this->publish('Stage','Live');
|
||||
$message = "PUBLISHED: ";
|
||||
} else {
|
||||
$message = "DRAFT: ";
|
||||
}
|
||||
|
||||
return $message . $this->Title;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since version 2.0
|
||||
*/
|
||||
class BlogTree_Controller extends Page_Controller {
|
||||
|
||||
}
|
89
code/compat/tasks/BlogMigrationTask.php
Normal file
@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
class BlogMigrationTask extends MigrationTask {
|
||||
/**
|
||||
* Should this task be invoked automatically via dev/build?
|
||||
*
|
||||
* @config
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
private static $run_during_dev_build = true;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function up() {
|
||||
$classes = ClassInfo::implementorsOf('MigratableObject');
|
||||
|
||||
$this->message('Migrating legacy blog records');
|
||||
|
||||
foreach($classes as $class) {
|
||||
|
||||
$this->upClass($class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $text
|
||||
*/
|
||||
protected function message($text) {
|
||||
if(Controller::curr() instanceof DatabaseAdmin) {
|
||||
DB::alteration_message($text, 'obsolete');
|
||||
} else {
|
||||
echo $text . "<br/>";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate records of a single class
|
||||
*
|
||||
* @param string $class
|
||||
* @param null|string $stage
|
||||
*/
|
||||
protected function upClass($class) {
|
||||
if(!class_exists($class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(is_subclass_of($class, 'SiteTree')) {
|
||||
$items = SiteTree::get()->filter('ClassName', $class);
|
||||
} else {
|
||||
$items = $class::get();
|
||||
}
|
||||
|
||||
if($count = $items->count()) {
|
||||
$this->message(
|
||||
sprintf(
|
||||
'Migrating %s legacy %s records.',
|
||||
$count,
|
||||
$class
|
||||
)
|
||||
);
|
||||
|
||||
foreach($items as $item) {
|
||||
$cancel = $item->extend('onBeforeUp');
|
||||
|
||||
if($cancel && min($cancel) === false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @var MigratableObject $item
|
||||
*/
|
||||
$result = $item->up();
|
||||
$this->message($result);
|
||||
|
||||
$item->extend('onAfterUp');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function down() {
|
||||
$this->message('BlogMigrationTask::down() not implemented');
|
||||
}
|
||||
}
|
8
code/compat/tasks/MigratableObject.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
interface MigratableObject {
|
||||
/**
|
||||
* Migrate the object up to the current version.
|
||||
*/
|
||||
public function up();
|
||||
}
|
52
code/compat/widgets/ArchiveWidget.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
if(!class_exists('Widget')) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since version 2.0
|
||||
*
|
||||
* @property string $DisplayMode
|
||||
* @property string $ArchiveType
|
||||
*/
|
||||
class ArchiveWidget extends BlogArchiveWidget implements MigratableObject {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'DisplayMode' => 'Varchar',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $only_available_in = array(
|
||||
'none',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canCreate($member = null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function up() {
|
||||
if($this->DisplayMode) {
|
||||
$this->ArchiveType = 'Monthly';
|
||||
|
||||
if($this->DisplayMode === 'year') {
|
||||
$this->ArchiveType = 'Yearly';
|
||||
}
|
||||
}
|
||||
|
||||
$this->ClassName = 'BlogArchiveWidget';
|
||||
$this->write();
|
||||
return "Migrated " . $this->ArchiveType . " archive widget";
|
||||
|
||||
}
|
||||
}
|
44
code/compat/widgets/TagCloudWidget.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
if(!class_exists('Widget')) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of tags associated with blog posts.
|
||||
*
|
||||
* @package blog
|
||||
*/
|
||||
class TagCloudWidget extends BlogTagsWidget implements MigratableObject {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'Title' => 'Varchar',
|
||||
'Limit' => 'Int',
|
||||
'Sortby' => 'Varchar',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $only_available_in = array(
|
||||
'none',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canCreate($member = null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function up() {
|
||||
$this->ClassName = 'BlogTagsWidget';
|
||||
$this->write();
|
||||
return "Migrated " . $this->Title . " widget";
|
||||
}
|
||||
}
|
23
code/extensions/BlogCommentExtension.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Adds Blog specific behaviour to Comment.
|
||||
*/
|
||||
class BlogCommentExtension extends DataExtension {
|
||||
/**
|
||||
* Extra CSS classes for styling different comment types.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getExtraClass() {
|
||||
$blogPost = $this->owner->getParent();
|
||||
|
||||
if($blogPost instanceof BlogPost) {
|
||||
if($blogPost->isAuthor($this->owner->Author())) {
|
||||
return 'author-comment';
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
106
code/extensions/BlogFilter.php
Normal file
@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This class is responsible for filtering the SiteTree when necessary and also overlaps into
|
||||
* filtering only published posts.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*/
|
||||
class BlogFilter extends Lumberjack {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function stageChildren($showAll = false) {
|
||||
$staged = parent::stageChildren($showAll);
|
||||
|
||||
if(!$this->shouldFilter() && $this->subclassForBlog() && !Permission::check('VIEW_DRAFT_CONTENT')) {
|
||||
$stage = Versioned::current_stage();
|
||||
|
||||
if($stage == 'Stage') {
|
||||
$stage = '';
|
||||
} elseif($stage) {
|
||||
$stage = '_' . $stage;
|
||||
}
|
||||
|
||||
$dataQuery = $staged->dataQuery()
|
||||
->innerJoin('BlogPost', sprintf('"BlogPost%s"."ID" = "SiteTree%s"."ID"', $stage, $stage))
|
||||
->where(sprintf('"PublishDate" < \'%s\'', Convert::raw2sql(SS_Datetime::now())));
|
||||
|
||||
$staged = $staged->setDataQuery($dataQuery);
|
||||
}
|
||||
|
||||
return $staged;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function subclassForBlog() {
|
||||
return in_array(get_class($this->owner), ClassInfo::subClassesFor('Blog'));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function liveChildren($showAll = false, $onlyDeletedFromStage = false) {
|
||||
$staged = parent::liveChildren($showAll, $onlyDeletedFromStage);
|
||||
|
||||
if(!$this->shouldFilter() && $this->isBlog() && !Permission::check('VIEW_DRAFT_CONTENT')) {
|
||||
$dataQuery = $staged->dataQuery()
|
||||
->innerJoin('BlogPost', '"BlogPost_Live"."ID" = "SiteTree_Live"."ID"')
|
||||
->where(sprintf('"PublishDate" < \'%s\'', Convert::raw2sql(SS_Datetime::now())));
|
||||
|
||||
$staged = $staged->setDataQuery($dataQuery);
|
||||
}
|
||||
|
||||
return $staged;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function isBlog() {
|
||||
return $this->owner instanceof Blog;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function updateCMSFields(FieldList $fields) {
|
||||
$excluded = $this->owner->getExcludedSiteTreeClassNames();
|
||||
|
||||
if(!empty($excluded)) {
|
||||
$pages = SiteTree::get()->filter(array(
|
||||
'ParentID' => $this->owner->ID,
|
||||
'ClassName' => $excluded
|
||||
))->sort('"SiteTree"."Created" DESC');
|
||||
|
||||
$gridField = new BlogFilter_GridField(
|
||||
'ChildPages',
|
||||
$this->getLumberjackTitle(),
|
||||
$pages,
|
||||
$this->getLumberjackGridFieldConfig()
|
||||
);
|
||||
|
||||
$tab = new Tab('ChildPages', $this->getLumberjackTitle(), $gridField);
|
||||
|
||||
$fields->insertBefore($tab, 'Main');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Enables children of non-editable pages to be edited.
|
||||
*/
|
||||
class BlogFilter_GridField extends GridField {
|
||||
/**
|
||||
* @param FormTransformation $transformation
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function transform(FormTransformation $transformation) {
|
||||
return $this;
|
||||
}
|
||||
}
|
110
code/extensions/BlogMemberExtension.php
Normal file
@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This class is responsible for add Blog specific behaviour to Members.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*/
|
||||
class BlogMemberExtension extends DataExtension {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'URLSegment' => 'Varchar',
|
||||
'BlogProfileSummary' => 'Text',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
'BlogProfileImage' => 'Image',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $belongs_many_many = array(
|
||||
'BlogPosts' => 'BlogPost',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function onBeforeWrite() {
|
||||
$count = 1;
|
||||
|
||||
$this->owner->URLSegment = $this->generateURLSegment();
|
||||
|
||||
while(!$this->validURLSegment()) {
|
||||
$this->owner->URLSegment = preg_replace('/-[0-9]+$/', null, $this->owner->URLSegment) . '-' . $count;
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a unique URL segment based on the Member's name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function generateURLSegment() {
|
||||
$filter = URLSegmentFilter::create();
|
||||
$name = $this->owner->FirstName . ' ' . $this->owner->Surname;
|
||||
$urlSegment = $filter->filter($name);
|
||||
|
||||
if(!$urlSegment || $urlSegment == '-' || $urlSegment == '-1') {
|
||||
$urlSegment = 'profile-' . $this->owner->ID;
|
||||
}
|
||||
|
||||
return $urlSegment;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TRUE if this object has a URL segment value that does not conflict with any other
|
||||
* objects.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function validURLSegment() {
|
||||
$conflict = Member::get()->filter('URLSegment', $this->owner->URLSegment);
|
||||
|
||||
if($this->owner->ID) {
|
||||
$conflict = $conflict->exclude('ID', $this->owner->ID);
|
||||
}
|
||||
|
||||
return $conflict->count() == 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function updateCMSFields(FieldList $fields) {
|
||||
$fields->removeByName('URLSegment');
|
||||
|
||||
// Remove the automatically-generated posts tab.
|
||||
|
||||
$fields->removeFieldFromTab('Root', 'BlogPosts');
|
||||
|
||||
// Construct a better posts tab.
|
||||
|
||||
Requirements::css(BLOGGER_DIR . '/css/cms.css');
|
||||
Requirements::javascript(BLOGGER_DIR . '/js/cms.js');
|
||||
|
||||
$tab = new Tab('BlogPosts', 'Blog Posts');
|
||||
|
||||
$gridField = new GridField(
|
||||
'BlogPosts',
|
||||
'Blog Posts',
|
||||
$this->owner->BlogPosts(),
|
||||
new GridFieldConfig_BlogPost()
|
||||
);
|
||||
|
||||
$tab->Fields()->add($gridField);
|
||||
|
||||
$fields->addFieldToTab('Root', $tab);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
42
code/extensions/BlogPostFilter.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This is responsible for filtering only published posts to users who do not have permission to
|
||||
* view non-published posts.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*/
|
||||
class BlogPostFilter extends DataExtension {
|
||||
/**
|
||||
* Augment queries so that we don't fetch unpublished articles.
|
||||
*
|
||||
* @param SQLQuery $query
|
||||
*/
|
||||
public function augmentSQL(SQLQuery &$query) {
|
||||
$stage = Versioned::current_stage();
|
||||
|
||||
if (Controller::curr() instanceof LeftAndMain) {
|
||||
return;
|
||||
}
|
||||
|
||||
if($stage == 'Live' || !Permission::check('VIEW_DRAFT_CONTENT')) {
|
||||
$query->addWhere(sprintf('"PublishDate" < \'%s\'', Convert::raw2sql(SS_Datetime::now())));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a fix so that when we try to fetch subclasses of BlogPost, lazy loading includes the
|
||||
* BlogPost table in its query. Leaving this table out means the default sort order column
|
||||
* PublishDate causes an error.
|
||||
*
|
||||
* @see https://github.com/silverstripe/silverstripe-framework/issues/1682
|
||||
*
|
||||
* @param SQLQuery $query
|
||||
* @param mixed $dataQuery
|
||||
* @param mixed $parent
|
||||
*/
|
||||
public function augmentLoadLazyFields(SQLQuery &$query, &$dataQuery, $parent) {
|
||||
$dataQuery->innerJoin('BlogPost', '"SiteTree"."ID" = "BlogPost"."ID"');
|
||||
}
|
||||
}
|
29
code/extensions/BlogPostNotifications.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Customise blog post to support comment notifications.
|
||||
*
|
||||
* Extends {@see BlogPost} with extensions to {@see CommentNotifiable}.
|
||||
*/
|
||||
class BlogPostNotifications extends DataExtension {
|
||||
/**
|
||||
* Notify all authors of notifications.
|
||||
*
|
||||
* @param SS_List $list
|
||||
* @param mixed $comment
|
||||
*/
|
||||
public function updateNotificationRecipients(&$list, &$comment) {
|
||||
$list = $this->owner->Authors();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update comment to include the page title.
|
||||
*
|
||||
* @param string $subject
|
||||
* @param Comment $comment
|
||||
* @param Member|string $recipient
|
||||
*/
|
||||
public function updateNotificationSubject(&$subject, &$comment, &$recipient) {
|
||||
$subject = sprintf('A new comment has been posted on ', $this->owner->Title);
|
||||
}
|
||||
}
|
61
code/extensions/URLSegmentExtension.php
Normal file
@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Adds URLSegment functionality to Tags & Categories.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*/
|
||||
class URLSegmentExtension extends DataExtension {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'URLSegment' => 'Varchar(255)',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function onBeforeWrite() {
|
||||
$this->owner->generateURLSegment();
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a unique URLSegment from the title.
|
||||
*
|
||||
* @param int $increment
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function generateURLSegment($increment = null) {
|
||||
$filter = new URLSegmentFilter();
|
||||
|
||||
$this->owner->URLSegment = $filter->filter($this->owner->Title);
|
||||
|
||||
if(is_int($increment)) {
|
||||
$this->owner->URLSegment .= '-' . $increment;
|
||||
}
|
||||
|
||||
$duplicate = DataList::create($this->owner->ClassName)->filter(array(
|
||||
'URLSegment' => $this->owner->URLSegment,
|
||||
'BlogID' => $this->owner->BlogID,
|
||||
));
|
||||
|
||||
if($this->owner->ID) {
|
||||
$duplicate = $duplicate->exclude('ID', $this->owner->ID);
|
||||
}
|
||||
|
||||
if($duplicate->count() > 0) {
|
||||
if(is_int($increment)) {
|
||||
$increment += 1;
|
||||
} else {
|
||||
$increment = 0;
|
||||
}
|
||||
|
||||
$this->owner->generateURLSegment((int) $increment);
|
||||
}
|
||||
|
||||
return $this->owner->URLSegment;
|
||||
}
|
||||
}
|
16
code/forms/BlogAdminSidebar.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class BlogAdminSidebar extends FieldGroup {
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isOpen() {
|
||||
$sidebar = Cookie::get('blog-admin-sidebar');
|
||||
|
||||
if($sidebar == 1 || is_null($sidebar)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
193
code/forms/gridfield/GridFieldAddByDBField.php
Normal file
@ -0,0 +1,193 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Adds a component which allows a user to add a new DataObject by database field.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*/
|
||||
class GridFieldAddByDBField implements GridField_ActionProvider, GridField_HTMLProvider {
|
||||
/**
|
||||
* HTML Fragment to render the field.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $targetFragment;
|
||||
|
||||
/**
|
||||
* Default field to create the DataObject by should be Title.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $dataObjectField = 'Title';
|
||||
|
||||
/**
|
||||
* Creates a text field and add button which allows the user to directly create a new
|
||||
* DataObject by just entering the title.
|
||||
*
|
||||
* @param string $targetFragment
|
||||
* @param string $dataObjectField
|
||||
*/
|
||||
public function __construct($targetFragment = 'before', $dataObjectField = 'Title') {
|
||||
$this->targetFragment = $targetFragment;
|
||||
$this->dataObjectField = (string) $dataObjectField;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide actions to this component.
|
||||
*
|
||||
* @param GridField $gridField
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getActions($gridField) {
|
||||
return array(
|
||||
'add',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the add action for the given DataObject.
|
||||
*
|
||||
* @param $gridField GridField
|
||||
* @param $actionName string
|
||||
* @param $arguments mixed
|
||||
* @param $data array
|
||||
*
|
||||
* @return null|SS_HTTPResponse
|
||||
*
|
||||
* @throws UnexpectedValueException
|
||||
*/
|
||||
public function handleAction(GridField $gridField, $actionName, $arguments, $data) {
|
||||
if($actionName == 'add') {
|
||||
$dbField = $this->getDataObjectField();
|
||||
|
||||
$objClass = $gridField->getModelClass();
|
||||
|
||||
/**
|
||||
* @var DataObject $obj
|
||||
*/
|
||||
$obj = new $objClass();
|
||||
|
||||
if($obj->hasField($dbField)) {
|
||||
$obj->setCastedField($dbField, $data['gridfieldaddbydbfield'][$obj->ClassName][$dbField]);
|
||||
|
||||
if($obj->canCreate()) {
|
||||
$id = $gridField->getList()->add($obj);
|
||||
if(!$id) {
|
||||
$gridField->setError(
|
||||
_t(
|
||||
'GridFieldAddByDBField.AddFail',
|
||||
'Unable to save {class} to the database.',
|
||||
'Unable to add the DataObject.',
|
||||
array(
|
||||
'class' => get_class($obj),
|
||||
)
|
||||
),
|
||||
'error'
|
||||
);
|
||||
}
|
||||
} else {
|
||||
return Security::permissionFailure(
|
||||
Controller::curr(),
|
||||
_t(
|
||||
'GridFieldAddByDBField.PermissionFail',
|
||||
'You don\'t have permission to create a {class}.',
|
||||
'Unable to add the DataObject.',
|
||||
array(
|
||||
'class' => get_class($obj)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
throw new UnexpectedValueException(
|
||||
sprintf(
|
||||
'Invalid field (%s) on %s.',
|
||||
$dbField,
|
||||
$obj->ClassName
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the database field for which we'll add the new data object.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDataObjectField() {
|
||||
return $this->dataObjectField;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the database field.
|
||||
*
|
||||
* @param $field string
|
||||
*/
|
||||
public function setDataObjectField($field) {
|
||||
$this->dataObjectField = (string) $field;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the TextField and add button to the GridField.
|
||||
*
|
||||
* @param $gridField GridField
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getHTMLFragments($gridField) {
|
||||
/**
|
||||
* @var DataList $dataList
|
||||
*/
|
||||
$dataList = $gridField->getList();
|
||||
|
||||
$dataClass = $dataList->dataClass();
|
||||
|
||||
$obj = singleton($dataClass);
|
||||
|
||||
if(!$obj->canCreate()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
$dbField = $this->getDataObjectField();
|
||||
|
||||
$textField = TextField::create(
|
||||
sprintf(
|
||||
"gridfieldaddbydbfield[%s][%s]",
|
||||
$obj->ClassName,
|
||||
Convert::raw2htmlatt($dbField)
|
||||
)
|
||||
)
|
||||
->setAttribute('placeholder', $obj->fieldLabel($dbField))
|
||||
->addExtraClass('no-change-track');
|
||||
|
||||
$addAction = new GridField_FormAction(
|
||||
$gridField,
|
||||
'add',
|
||||
_t('GridFieldAddByDBField.Add',
|
||||
'Add {name}', "Add button text",
|
||||
array(
|
||||
'name' => $obj->i18n_singular_name(),
|
||||
)
|
||||
),
|
||||
'add',
|
||||
'add'
|
||||
);
|
||||
|
||||
$addAction->setAttribute('data-icon', 'add');
|
||||
|
||||
$forTemplate = new ArrayData(array());
|
||||
|
||||
$forTemplate->Fields = new ArrayList();
|
||||
$forTemplate->Fields->push($textField);
|
||||
$forTemplate->Fields->push($addAction);
|
||||
|
||||
return array(
|
||||
$this->targetFragment => $forTemplate->renderWith('GridFieldAddByDBField')
|
||||
);
|
||||
}
|
||||
}
|
94
code/forms/gridfield/GridFieldBlogPostState.php
Normal file
@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Provides a component to the {@link GridField} which tells the user whether or not a blog post
|
||||
* has been published and when.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*/
|
||||
class GridFieldBlogPostState extends GridFieldSiteTreeState {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnContent($gridField, $record, $columnName) {
|
||||
if($columnName == 'State') {
|
||||
Requirements::css(BLOGGER_DIR . '/css/cms.css');
|
||||
if($record instanceof BlogPost) {
|
||||
$modifiedLabel = '';
|
||||
|
||||
if($record->isModifiedOnStage) {
|
||||
$modifiedLabel = '<span class="modified">' . _t('GridFieldBlogPostState.Modified') . '</span>';
|
||||
}
|
||||
|
||||
if(!$record->isPublished()) {
|
||||
/**
|
||||
* @var SS_Datetime $lastEdited
|
||||
*/
|
||||
$lastEdited = $record->dbObject('LastEdited');
|
||||
|
||||
return _t(
|
||||
'GridFieldBlogPostState.Draft',
|
||||
'<i class="btn-icon gridfield-icon btn-icon-pencil"></i> Saved as Draft on {date}',
|
||||
'State for when a post is saved.',
|
||||
array(
|
||||
'date' => $lastEdited->Nice(),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var SS_Datetime $publishDate
|
||||
*/
|
||||
$publishDate = $record->dbObject('PublishDate');
|
||||
|
||||
if(strtotime($record->PublishDate) > time()) {
|
||||
return _t(
|
||||
'GridFieldBlogPostState.Timer',
|
||||
'<i class="gridfield-icon blog-icon-timer"></i> Publish at {date}',
|
||||
'State for when a post is published.',
|
||||
array(
|
||||
'date' => $publishDate->Nice(),
|
||||
)
|
||||
) . $modifiedLabel;
|
||||
}
|
||||
|
||||
return _t(
|
||||
'GridFieldBlogPostState.Published',
|
||||
'<i class="btn-icon gridfield-icon btn-icon-accept"></i> Published on {date}',
|
||||
'State for when a post is published.',
|
||||
array(
|
||||
'date' => $publishDate->Nice(),
|
||||
)
|
||||
) . $modifiedLabel;
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnAttributes($gridField, $record, $columnName) {
|
||||
if($columnName == 'State') {
|
||||
if($record instanceof BlogPost) {
|
||||
$published = $record->isPublished();
|
||||
|
||||
if(!$published) {
|
||||
$class = 'gridfield-icon draft';
|
||||
} else if(strtotime($record->PublishDate) > time()) {
|
||||
$class = 'gridfield-icon timer';
|
||||
} else {
|
||||
$class = 'gridfield-icon published';
|
||||
}
|
||||
|
||||
return array(
|
||||
'class' => $class,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
}
|
19
code/forms/gridfield/GridFieldConfig_BlogPost.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* GridField config necessary for managing a SiteTree object.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*/
|
||||
class GridFieldConfig_BlogPost extends GridFieldConfig_Lumberjack {
|
||||
/**
|
||||
* @param null|int $itemsPerPage
|
||||
*/
|
||||
public function __construct($itemsPerPage = null) {
|
||||
parent::__construct($itemsPerPage);
|
||||
|
||||
$this->removeComponentsByType('GridFieldSiteTreeState');
|
||||
$this->addComponent(new GridFieldBlogPostState());
|
||||
}
|
||||
}
|
1039
code/model/Blog.php
Normal file
@ -0,0 +1,1039 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Blog Holder
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*
|
||||
* @method HasManyList Tags() List of tags in this blog
|
||||
* @method HasManyList Categories() List of categories in this blog
|
||||
* @method ManyManyList Editors() List of editors
|
||||
* @method ManyManyList Writers() List of writers
|
||||
* @method ManyManyList Contributors() List of contributors
|
||||
*/
|
||||
class Blog extends Page implements PermissionProvider {
|
||||
/**
|
||||
* Permission for user management.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const MANAGE_USERS = 'BLOG_MANAGE_USERS';
|
||||
|
||||
/**
|
||||
* If true, users assigned as editor, writer, or contributor will be automatically granted
|
||||
* CMS_ACCESS_CMSMain permission. If false, only users with this permission already may be
|
||||
* assigned.
|
||||
*
|
||||
* @config
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
private static $grant_user_access = true;
|
||||
|
||||
/**
|
||||
* Permission to either require, or grant to users assigned to work on this blog.
|
||||
*
|
||||
* @config
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private static $grant_user_permission = 'CMS_ACCESS_CMSMain';
|
||||
|
||||
/**
|
||||
* Group code to assign newly granted users to.
|
||||
*
|
||||
* @config
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private static $grant_user_group = 'blog-users';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'PostsPerPage' => 'Int',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_many = array(
|
||||
'Tags' => 'BlogTag',
|
||||
'Categories' => 'BlogCategory',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $many_many = array(
|
||||
'Editors' => 'Member',
|
||||
'Writers' => 'Member',
|
||||
'Contributors' => 'Member',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $allowed_children = array(
|
||||
'BlogPost',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = array(
|
||||
'BlogFilter',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $defaults = array(
|
||||
'ProvideComments' => false,
|
||||
'PostsPerPage' => 10,
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Adds a blog to your website.';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields() {
|
||||
Requirements::css(BLOGGER_DIR . '/css/cms.css');
|
||||
Requirements::javascript(BLOGGER_DIR . '/js/cms.js');
|
||||
|
||||
$self =& $this;
|
||||
|
||||
$this->beforeUpdateCMSFields(function ($fields) use ($self) {
|
||||
if(!$self->canEdit()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$categories = GridField::create(
|
||||
'Categories',
|
||||
_t('Blog.Categories', 'Categories'),
|
||||
$self->Categories(),
|
||||
GridFieldCategorisationConfig::create(15, $self->Categories()->sort('Title'), 'BlogCategory', 'Categories', 'BlogPosts')
|
||||
);
|
||||
|
||||
$tags = GridField::create(
|
||||
'Tags',
|
||||
_t('Blog.Tags', 'Tags'),
|
||||
$self->Tags(),
|
||||
GridFieldCategorisationConfig::create(15, $self->Tags()->sort('Title'), 'BlogTag', 'Tags', 'BlogPosts')
|
||||
);
|
||||
|
||||
/**
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->addFieldsToTab('Root.Categorisation', array(
|
||||
$categories,
|
||||
$tags
|
||||
));
|
||||
|
||||
$fields->findOrMakeTab('Root.Categorisation')->addExtraClass('blog-cms-categorisation');
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canEdit($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if($this->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return parent::canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return null|Member
|
||||
*/
|
||||
protected function getMember($member = null) {
|
||||
if(!$member) {
|
||||
$member = Member::currentUser();
|
||||
}
|
||||
|
||||
if(is_numeric($member)) {
|
||||
$member = Member::get()->byID($member);
|
||||
}
|
||||
|
||||
return $member;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this member is an editor of the blog.
|
||||
*
|
||||
* @param Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isEditor($member) {
|
||||
$isEditor = $this->isMemberOf($member, $this->Editors());
|
||||
$this->extend('updateIsEditor', $isEditor, $member);
|
||||
|
||||
return $isEditor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the given member belongs to the given relation.
|
||||
*
|
||||
* @param Member $member
|
||||
* @param DataList $relation
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isMemberOf($member, $relation) {
|
||||
if(!$member || !$member->exists()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if($relation instanceof UnsavedRelationList) {
|
||||
return in_array($member->ID, $relation->getIDList());
|
||||
}
|
||||
|
||||
return $relation->byID($member->ID) !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the role of the given member.
|
||||
*
|
||||
* Call be called via template to determine the current user.
|
||||
*
|
||||
* @example "Hello $RoleOf($CurrentMember.ID)"
|
||||
*
|
||||
* @param int|Member $member
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function RoleOf($member) {
|
||||
if(is_numeric($member)) {
|
||||
$member = DataObject::get_by_id('Member', $member);
|
||||
}
|
||||
|
||||
if(!$member) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if($this->isEditor($member)) {
|
||||
return _t('Blog.EDITOR', 'Editor');
|
||||
}
|
||||
|
||||
if($this->isWriter($member)) {
|
||||
return _t('Blog.WRITER', 'Writer');
|
||||
}
|
||||
|
||||
if($this->isContributor($member)) {
|
||||
return _t('Blog.CONTRIBUTOR', 'Contributor');
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this member is a writer of the blog.
|
||||
*
|
||||
* @param Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isWriter($member) {
|
||||
$isWriter = $this->isMemberOf($member, $this->Writers());
|
||||
$this->extend('updateIsWriter', $isWriter, $member);
|
||||
|
||||
return $isWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this member is a contributor of the blog.
|
||||
*
|
||||
* @param Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isContributor($member) {
|
||||
$isContributor = $this->isMemberOf($member, $this->Contributors());
|
||||
$this->extend('updateIsContributor', $isContributor, $member);
|
||||
|
||||
return $isContributor;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canAddChildren($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if($this->isEditor($member) || $this->isWriter($member) || $this->isContributor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return parent::canAddChildren($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getSettingsFields() {
|
||||
$fields = parent::getSettingsFields();
|
||||
|
||||
$fields->addFieldToTab('Root.Settings',
|
||||
NumericField::create('PostsPerPage', _t('Blog.PostsPerPage', 'Posts Per Page'))
|
||||
);
|
||||
|
||||
$members = $this->getCandidateUsers()->map()->toArray();
|
||||
|
||||
$editorField = ListboxField::create('Editors', 'Editors', $members)
|
||||
->setMultiple(true)
|
||||
->setRightTitle('<a class="toggle-description">help</a>')
|
||||
->setDescription('
|
||||
An editor has control over specific Blogs, and all posts included within it. Short of being able to assign other editors to a blog, they are able to handle most changes to their assigned blog.<br />
|
||||
<br />
|
||||
Editors have these permissions:<br />
|
||||
<br />
|
||||
Update or publish any BlogPost in their Blog<br />
|
||||
Update or publish their Blog<br />
|
||||
Assign/unassign writers to their Blog<br />
|
||||
Assign/unassign contributors to their Blog<br />
|
||||
Assign/unassign any member as an author of a particular BlogPost
|
||||
');
|
||||
|
||||
if(!$this->canEditEditors()) {
|
||||
$editorField = $editorField->performDisabledTransformation();
|
||||
}
|
||||
|
||||
$writerField = ListboxField::create('Writers', 'Writers', $members)
|
||||
->setMultiple(true)
|
||||
->setRightTitle('<a class="toggle-description">help</a>')
|
||||
->setDescription('
|
||||
A writer has full control over creating, editing and publishing BlogPosts they have authored or have been assigned to. Writers are unable to edit BlogPosts to which they are not assigned.<br />
|
||||
<br />
|
||||
Writers have these permissions:<br />
|
||||
<br />
|
||||
Update or publish any BlogPost they have authored or have been assigned to<br />
|
||||
Assign/unassign any member as an author of a particular BlogPost they have authored or have been assigned to
|
||||
');
|
||||
|
||||
if(!$this->canEditWriters()) {
|
||||
$writerField = $writerField->performDisabledTransformation();
|
||||
}
|
||||
|
||||
$contributorField = ListboxField::create('Contributors', 'Contributors', $members)
|
||||
->setMultiple(true)
|
||||
->setRightTitle('<a class="toggle-description">help</a>')
|
||||
->setDescription('
|
||||
Contributors have the ability to create or edit BlogPosts, but are unable to publish without authorisation of an editor. They are also unable to assign other contributing authors to any of their BlogPosts.<br />
|
||||
<br />
|
||||
Contributors have these permissions:<br />
|
||||
<br />
|
||||
Update any BlogPost they have authored or have been assigned to
|
||||
');
|
||||
|
||||
if(!$this->canEditContributors()) {
|
||||
$contributorField = $contributorField->performDisabledTransformation();
|
||||
}
|
||||
|
||||
$fields->addFieldsToTab('Root.Users', array(
|
||||
$editorField,
|
||||
$writerField,
|
||||
$contributorField
|
||||
));
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of user candidates to be assigned to assist with this blog.
|
||||
*
|
||||
* @return SS_List
|
||||
*/
|
||||
protected function getCandidateUsers() {
|
||||
if($this->config()->grant_user_access) {
|
||||
return Member::get();
|
||||
} else {
|
||||
return Permission::get_members_by_permission(
|
||||
$this->config()->grant_user_permission
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if this user can edit the editors list.
|
||||
*
|
||||
* @param int|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canEditEditors($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$extended = $this->extendedCan('canEditEditors', $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, self::MANAGE_USERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if this user can edit writers list.
|
||||
*
|
||||
* @param int|Member $member
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function canEditWriters($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$extended = $this->extendedCan('canEditWriters', $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
if($this->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, self::MANAGE_USERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if this user can edit the contributors list.
|
||||
*
|
||||
* @param int|Member $member
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function canEditContributors($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$extended = $this->extendedCan('canEditContributors', $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
if($this->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, self::MANAGE_USERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns BlogPosts for a given date period.
|
||||
*
|
||||
* @param int $year
|
||||
* @param null|int $month
|
||||
* @param null|int $day
|
||||
*
|
||||
* @return DataList
|
||||
*/
|
||||
public function getArchivedBlogPosts($year, $month = null, $day = null) {
|
||||
$query = $this->getBlogPosts()->dataQuery();
|
||||
|
||||
$stage = $query->getQueryParam('Versioned.stage');
|
||||
|
||||
if($stage) {
|
||||
$stage = '_' . $stage;
|
||||
}
|
||||
|
||||
$query->innerJoin('BlogPost', sprintf('"SiteTree%s"."ID" = "BlogPost%s"."ID"', $stage, $stage));
|
||||
|
||||
$query->where(sprintf('YEAR("PublishDate") = \'%s\'', Convert::raw2sql($year)));
|
||||
|
||||
if($month) {
|
||||
$query->where(sprintf('MONTH("PublishDate") = \'%s\'', Convert::raw2sql($month)));
|
||||
|
||||
if($day) {
|
||||
$query->where(sprintf('DAY("PublishDate") = \'%s\'', Convert::raw2sql($day)));
|
||||
}
|
||||
}
|
||||
|
||||
return $this->getBlogPosts()->setDataQuery($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return blog posts.
|
||||
*
|
||||
* @return DataList of BlogPost objects
|
||||
*/
|
||||
public function getBlogPosts() {
|
||||
$blogPosts = BlogPost::get()->filter('ParentID', $this->ID);
|
||||
|
||||
$this->extend('updateGetBlogPosts', $blogPosts);
|
||||
|
||||
return $blogPosts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a link to a Member profile.
|
||||
*
|
||||
* @param string $urlSegment
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function ProfileLink($urlSegment) {
|
||||
return Controller::join_links($this->Link(), 'profile', $urlSegment);
|
||||
}
|
||||
|
||||
/**
|
||||
* This sets the title for our gridfield.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLumberjackTitle() {
|
||||
return _t('Blog.LumberjackTitle', 'Blog Posts');
|
||||
}
|
||||
|
||||
/**
|
||||
* This overwrites lumberjacks default gridfield config.
|
||||
*
|
||||
* @return GridFieldConfig
|
||||
*/
|
||||
public function getLumberjackGridFieldConfig() {
|
||||
return GridFieldConfig_BlogPost::create();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function providePermissions() {
|
||||
return array(
|
||||
Blog::MANAGE_USERS => array(
|
||||
'name' => _t(
|
||||
'Blog.PERMISSION_MANAGE_USERS_DESCRIPTION',
|
||||
'Manage users for individual blogs'
|
||||
),
|
||||
'help' => _t(
|
||||
'Blog.PERMISSION_MANAGE_USERS_HELP',
|
||||
'Allow assignment of Editors, Writers, or Contributors to blogs'
|
||||
),
|
||||
'category' => _t('Blog.PERMISSIONS_CATEGORY', 'Blog permissions'),
|
||||
'sort' => 100
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function onBeforeWrite() {
|
||||
parent::onBeforeWrite();
|
||||
$this->assignGroup();
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign users as necessary to the blog group.
|
||||
*/
|
||||
protected function assignGroup() {
|
||||
if(!$this->config()->grant_user_access) {
|
||||
return;
|
||||
}
|
||||
|
||||
$group = $this->getUserGroup();
|
||||
|
||||
foreach(array($this->Editors(), $this->Writers(), $this->Contributors()) as $levels) {
|
||||
foreach($levels as $user) {
|
||||
if(!$user->inGroup($group)) {
|
||||
$user->Groups()->add($group);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets or creates the group used to assign CMS access.
|
||||
*
|
||||
* @return Group
|
||||
*/
|
||||
protected function getUserGroup() {
|
||||
$code = $this->config()->grant_user_group;
|
||||
|
||||
$group = Group::get()->filter('Code', $code)->first();
|
||||
|
||||
if($group) {
|
||||
return $group;
|
||||
}
|
||||
|
||||
$group = new Group();
|
||||
$group->Title = 'Blog users';
|
||||
$group->Code = $code;
|
||||
|
||||
$group->write();
|
||||
|
||||
$permission = new Permission();
|
||||
$permission->Code = $this->config()->grant_user_permission;
|
||||
|
||||
$group->Permissions()->add($permission);
|
||||
|
||||
return $group;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*/
|
||||
class Blog_Controller extends Page_Controller {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $allowed_actions = array(
|
||||
'archive',
|
||||
'tag',
|
||||
'category',
|
||||
'rss',
|
||||
'profile',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $url_handlers = array(
|
||||
'tag/$Tag!' => 'tag',
|
||||
'category/$Category!' => 'category',
|
||||
'archive/$Year!/$Month/$Day' => 'archive',
|
||||
'profile/$URLSegment!' => 'profile',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $casting = array(
|
||||
'MetaTitle' => 'Text',
|
||||
'FilterDescription' => 'Text',
|
||||
);
|
||||
|
||||
/**
|
||||
* The current Blog Post DataList query.
|
||||
*
|
||||
* @var DataList
|
||||
*/
|
||||
protected $blogPosts;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function index() {
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
|
||||
$this->blogPosts = $dataRecord->getBlogPosts();
|
||||
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a Blog Member's profile.
|
||||
*
|
||||
* @return SS_HTTPResponse
|
||||
*/
|
||||
public function profile() {
|
||||
$profile = $this->getCurrentProfile();
|
||||
|
||||
if(!$profile) {
|
||||
return $this->httpError(404, 'Not Found');
|
||||
}
|
||||
|
||||
$this->blogPosts = $this->getCurrentProfilePosts();
|
||||
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Member associated with the current URL segment.
|
||||
*
|
||||
* @return null|Member
|
||||
*/
|
||||
public function getCurrentProfile() {
|
||||
$urlSegment = $this->request->param('URLSegment');
|
||||
|
||||
if($urlSegment) {
|
||||
return Member::get()
|
||||
->filter('URLSegment', $urlSegment)
|
||||
->first();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get posts related to the current Member profile.
|
||||
*
|
||||
* @return null|DataList
|
||||
*/
|
||||
public function getCurrentProfilePosts() {
|
||||
$profile = $this->getCurrentProfile();
|
||||
|
||||
if($profile) {
|
||||
return $profile->BlogPosts()->filter('ParentID', $this->ID);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders an archive for a specified date. This can be by year or year/month.
|
||||
*
|
||||
* @return null|SS_HTTPResponse
|
||||
*/
|
||||
public function archive() {
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
|
||||
$year = $this->getArchiveYear();
|
||||
$month = $this->getArchiveMonth();
|
||||
$day = $this->getArchiveDay();
|
||||
|
||||
if($this->request->param('Month') && !$month) {
|
||||
$this->httpError(404, 'Not Found');
|
||||
}
|
||||
|
||||
if($month && $this->request->param('Day') && !$day) {
|
||||
$this->httpError(404, 'Not Found');
|
||||
}
|
||||
|
||||
if($year) {
|
||||
$this->blogPosts = $dataRecord->getArchivedBlogPosts($year, $month, $day);
|
||||
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
$this->httpError(404, 'Not Found');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the archive year from the url.
|
||||
*
|
||||
* @return null|int
|
||||
*/
|
||||
public function getArchiveYear() {
|
||||
$year = $this->request->param('Year');
|
||||
|
||||
if(preg_match('/^[0-9]{4}$/', $year)) {
|
||||
return (int) $year;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the archive money from the url.
|
||||
*
|
||||
* @return null|int
|
||||
*/
|
||||
public function getArchiveMonth() {
|
||||
$month = $this->request->param('Month');
|
||||
|
||||
if(preg_match('/^[0-9]{1,2}$/', $month)) {
|
||||
if($month > 0 && $month < 13) {
|
||||
if(checkdate($month, 01, $this->getArchiveYear())) {
|
||||
return (int) $month;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the archive day from the url.
|
||||
*
|
||||
* @return null|int
|
||||
*/
|
||||
public function getArchiveDay() {
|
||||
$day = $this->request->param('Day');
|
||||
|
||||
if(preg_match('/^[0-9]{1,2}$/', $day)) {
|
||||
if(checkdate($this->getArchiveMonth(), $day, $this->getArchiveYear())) {
|
||||
return (int) $day;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the blog posts for a given tag.
|
||||
*
|
||||
* @return null|SS_HTTPResponse
|
||||
*/
|
||||
public function tag() {
|
||||
$tag = $this->getCurrentTag();
|
||||
|
||||
if($tag) {
|
||||
$this->blogPosts = $tag->BlogPosts();
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
$this->httpError(404, 'Not Found');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tag Getter for use in templates.
|
||||
*
|
||||
* @return null|BlogTag
|
||||
*/
|
||||
public function getCurrentTag() {
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
$tag = $this->request->param('Tag');
|
||||
if($tag) {
|
||||
return $dataRecord->Tags()
|
||||
->filter('URLSegment', array($tag, rawurlencode($tag)))
|
||||
->first();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the blog posts for a given category.
|
||||
*
|
||||
* @return null|SS_HTTPResponse
|
||||
*/
|
||||
public function category() {
|
||||
$category = $this->getCurrentCategory();
|
||||
|
||||
if($category) {
|
||||
$this->blogPosts = $category->BlogPosts();
|
||||
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
$this->httpError(404, 'Not Found');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Category Getter for use in templates.
|
||||
*
|
||||
* @return null|BlogCategory
|
||||
*/
|
||||
public function getCurrentCategory() {
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
$category = $this->request->param('Category');
|
||||
if($category) {
|
||||
return $dataRecord->Categories()
|
||||
->filter('URLSegment', array($category, rawurlencode($category)))
|
||||
->first();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the meta title for the current action.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMetaTitle() {
|
||||
$title = $this->data()->getTitle();
|
||||
$filter = $this->getFilterDescription();
|
||||
|
||||
if($filter) {
|
||||
$title = sprintf('%s - %s', $title, $filter);
|
||||
}
|
||||
|
||||
$this->extend('updateMetaTitle', $title);
|
||||
|
||||
return $title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a description of the current filter.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getFilterDescription() {
|
||||
$items = array();
|
||||
|
||||
$list = $this->PaginatedList();
|
||||
$currentPage = $list->CurrentPage();
|
||||
|
||||
if($currentPage > 1) {
|
||||
$items[] = _t(
|
||||
'Blog.FILTERDESCRIPTION_PAGE',
|
||||
'Page {page}',
|
||||
null,
|
||||
array(
|
||||
'page' => $currentPage,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if($author = $this->getCurrentProfile()) {
|
||||
$items[] = _t(
|
||||
'Blog.FILTERDESCRIPTION_AUTHOR',
|
||||
'By {author}',
|
||||
null,
|
||||
array(
|
||||
'author' => $author->Title,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if($tag = $this->getCurrentTag()) {
|
||||
$items[] = _t(
|
||||
'Blog.FILTERDESCRIPTION_TAG',
|
||||
'Tagged with {tag}',
|
||||
null,
|
||||
array(
|
||||
'tag' => $tag->Title,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if($category = $this->getCurrentCategory()) {
|
||||
$items[] = _t(
|
||||
'Blog.FILTERDESCRIPTION_CATEGORY',
|
||||
'In category {category}',
|
||||
null,
|
||||
array(
|
||||
'category' => $category->Title,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if($this->owner->getArchiveYear()) {
|
||||
if($this->owner->getArchiveDay()) {
|
||||
$date = $this->owner->getArchiveDate()->Nice();
|
||||
} elseif($this->owner->getArchiveMonth()) {
|
||||
$date = $this->owner->getArchiveDate()->format('F, Y');
|
||||
} else {
|
||||
$date = $this->owner->getArchiveDate()->format('Y');
|
||||
}
|
||||
|
||||
$items[] = _t(
|
||||
'Blog.FILTERDESCRIPTION_DATE',
|
||||
'In {date}',
|
||||
null,
|
||||
array(
|
||||
'date' => $date,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$result = '';
|
||||
|
||||
if($items) {
|
||||
$result = implode(', ', $items);
|
||||
}
|
||||
|
||||
$this->extend('updateFilterDescription', $result);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of paginated blog posts based on the BlogPost dataList.
|
||||
*
|
||||
* @return PaginatedList
|
||||
*/
|
||||
public function PaginatedList() {
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
|
||||
$posts = new PaginatedList($this->blogPosts);
|
||||
|
||||
if($this->PostsPerPage > 0) {
|
||||
$posts->setPageLength($this->PostsPerPage);
|
||||
} else {
|
||||
$pageSize = 99999;
|
||||
|
||||
if($count = $dataRecord->getBlogPosts()->count()) {
|
||||
$pageSize = $count;
|
||||
}
|
||||
|
||||
$posts->setPageLength($pageSize);
|
||||
}
|
||||
|
||||
$start = $this->request->getVar($posts->getPaginationGetVar());
|
||||
|
||||
$posts->setPageStart($start);
|
||||
|
||||
return $posts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays an RSS feed of blog posts.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function rss() {
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
|
||||
$rss = new RSSFeed($dataRecord->getBlogPosts(), $this->Link(), $this->MetaTitle, $this->MetaDescription);
|
||||
|
||||
$this->extend('updateRss', $rss);
|
||||
|
||||
return $rss->outputToBrowser();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current archive date.
|
||||
*
|
||||
* @return null|Date
|
||||
*/
|
||||
public function getArchiveDate() {
|
||||
$year = $this->getArchiveYear();
|
||||
$month = $this->getArchiveMonth();
|
||||
$day = $this->getArchiveDay();
|
||||
|
||||
if($year) {
|
||||
if($month) {
|
||||
$date = sprintf('%s-%s-01', $year, $month);
|
||||
|
||||
if($day) {
|
||||
$date = sprintf('%s-%s-%s', $year, $month, $day);
|
||||
}
|
||||
} else {
|
||||
$date = sprintf('%s-01-01', $year);
|
||||
}
|
||||
|
||||
return DBField::create_field('Date', $date);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a link to the RSS feed.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRSSLink() {
|
||||
return $this->Link('rss');
|
||||
}
|
||||
}
|
135
code/model/BlogCategory.php
Normal file
@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* A blog category for generalising blog posts.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*
|
||||
* @method Blog Blog()
|
||||
* @method ManyManyList BlogPosts()
|
||||
*
|
||||
* @property string $URLSegment
|
||||
* @property int $BlogID
|
||||
*/
|
||||
class BlogCategory extends DataObject implements CategorisationObject {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'Title' => 'Varchar(255)',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
'Blog' => 'Blog',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $belongs_many_many = array(
|
||||
'BlogPosts' => 'BlogPost',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = array(
|
||||
'URLSegmentExtension',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields() {
|
||||
$fields = new FieldList(
|
||||
TextField::create('Title', _t('BlogCategory.Title', 'Title'))
|
||||
);
|
||||
|
||||
$this->extend('updateCMSFields', $fields);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a relative link to this category.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLink() {
|
||||
return Controller::join_links($this->Blog()->Link(), 'category', $this->URLSegment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canView($member = null) {
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return $this->Blog()->canView($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreate($member = null) {
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
$permission = Blog::config()->grant_user_permission;
|
||||
|
||||
return Permission::checkMember($member, $permission);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canDelete($member = null) {
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return $this->Blog()->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canEdit($member = null) {
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return $this->Blog()->canEdit($member);
|
||||
}
|
||||
}
|
644
code/model/BlogPost.php
Normal file
@ -0,0 +1,644 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* An individual blog post.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*
|
||||
* @method ManyManyList Categories()
|
||||
* @method ManyManyList Tags()
|
||||
* @method ManyManyList Authors()
|
||||
* @method Blog Parent()
|
||||
*
|
||||
* @property string $PublishDate
|
||||
* @property string $AuthorNames
|
||||
* @property int $ParentID
|
||||
*/
|
||||
class BlogPost extends Page {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'PublishDate' => 'SS_Datetime',
|
||||
'AuthorNames' => 'Varchar(1024)',
|
||||
'Summary' => 'HTMLText',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
'FeaturedImage' => 'Image',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $many_many = array(
|
||||
'Categories' => 'BlogCategory',
|
||||
'Tags' => 'BlogTag',
|
||||
'Authors' => 'Member',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $defaults = array(
|
||||
'ShowInMenus' => false,
|
||||
'InheritSideBar' => true,
|
||||
'ProvideComments' => true,
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = array(
|
||||
'BlogPostFilter',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $searchable_fields = array(
|
||||
'Title',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $summary_fields = array(
|
||||
'Title',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $casting = array(
|
||||
'Excerpt' => 'Text',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $allowed_children = array();
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $default_sort = 'PublishDate DESC';
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $can_be_root = false;
|
||||
|
||||
/**
|
||||
* This will display or hide the current class from the SiteTree. This variable can be
|
||||
* configured using YAML.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
private static $show_in_sitetree = false;
|
||||
|
||||
/**
|
||||
* Determine the role of the given member.
|
||||
*
|
||||
* Call be called via template to determine the current user.
|
||||
*
|
||||
* @example "Hello $RoleOf($CurrentMember.ID)"
|
||||
*
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function RoleOf($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if(!$member) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if($this->isAuthor($member)) {
|
||||
return _t('BlogPost.AUTHOR', 'Author');
|
||||
}
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if($parent instanceof Blog) {
|
||||
return $parent->RoleOf($member);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the given member is an author of this post.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isAuthor($member = null) {
|
||||
if(!$member || !$member->exists()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$list = $this->Authors();
|
||||
|
||||
if($list instanceof UnsavedRelationList) {
|
||||
return in_array($member->ID, $list->getIDList());
|
||||
}
|
||||
|
||||
return $list->byID($member->ID) !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields() {
|
||||
Requirements::css(BLOGGER_DIR . '/css/cms.css');
|
||||
Requirements::javascript(BLOGGER_DIR . '/js/cms.js');
|
||||
|
||||
$self =& $this;
|
||||
|
||||
$this->beforeUpdateCMSFields(function ($fields) use ($self) {
|
||||
$uploadField = UploadField::create('FeaturedImage', _t('BlogPost.FeaturedImage', 'Featured Image'));
|
||||
$uploadField->getValidator()->setAllowedExtensions(array('jpg', 'jpeg', 'png', 'gif'));
|
||||
|
||||
/**
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->insertAfter($uploadField, 'Content');
|
||||
|
||||
$summary = HtmlEditorField::create('Summary', false);
|
||||
$summary->setRows(5);
|
||||
$summary->setDescription(_t(
|
||||
'BlogPost.SUMMARY_DESCRIPTION',
|
||||
'If no summary is specified the first 30 words will be used.'
|
||||
));
|
||||
|
||||
$summaryHolder = ToggleCompositeField::create(
|
||||
'CustomSummary',
|
||||
_t('BlogPost.CUSTOMSUMMARY', 'Add A Custom Summary'),
|
||||
array(
|
||||
$summary,
|
||||
)
|
||||
);
|
||||
$summaryHolder->setHeadingLevel(4);
|
||||
$summaryHolder->addExtraClass('custom-summary');
|
||||
|
||||
$fields->insertAfter($summaryHolder, 'FeaturedImage');
|
||||
|
||||
$fields->push(HiddenField::create('MenuTitle'));
|
||||
|
||||
$urlSegment = $fields->dataFieldByName('URLSegment');
|
||||
$urlSegment->setURLPrefix($self->Parent()->RelativeLink());
|
||||
|
||||
$fields->removeFieldsFromTab('Root.Main', array(
|
||||
'MenuTitle',
|
||||
'URLSegment',
|
||||
));
|
||||
|
||||
$authorField = ListboxField::create(
|
||||
'Authors',
|
||||
_t('BlogPost.Authors', 'Authors'),
|
||||
Member::get()->map()->toArray()
|
||||
)->setMultiple(true);
|
||||
|
||||
$authorNames = TextField::create(
|
||||
'AuthorNames',
|
||||
_t('BlogPost.AdditionalCredits', 'Additional Credits'),
|
||||
null,
|
||||
1024
|
||||
);
|
||||
$authorNames->setDescription('If some authors of this post don\'t have CMS access, enter their name(s) here. You can separate multiple names with a comma.');
|
||||
|
||||
if(!$self->canEditAuthors()) {
|
||||
$authorField = $authorField->performDisabledTransformation();
|
||||
$authorNames = $authorNames->performDisabledTransformation();
|
||||
}
|
||||
|
||||
$publishDate = DatetimeField::create('PublishDate', _t('BlogPost.PublishDate', 'Publish Date'));
|
||||
$publishDate->getDateField()->setConfig('showcalendar', true);
|
||||
|
||||
// Get categories and tags
|
||||
$parent = $self->Parent();
|
||||
$categories = $parent instanceof Blog
|
||||
? $parent->Categories()
|
||||
: BlogCategory::get();
|
||||
$tags = $parent instanceof Blog
|
||||
? $parent->Tags()
|
||||
: BlogTag::get();
|
||||
|
||||
$options = BlogAdminSidebar::create(
|
||||
$publishDate,
|
||||
$urlSegment,
|
||||
TagField::create(
|
||||
'Categories',
|
||||
_t('BlogPost.Categories', 'Categories'),
|
||||
$categories,
|
||||
$self->Categories()
|
||||
)
|
||||
->setCanCreate($self->canCreateCategories())
|
||||
->setShouldLazyLoad(true),
|
||||
TagField::create(
|
||||
'Tags',
|
||||
_t('BlogPost.Tags', 'Tags'),
|
||||
$tags,
|
||||
$self->Tags()
|
||||
)
|
||||
->setCanCreate($self->canCreateTags())
|
||||
->setShouldLazyLoad(true),
|
||||
$authorField,
|
||||
$authorNames
|
||||
)->setTitle('Post Options');
|
||||
|
||||
$fields->insertBefore($options, 'Root');
|
||||
});
|
||||
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->fieldByName('Root')->setTemplate('TabSet_holder');
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if this user can edit the authors list.
|
||||
*
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canEditAuthors($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$extended = $this->extendedCan('canEditAuthors', $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if($parent instanceof Blog && $parent->exists()) {
|
||||
if($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if($parent->isWriter($member) && $this->isAuthor($member)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, Blog::MANAGE_USERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return null|Member
|
||||
*/
|
||||
protected function getMember($member = null) {
|
||||
if(!$member) {
|
||||
$member = Member::currentUser();
|
||||
}
|
||||
|
||||
if(is_numeric($member)) {
|
||||
$member = Member::get()->byID($member);
|
||||
}
|
||||
|
||||
return $member;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether user can create new categories.
|
||||
*
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreateCategories($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if(!$parent || !$parent->exists() || !($parent instanceof Blog)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, 'ADMIN');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether user can create new tags.
|
||||
*
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreateTags($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if(!$parent || !$parent->exists() || !($parent instanceof Blog)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if($parent->isWriter($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, 'ADMIN');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* Update the PublishDate to now, if being published for the first time, and the date hasn't
|
||||
* been set to the future.
|
||||
*/
|
||||
public function onBeforePublish() {
|
||||
/**
|
||||
* @var SS_Datetime $publishDate
|
||||
*/
|
||||
$publishDate = $this->dbObject('PublishDate');
|
||||
|
||||
if($publishDate->InPast() && !$this->isPublished()) {
|
||||
$this->PublishDate = SS_Datetime::now()->getValue();
|
||||
$this->write();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* Sets blog relationship on all categories and tags assigned to this post.
|
||||
*/
|
||||
public function onAfterWrite() {
|
||||
parent::onAfterWrite();
|
||||
|
||||
foreach($this->Categories() as $category) {
|
||||
/**
|
||||
* @var BlogCategory $category
|
||||
*/
|
||||
$category->BlogID = $this->ParentID;
|
||||
$category->write();
|
||||
}
|
||||
|
||||
foreach($this->Tags() as $tag) {
|
||||
/**
|
||||
* @var BlogTag $tag
|
||||
*/
|
||||
$tag->BlogID = $this->ParentID;
|
||||
$tag->write();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canView($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if(!parent::canView($member)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @var SS_Datetime $publishDate
|
||||
*/
|
||||
$publishDate = $this->dbObject('PublishDate');
|
||||
|
||||
// Show past posts
|
||||
if(!$publishDate->exists() || !$publishDate->InFuture()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Anyone that can edit this page can view it
|
||||
return $this->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canPublish($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if(Permission::checkMember($member, 'ADMIN')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$extended = $this->extendedCan('canPublish', $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if($parent instanceof Blog && $parent->exists()) {
|
||||
if($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if($parent->isWriter($member) && $this->isAuthor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if($parent->isContributor($member)) {
|
||||
return parent::canEdit($member);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canEdit($member = null) {
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if(parent::canEdit($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if(!$parent || !$parent->exists() || !($parent instanceof Blog)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!$parent->isWriter($member) && !$parent->isContributor($member)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->isAuthor($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the post excerpt.
|
||||
*
|
||||
* @param int $wordsToDisplay
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function Excerpt($wordsToDisplay = 30) {
|
||||
/**
|
||||
* @var Text $content
|
||||
*/
|
||||
$content = $this->dbObject('Content');
|
||||
|
||||
return $content->Summary($wordsToDisplay);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a monthly archive link for the current blog post.
|
||||
*
|
||||
* @param string $type
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMonthlyArchiveLink($type = 'day') {
|
||||
/**
|
||||
* @var SS_Datetime $date
|
||||
*/
|
||||
$date = $this->dbObject('PublishDate');
|
||||
|
||||
if($type != 'year') {
|
||||
if($type == 'day') {
|
||||
return Controller::join_links(
|
||||
$this->Parent()->Link('archive'),
|
||||
$date->format('Y'),
|
||||
$date->format('m'),
|
||||
$date->format('d')
|
||||
);
|
||||
}
|
||||
|
||||
return Controller::join_links($this->Parent()->Link('archive'), $date->format('Y'), $date->format('m'));
|
||||
}
|
||||
|
||||
return Controller::join_links($this->Parent()->Link('archive'), $date->format('Y'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a yearly archive link for the current blog post.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getYearlyArchiveLink() {
|
||||
/**
|
||||
* @var SS_Datetime $date
|
||||
*/
|
||||
$date = $this->dbObject('PublishDate');
|
||||
|
||||
return Controller::join_links($this->Parent()->Link('archive'), $date->format('Y'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves static and dynamic authors linked to this post.
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
public function getCredits() {
|
||||
$list = new ArrayList();
|
||||
|
||||
$list->merge($this->getDynamicCredits());
|
||||
$list->merge($this->getStaticCredits());
|
||||
|
||||
return $list->sort('Name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves dynamic authors linked to this post.
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
protected function getDynamicCredits() {
|
||||
$items = new ArrayList();
|
||||
|
||||
foreach($this->Authors() as $author) {
|
||||
$items->push(
|
||||
$author->customise(array(
|
||||
'URL' => $this->Parent->ProfileLink($author->URLSegment),
|
||||
))
|
||||
);
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves static authors linked to this post.
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
protected function getStaticCredits() {
|
||||
$items = new ArrayList();
|
||||
|
||||
$authors = array_filter(preg_split('/\s*,\s*/', $this->AuthorNames));
|
||||
|
||||
foreach($authors as $author) {
|
||||
$item = new ArrayData(array(
|
||||
'Name' => $author,
|
||||
));
|
||||
|
||||
$items->push($item);
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the label for BlogPost.Title to 'Post Title' (Rather than 'Page name').
|
||||
*
|
||||
* @param bool $includeRelations
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function fieldLabels($includeRelations = true) {
|
||||
$labels = parent::fieldLabels($includeRelations);
|
||||
|
||||
$labels['Title'] = _t('BlogPost.PageTitleLabel', "Post Title");
|
||||
|
||||
return $labels;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function onBeforeWrite() {
|
||||
parent::onBeforeWrite();
|
||||
|
||||
if(!$this->PublishDate) {
|
||||
$this->PublishDate = SS_Datetime::now()->getValue();
|
||||
}
|
||||
|
||||
if(!$this->exists() && ($member = Member::currentUser())) {
|
||||
$this->Authors()->add($member);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*/
|
||||
class BlogPost_Controller extends Page_Controller {
|
||||
|
||||
}
|
136
code/model/BlogTag.php
Normal file
@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* A blog tag for keyword descriptions of a blog post.
|
||||
*
|
||||
* @package silverstripe
|
||||
* @subpackage blog
|
||||
*
|
||||
* @method Blog Blog()
|
||||
* @method ManyManyList BlogPosts
|
||||
*
|
||||
* @property string $Title
|
||||
* @property string $URLSegment
|
||||
* @property int $BlogID
|
||||
*/
|
||||
class BlogTag extends DataObject implements CategorisationObject {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'Title' => 'Varchar(255)',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
'Blog' => 'Blog',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $belongs_many_many = array(
|
||||
'BlogPosts' => 'BlogPost',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = array(
|
||||
'URLSegmentExtension',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields() {
|
||||
$fields = new FieldList(
|
||||
TextField::create('Title', _t('BlogTag.Title', 'Title'))
|
||||
);
|
||||
|
||||
$this->extend('updateCMSFields', $fields);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a relative URL for the tag link.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLink() {
|
||||
return Controller::join_links($this->Blog()->Link(), 'tag', $this->URLSegment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canView($member = null) {
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return $this->Blog()->canView($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreate($member = null) {
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
$permission = Blog::config()->grant_user_permission;
|
||||
|
||||
return Permission::checkMember($member, $permission);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canDelete($member = null) {
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return $this->Blog()->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canEdit($member = null) {
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return $this->Blog()->canEdit($member);
|
||||
}
|
||||
}
|
8
code/model/CategorisationObject.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @method ManyManyList BlogPosts
|
||||
*/
|
||||
interface CategorisationObject {
|
||||
|
||||
}
|
135
code/widgets/BlogArchiveWidget.php
Normal file
@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
if(!class_exists('Widget')) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*
|
||||
* @property string $ArchiveType
|
||||
* @property int $NumberToDisplay
|
||||
*/
|
||||
class BlogArchiveWidget extends Widget {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Archive';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Archive';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays an archive list of posts.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'NumberToDisplay' => 'Int',
|
||||
'ArchiveType' => 'Enum(\'Monthly,Yearly\', \'Monthly\')',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $defaults = array(
|
||||
'NumberOfMonths' => 12,
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
'Blog' => 'Blog',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields() {
|
||||
$self =& $this;
|
||||
|
||||
$this->beforeUpdateCMSFields(function ($fields) use ($self) {
|
||||
/**
|
||||
* @var Enum $archiveType
|
||||
*/
|
||||
$archiveType = $self->dbObject('ArchiveType');
|
||||
|
||||
$type = $archiveType->enumValues();
|
||||
|
||||
foreach($type as $k => $v) {
|
||||
$type[$k] = _t('BlogArchiveWidget.' . ucfirst(strtolower($v)), $v);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->merge(array(
|
||||
DropdownField::create('BlogID', _t('BlogArchiveWidget.Blog', 'Blog'), Blog::get()->map()),
|
||||
DropdownField::create('ArchiveType', _t('BlogArchiveWidget.ArchiveType', 'ArchiveType'), $type),
|
||||
NumericField::create('NumberToDisplay', _t('BlogArchiveWidget.NumberToDisplay', 'No. to Display'))
|
||||
));
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of months where blog posts are present.
|
||||
*
|
||||
* @return DataList
|
||||
*/
|
||||
public function getArchive() {
|
||||
$query = $this->Blog()->getBlogPosts()->dataQuery();
|
||||
|
||||
if($this->ArchiveType == 'Yearly') {
|
||||
$query->groupBy('DATE_FORMAT("PublishDate", \'%Y\')');
|
||||
} else {
|
||||
$query->groupBy('DATE_FORMAT("PublishDate", \'%Y-%M\')');
|
||||
}
|
||||
|
||||
$posts = $this->Blog()->getBlogPosts()->setDataQuery($query);
|
||||
|
||||
if($this->NumberToDisplay > 0) {
|
||||
$posts = $posts->limit($this->NumberToDisplay);
|
||||
}
|
||||
|
||||
$archive = new ArrayList();
|
||||
|
||||
if($posts->count() > 0) {
|
||||
foreach($posts as $post) {
|
||||
/**
|
||||
* @var BlogPost $post
|
||||
*/
|
||||
$date = new Date();
|
||||
$date->setValue($post->PublishDate);
|
||||
|
||||
if($this->ArchiveType == 'Yearly') {
|
||||
$year = $date->FormatI18N("%Y");
|
||||
$month = null;
|
||||
$title = $year;
|
||||
} else {
|
||||
$year = $date->FormatI18N("%Y");
|
||||
$month = $date->FormatI18N("%m");
|
||||
$title = $date->FormatI18N("%B %Y");
|
||||
}
|
||||
|
||||
$archive->push(new ArrayData(array(
|
||||
'Title' => $title,
|
||||
'Link' => Controller::join_links($this->Blog()->Link('archive'), $year, $month)
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
return $archive;
|
||||
}
|
||||
}
|
||||
|
||||
class BlogArchiveWidget_Controller extends Widget_Controller {
|
||||
|
||||
}
|
97
code/widgets/BlogCategoriesWidget.php
Normal file
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
if(!class_exists("Widget")) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*/
|
||||
class BlogCategoriesWidget extends Widget {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Categories';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Blog Categories';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays a list of blog categories.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'Limit' => 'Int',
|
||||
'Order' => 'Varchar',
|
||||
'Direction' => 'Varchar',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
'Blog' => 'Blog',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields() {
|
||||
$this->beforeUpdateCMSFields(function (FieldList $fields) {
|
||||
$fields[] = DropdownField::create(
|
||||
'BlogID', _t('BlogCategoriesWidget.Blog', 'Blog'), Blog::get()->map()
|
||||
);
|
||||
|
||||
$fields[] = NumericField::create(
|
||||
'Limit', _t('BlogCategoriesWidget.Limit.Label', 'Limit'), 0
|
||||
)
|
||||
->setDescription(_t('BlogCategoriesWidget.Limit.Description', 'Limit the number of categories shown by this widget (set to 0 to show all categories).'))
|
||||
->setMaxLength(3);
|
||||
|
||||
$fields[] = DropdownField::create(
|
||||
'Order', _t('BlogCategoriesWidget.Sort.Label', 'Sort'), array('Title' => 'Title', 'Created' => 'Created', 'LastUpdated' => 'Updated')
|
||||
)
|
||||
->setDescription(_t('BlogCategoriesWidget.Sort.Description', 'Change the order of categories shown by this widget.'));
|
||||
|
||||
$fields[] = DropdownField::create(
|
||||
'Direction', _t('BlogCategoriesWidget.Direction.Label', 'Direction'), array('ASC' => 'Ascending', 'DESC' => 'Descending')
|
||||
)
|
||||
->setDescription(_t('BlogCategoriesWidget.Direction.Description', 'Change the direction of ordering of categories shown by this widget.'));
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return DataList
|
||||
*/
|
||||
public function getCategories() {
|
||||
$blog = $this->Blog();
|
||||
|
||||
if (!$blog) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$query = $blog->Categories();
|
||||
|
||||
if ($this->Limit) {
|
||||
$query = $query->limit(Convert::raw2sql($this->Limit));
|
||||
}
|
||||
|
||||
if ($this->Order && $this->Direction) {
|
||||
$query = $query->sort(Convert::raw2sql($this->Order), Convert::raw2sql($this->Direction));
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
}
|
||||
|
||||
class BlogCategoriesWidget_Controller extends Widget_Controller {
|
||||
|
||||
}
|
77
code/widgets/BlogRecentPostsWidget.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
if(!class_exists("Widget")) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*
|
||||
* @property int $NumberOfPosts
|
||||
*/
|
||||
class BlogRecentPostsWidget extends Widget {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Recent Posts';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Recent Posts';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays a list of recent blog posts.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'NumberOfPosts' => 'Int',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
'Blog' => 'Blog',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields() {
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
/**
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->merge(array(
|
||||
DropdownField::create('BlogID', _t('BlogRecentPostsWidget.Blog', 'Blog'), Blog::get()->map()),
|
||||
NumericField::create('NumberOfPosts', _t('BlogRecentPostsWidget.NumberOfPosts', 'Number of Posts'))
|
||||
));
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getPosts() {
|
||||
$blog = $this->Blog();
|
||||
|
||||
if($blog) {
|
||||
return $blog->getBlogPosts()
|
||||
->sort('"PublishDate" DESC')
|
||||
->limit($this->NumberOfPosts);
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
class BlogRecentPostsWidget_Controller extends Widget_Controller {
|
||||
|
||||
}
|
97
code/widgets/BlogTagsWidget.php
Normal file
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
if(!class_exists("Widget")) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*/
|
||||
class BlogTagsWidget extends Widget {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Tags';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Blog Tags';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays a list of blog tags.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
'Limit' => 'Int',
|
||||
'Order' => 'Varchar',
|
||||
'Direction' => 'Varchar',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
'Blog' => 'Blog',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields() {
|
||||
$this->beforeUpdateCMSFields(function (Fieldlist $fields) {
|
||||
$fields[] = DropdownField::create(
|
||||
'BlogID', _t('BlogTagsWidget.Blog', 'Blog'), Blog::get()->map()
|
||||
);
|
||||
|
||||
$fields[] = NumericField::create(
|
||||
'Limit', _t('BlogTagsWidget.Limit.Label', 'Limit'), 0
|
||||
)
|
||||
->setDescription(_t('BlogTagsWidget.Limit.Description', 'Limit the number of tags shown by this widget (set to 0 to show all tags).'))
|
||||
->setMaxLength(3);
|
||||
|
||||
$fields[] = DropdownField::create(
|
||||
'Order', _t('BlogTagsWidget.Sort.Label', 'Sort'), array('Title' => 'Title', 'Created' => 'Created', 'LastUpdated' => 'Updated')
|
||||
)
|
||||
->setDescription(_t('BlogTagsWidget.Sort.Description', 'Change the order of tags shown by this widget.'));
|
||||
|
||||
$fields[] = DropdownField::create(
|
||||
'Direction', _t('BlogTagsWidget.Direction.Label', 'Direction'), array('ASC' => 'Ascending', 'DESC' => 'Descending')
|
||||
)
|
||||
->setDescription(_t('BlogTagsWidget.Direction.Description', 'Change the direction of ordering of tags shown by this widget.'));
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return DataList
|
||||
*/
|
||||
public function getTags() {
|
||||
$blog = $this->Blog();
|
||||
|
||||
if (!$blog) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$query = $blog->Tags();
|
||||
|
||||
if ($this->Limit) {
|
||||
$query = $query->limit(Convert::raw2sql($this->Limit));
|
||||
}
|
||||
|
||||
if ($this->Order && $this->Direction) {
|
||||
$query = $query->sort(Convert::raw2sql($this->Order), Convert::raw2sql($this->Direction));
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
}
|
||||
|
||||
class BlogTagsWidget_Controller extends Widget_Controller {
|
||||
|
||||
}
|
@ -1,58 +1,39 @@
|
||||
{
|
||||
"name": "silverstripe/blog",
|
||||
"description": "A fresh take on blogging in Silverstripe set out to tackle the issue of a cluttered Site Tree.",
|
||||
"keywords": [
|
||||
"silverstripe",
|
||||
"blog",
|
||||
"news"
|
||||
],
|
||||
"type": "silverstripe-vendormodule",
|
||||
"require": {
|
||||
"php": "^7.4 || ^8.0",
|
||||
"silverstripe/cms": "^4.0",
|
||||
"silverstripe/lumberjack": "^2.0",
|
||||
"silverstripe/tagfield": "^2.0",
|
||||
"silverstripe/assets": "^1.0",
|
||||
"silverstripe/asset-admin": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"silverstripe/recipe-testing": "^2",
|
||||
"squizlabs/php_codesniffer": "^3.0",
|
||||
"silverstripe/widgets": "^2",
|
||||
"silverstripe/comments": "^3.7",
|
||||
"silverstripe/content-widget": "^2"
|
||||
},
|
||||
"extra": {
|
||||
"expose": [
|
||||
"client/dist",
|
||||
"client/images"
|
||||
]
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"SilverStripe\\Blog\\": "src/",
|
||||
"SilverStripe\\Blog\\Tests\\": "tests/php/",
|
||||
"SilverStripe\\Blog\\Tests\\Behat\\Context\\": "tests/behat/src/"
|
||||
}
|
||||
},
|
||||
"license": "BSD-2-Clause",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Michael Strong",
|
||||
"email": "github@michaelstrong.co.uk"
|
||||
}
|
||||
],
|
||||
"suggest": {
|
||||
"silverstripe/widgets": "Some widgets come with the blog which are compatible with the widgets module.",
|
||||
"silverstripe/comments": "This module adds comments to your blog."
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "vendor/bin/phpcs src/ tests/",
|
||||
"lint-clean": "vendor/bin/phpcbf src/ tests/"
|
||||
},
|
||||
"replace": {
|
||||
"micmania1/silverstripe-blog": "*"
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true
|
||||
"name": "silverstripe/blog",
|
||||
"description": "A fresh take on blogging in Silverstripe set out to tackle the issue of a cluttered Site Tree.",
|
||||
"keywords": [
|
||||
"silverstripe",
|
||||
"blog",
|
||||
"news"
|
||||
],
|
||||
"type": "silverstripe-module",
|
||||
"require": {
|
||||
"silverstripe/cms": ">=3.1.0",
|
||||
"silverstripe/lumberjack": "~1.1",
|
||||
"silverstripe/tagfield": "~1.0.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/PHPUnit": "~3.7@stable"
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"license": "BSD-2-Clause",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Michael Strong",
|
||||
"email": "github@michaelstrong.co.uk"
|
||||
}
|
||||
],
|
||||
"suggest": {
|
||||
"silverstripe/widgets": "Some widgets come with the blog which are compatible with the widgets module.",
|
||||
"silverstripe/comments": "This module adds comments to your blog."
|
||||
},
|
||||
"replace": {
|
||||
"micmania1/silverstripe-blog": "*"
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true
|
||||
}
|
23
config.rb
Executable file
@ -0,0 +1,23 @@
|
||||
# Require any additional compass plugins here.
|
||||
|
||||
# Set this to the root of your project when deployed:
|
||||
http_path = "/"
|
||||
css_dir = "css"
|
||||
sass_dir = "scss"
|
||||
javascripts_dir = "javascript"
|
||||
|
||||
# You can select your preferred output style here (can be overridden via the command line):
|
||||
# output_style = :expanded or :nested or :compact or :compressed
|
||||
|
||||
# To enable relative paths to assets via compass helper functions. Uncomment:
|
||||
relative_assets = true
|
||||
|
||||
# To disable debugging comments that display the original location of your selectors. Uncomment:
|
||||
line_comments = false
|
||||
|
||||
|
||||
# If you prefer the indented syntax, you might want to regenerate this
|
||||
# project again passing --syntax sass, or you can uncomment this:
|
||||
# preferred_syntax = :sass
|
||||
# and then run:
|
||||
# sass-convert -R --from scss --to sass scss scss && rm -rf sass && mv scss sass
|
14
css/blog.css
Normal file
@ -0,0 +1,14 @@
|
||||
.no-sidebar .content-container.size3of4 {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.blog-entry .post-image img {
|
||||
width: 98.75%;
|
||||
}
|
||||
|
||||
.blog-sidebar .WidgetHolder ul {
|
||||
margin-left: 0;
|
||||
}
|
||||
.blog-sidebar .WidgetHolder ul li {
|
||||
list-style-type: none;
|
||||
}
|
151
css/cms.css
Executable file
@ -0,0 +1,151 @@
|
||||
/**
|
||||
* CMS Styles
|
||||
*/
|
||||
/**
|
||||
* Include Compass framework
|
||||
*/
|
||||
/*
|
||||
* Sprite maps & Icons
|
||||
*/
|
||||
.blog-icon-sprite, .gridfield-icon .blog-icon-timer {
|
||||
background-image: url('../images/blog-icon-s0a5ab5f851.png');
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.gridfield-icon .blog-icon-timer {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
#FeaturedImage .middleColumn {
|
||||
clear: none;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.blog-admin-sidebar {
|
||||
width: 280px;
|
||||
border-right: none;
|
||||
border-left: 1px solid #C0C0C2;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
height: 100%;
|
||||
}
|
||||
.blog-admin-sidebar .cms-panel-toggle a {
|
||||
text-align: left;
|
||||
}
|
||||
.blog-admin-sidebar ~ .blog-admin-outer {
|
||||
width: 100%;
|
||||
padding-right: 280px;
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
overflow-y: hidden;
|
||||
overflow-x: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.blog-admin-sidebar ~ .blog-admin-outer > .ss-tabset {
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
.blog-admin-sidebar ~ .blog-admin-outer > .ss-tabset #Title label {
|
||||
float: none;
|
||||
}
|
||||
.blog-admin-sidebar ~ .blog-admin-outer > .ss-tabset #Title .middleColumn, .blog-admin-sidebar ~ .blog-admin-outer > .ss-tabset #Title input {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
.blog-admin-sidebar .cms-content-view > .field + .field {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.blog-admin-sidebar .cms-content-view > .field.urlsegment .preview {
|
||||
padding-top: 0;
|
||||
line-height: 25px;
|
||||
}
|
||||
.blog-admin-sidebar .cms-content-view > .field.urlsegment .edit {
|
||||
float: right;
|
||||
}
|
||||
.blog-admin-sidebar .cms-content-view > .field.datetime > .middleColumn > .date {
|
||||
width: 60%;
|
||||
}
|
||||
.blog-admin-sidebar .cms-content-view > .field.datetime > .middleColumn > .time {
|
||||
width: 36%;
|
||||
float: right;
|
||||
}
|
||||
.blog-admin-sidebar .cms-content-view > .field.datetime > .middleColumn .middleColumn, .blog-admin-sidebar .cms-content-view > .field.datetime > .middleColumn input {
|
||||
width: 100%;
|
||||
}
|
||||
.blog-admin-sidebar.collapsed ~ .blog-admin-outer {
|
||||
padding-right: 41px;
|
||||
}
|
||||
.blog-admin-sidebar.cms-content-tools .cms-panel-content {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.toggle-description {
|
||||
text-indent: -1000000px;
|
||||
display: inline-block;
|
||||
background: url("../images/information.png") no-repeat center center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.middleColumn.toggle-description-correct-middle {
|
||||
margin-left: 0;
|
||||
float: left;
|
||||
width: 416px;
|
||||
}
|
||||
|
||||
label.right.toggle-description-correct-right {
|
||||
display: inline-block;
|
||||
margin-left: 0;
|
||||
clear: none;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.description.toggle-description-correct-description {
|
||||
width: 416px;
|
||||
padding: 12px 0;
|
||||
}
|
||||
|
||||
.custom-summary .ui-accordion-content .field {
|
||||
margin: 0;
|
||||
}
|
||||
.custom-summary .ui-accordion-content,
|
||||
.custom-summary .ui-accordion-content .field {
|
||||
padding: 0;
|
||||
}
|
||||
.custom-summary .ui-icon-triangle-1-e {
|
||||
background-position: -16px -128px;
|
||||
}
|
||||
|
||||
.cms table.ss-gridfield-table tr td.MergeAction {
|
||||
width: 225px;
|
||||
}
|
||||
.cms table.ss-gridfield-table tr td.MergeAction a {
|
||||
display: block;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
.cms table.ss-gridfield-table tr td.MergeAction select {
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.cms-content-actions,
|
||||
.cms-preview-controls {
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.blog-cms-categorisation .MergeActionReveal {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.blog-cms-categorisation .MergeActionReveal:after {
|
||||
content: '';
|
||||
background: url("../images/move-icon.png");
|
||||
display: inline-block;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
margin-left: 4px;
|
||||
}
|
BIN
docs/en/_images/blog-post-management.png
Normal file → Executable file
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 31 KiB |
BIN
docs/en/_images/blog-settings-pagination.png
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
docs/en/_images/blogpost-add-tags-categories.png
Executable file
After Width: | Height: | Size: 7.1 KiB |
BIN
docs/en/_images/post-publish-date.png
Normal file
After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
@ -1,16 +0,0 @@
|
||||
## Configuring blog posts in SiteTree
|
||||
|
||||
Because your blog is part of the SiteTree, usage is the same as any other page.
|
||||
|
||||
By default, blog posts don't appear in the SiteTree, to avoid clutter. Instead they appear inside your blog as a GridField.
|
||||
|
||||
![](_images/blog-post-management.png)
|
||||
|
||||
If you'd rather display your posts within the SiteTree, you can do so using SilverStripe config.
|
||||
|
||||
In mysite/_config/settings.yml
|
||||
|
||||
```yaml
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
show_in_sitetree: true
|
||||
```
|
@ -1,13 +0,0 @@
|
||||
## Configuring featured images
|
||||
|
||||
By default, featured images for the blog are uploaded to the default SilverStripe location.
|
||||
If you prefer, you can specify a directory into which featured images will be uploaded by adding the following to your project's config:
|
||||
|
||||
|
||||
|
||||
```yaml
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
featured_images_directory: 'blog-images'
|
||||
```
|
||||
|
||||
replacing 'blog-images' with the name of the directory you wish to use.
|
@ -1,76 +0,0 @@
|
||||
# Configuring Blog for large user bases
|
||||
|
||||
By default the blog module user and author selection form fields include all users in your website as
|
||||
candidates for writers, editors and contributors. Additionally, when adding a blog post, again all users are selectable.
|
||||
This can cause issues with websites that store a large number of users in the database.
|
||||
|
||||
In this case you may need to restrict the number of user accounts that are eligible for selection.
|
||||
This module has some useful configuration options for this that can be added to your projects config.yml
|
||||
|
||||
## Restricting blog managers to a permission setting
|
||||
Default is to list all users and when one is selected, they are added to a `blog-users` group with `CMS_ACCESS_CMSMain` permissions.
|
||||
To only include those already having these permissions you can set in your `config.yml`:
|
||||
|
||||
```yaml
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
grant_user_access: false
|
||||
```
|
||||
|
||||
Note: depending on the inclusion order of your config.yml you may need to clear the config setting
|
||||
before updating it. In this case use the following in your `mysite/_config.php`:
|
||||
|
||||
```php
|
||||
SilverStripe\Core\Config\Config::modify()->remove(SilverStripe\Blog\Model\Blog::class, 'grant_user_access');
|
||||
```
|
||||
|
||||
If you create your own permissions and want to ensure the pool of possible selectable users includes
|
||||
those with this permission you can set the checked permission in `config.yml` with:
|
||||
|
||||
```yaml
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
grant_user_permission: SOME_PERMISSION_HERE
|
||||
```
|
||||
|
||||
## Restricting blog post authors selection to a known group
|
||||
In a blog post when selecting an author it will default to you (the logged in person creating the post),
|
||||
however you may be posting on behalf of another person. In this case the selection form field will offer
|
||||
all users as potential blog authors. Again for large websites with many thousands of users this can cause
|
||||
the site to be slow or non-responsive. We can turn on a filter so that authors need to be in a defined
|
||||
user group to be able to be selected as an author.
|
||||
|
||||
Enable this in your `config.yml` by adding a group code:
|
||||
|
||||
```yaml
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
restrict_authors_to_group: 'group_code'
|
||||
```
|
||||
|
||||
## Extension points in Blog and BlogPost users and how to use
|
||||
Both Blog and BlogPost have methods which return the list of candidate users or authors. If the previously
|
||||
mentioned methods of reducing this list are not suitable or you wish to roll your own, you can utilise a
|
||||
DataExtension to get the control you require.
|
||||
|
||||
For example in BlogPost:
|
||||
|
||||
```php
|
||||
protected function getCandidateAuthors()
|
||||
{
|
||||
if ($restrictedGroup = $this->config()->get('restrict_authors_to_group')) {
|
||||
if ($group = Group::get()->filter('Code', $restrictedGroup)->first()) {
|
||||
return $group->Members();
|
||||
}
|
||||
} else {
|
||||
$list = Member::get();
|
||||
$this->extend('updateCandidateAuthors', $list);
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Note the line `$this->extend('updateCandidateAuthors', $list);` which allows you to call a
|
||||
`updateCandidateAuthors` method in a DataExtension to the Blog Post class if you have not set a
|
||||
`restrict_authors_to_group` config, further filters the passed
|
||||
in Member list before it gets sent back to the form field.
|
||||
|
||||
See the documentation on [DataExtension](https://docs.silverstripe.org/en/developer_guides/extending/extensions/) for further implementation notes.
|
||||
|
@ -1,17 +0,0 @@
|
||||
# Configuring notifications
|
||||
|
||||
## Configuring whether notifications will send to authors of blogs if comments are spam
|
||||
|
||||
Default behaviour using the `silverstripe/comment-notifications` module is to send notifications of comments to
|
||||
authors regardless of whether they are spam or not.
|
||||
|
||||
In some cases you may wish to not send a notification email to an author if the comment is spam,
|
||||
this is a configurable option.
|
||||
|
||||
Add the following into your yaml config:
|
||||
|
||||
```
|
||||
SilverStripe\Blog\Model\BlogPostNotifications:
|
||||
notification_on_spam: false
|
||||
```
|
||||
|
@ -1,5 +0,0 @@
|
||||
# Configuring pagination
|
||||
To customise the look and feel of the pagination component, simply override the template located
|
||||
at `/blog/templates/SilverStripe/Blog/Includes/Pagination.ss`
|
||||
|
||||
If you have comments enabled, comment pagination is configurable via the [SilverStripe Comments Module configuration](https://github.com/silverstripe/silverstripe-comments/blob/master/docs/en/Configuration.md).
|
@ -1,12 +0,0 @@
|
||||
## Configuring user profiles
|
||||
|
||||
This module ships with User Profiles enabled by default.
|
||||
|
||||
If you'd prefer to disable this functionality and instead return a 404 for the `/profile/` page, you can do so using SilverStripe config.
|
||||
|
||||
In mysite/_config/settings.yml
|
||||
|
||||
```yaml
|
||||
SilverStripe\Blog\Model\BlogController:
|
||||
disable_profiles: true
|
||||
```
|
@ -1,18 +0,0 @@
|
||||
# Configuring Widgets
|
||||
|
||||
The blog module comes bundled with some useful widgets. To take advantage of them, you'll need to install the
|
||||
[SilverStripe widgets module](https://github.com/silverstripe/silverstripe-widgets). Widgets are totally optional -
|
||||
so your blog will work just fine without having widgets installed.
|
||||
|
||||
You can enable the widgets by adding the following YML config:
|
||||
|
||||
```yaml
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
extensions:
|
||||
- SilverStripe\Widgets\Extensions\WidgetPageExtension
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
extensions:
|
||||
- SilverStripe\Widgets\Extensions\WidgetPageExtension
|
||||
```
|
||||
|
||||
Once you have widgets installed you'll see the "Widgets" tab in the content section of your blog.
|
@ -1,7 +1,3 @@
|
||||
---
|
||||
title: Custom publish dates
|
||||
---
|
||||
|
||||
# Custom publish dates
|
||||
|
||||
Sometimes to want to write a post now, and have it published automatically, some time in the future.
|
@ -1,12 +0,0 @@
|
||||
# Blog documentation
|
||||
|
||||
## Development
|
||||
* [Configuring blog posts in Sitetree](configuring-blog-posts.md)
|
||||
* [Configuring blog when on large websites](configuring-large-websites.md)
|
||||
* [Configuring widgets](configuring-widgets.md)
|
||||
* [Configuring pagination](configuring-pagination.md)
|
||||
* [Configuring featured image uploads](configuring-featured-images.md)
|
||||
|
||||
## CMS user help
|
||||
* [User guide](userguide/index.md)
|
||||
|
9
docs/en/pagination.md
Normal file
@ -0,0 +1,9 @@
|
||||
# Pagination
|
||||
|
||||
By default your Blog will display ten posts per page. The number of posts per page is configurable via the "Settings" tab. Setting posts per page to zero will disable pagination, displaying all of your posts on a single page.
|
||||
|
||||
![](_images/blog-settings-pagination.png)
|
||||
|
||||
To customise the look and feel of the pagination component, simply override the template located at `/blog/templates/Includes/Pagination.ss`
|
||||
|
||||
If you have comments enabled, comment pagination is configurable via the [SilverStripe Comments Module configuration](https://github.com/silverstripe/silverstripe-comments/blob/master/docs/en/Configuration.md).
|
@ -1,7 +1,3 @@
|
||||
---
|
||||
title: Roles
|
||||
---
|
||||
|
||||
# Roles
|
||||
|
||||
Blog authoring and management can be delegated to users at up to three different levels. Users assigned to a blog
|
@ -1,7 +1,3 @@
|
||||
---
|
||||
title: RSS feed
|
||||
---
|
||||
|
||||
# RSS feed
|
||||
|
||||
Each blog you create comes with it's own RSS feed. Access your blog's RSS feed by adding '/rss' to the end of the URL. For example http://yoursite.com/yourblog/rss/
|
7
docs/en/tags-and-categories.md
Normal file
@ -0,0 +1,7 @@
|
||||
# Tags and categories
|
||||
|
||||
Quickly add new tags and categories to your posts.
|
||||
|
||||
![](_images/blogpost-add-tags-categories.png)
|
||||
|
||||
We use the [SilverStripe TagField module](https://github.com/silverstripe-labs/silverstripe-tagfield) to allow easy management of tags and categories, on the fly.
|
Before Width: | Height: | Size: 326 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 125 KiB |
Before Width: | Height: | Size: 161 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 114 KiB |
@ -1,32 +0,0 @@
|
||||
---
|
||||
title: Adding a blog post
|
||||
summary: How to add a new blog post.
|
||||
---
|
||||
|
||||
# Adding a blog post
|
||||
|
||||
## Creating a new blog
|
||||
|
||||
On the top of the Contents pane, you will find a button marked "Add new." Click it, and a drop-down menu will show up. Select "Blog" from the STEP 2, then hit the "Create" button.
|
||||
|
||||
You will notice that a new blog page has been created, with the name of "New Blog". Rename this to "Blog" (or whatever you wish to call this page) and then you can later reorder where this is in your website tree.
|
||||
|
||||
Click on the new blog page to start creating posts.
|
||||
|
||||
![Adding a blog](_images/blogging-add-blog.png)
|
||||
|
||||
## Creating a blog post
|
||||
|
||||
To create a blog post, click on your Blog page in the Page Tree in the site-tree Pane. You will see a list of past blog posts and a green button reading "Add new Blog Post", click this to add a new post.
|
||||
|
||||
![Adding a blog post](_images/blogging-add-blog-post.png)
|
||||
|
||||
Fill out your blog post content as you would any page in the CMS.
|
||||
|
||||
You can also include a banner images and a custom summary description (if this is omitted the first 30 words of your post content will be used when displaying your posts's abstract).
|
||||
|
||||
![Banner image and summary](_images/blogging-banner-summary.png)
|
||||
|
||||
From the tab labelled "Post Options" you can set a publish date, categories, tags and authors.
|
||||
|
||||
![Setting blog options](_images/blogging-options.png)
|
@ -1,20 +0,0 @@
|
||||
---
|
||||
title: Blogging
|
||||
summary: Working with blogging and comments in SilverStripe CMS.
|
||||
---
|
||||
# Blogging in SilverStripe CMS
|
||||
|
||||
## Before we begin
|
||||
|
||||
Make sure that your SilverStripe CMS installation has the [Blog](https://addons.silverstripe.org/add-ons/silverstripe/blog/) module and optional, [Widgets](https://addons.silverstripe.org/add-ons/silverstripe/widgets/) and [Comments](https://addons.silverstripe.org/add-ons/silverstripe/comments/) modules installed.
|
||||
|
||||
## Blogging features
|
||||
|
||||
* [Adding blog posts](adding-blog-posts.md)
|
||||
* [Custom publishing dates](custom-publish-dates.md)
|
||||
* [Pagination](pagination.md)
|
||||
* [Roles](roles.md)
|
||||
* [RSS Feed](rss-feed.md)
|
||||
* [Tags and categories](tags-and-categories.md)
|
||||
* [Using widgets](using-widgets.md)
|
||||
* [Managing comments](managing-comments.md)
|
@ -1,14 +0,0 @@
|
||||
---
|
||||
title: Managing comments
|
||||
---
|
||||
|
||||
# Managing comments
|
||||
|
||||
**This guide assumes you have the optional [Comments](https://addons.silverstripe.org/add-ons/silverstripe/comments/) module installed**
|
||||
|
||||
If comments have been enabled on your website you will be able to moderate comments. You can access all comments through the left navigation
|
||||
item title "Comments" or on a per blog post basis in the "Comments" tab when editing a blog post.
|
||||
|
||||
As new comments are made they show in the "New" tab. From here you can opt to approve comments or mark a comment as spam.
|
||||
|
||||
![Comments interface](_images/comments.png)
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Pagination
|
||||
---
|
||||
|
||||
# Pagination
|
||||
|
||||
By default your Blog will display ten posts per page. The number of posts per page is configurable via the "Settings" tab. Setting posts per page to zero will disable pagination, displaying all of your posts on a single page.
|
||||
|
||||
![](_images/blog-settings-pagination.png)
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Tags and categories
|
||||
---
|
||||
|
||||
# Tags and categories
|
||||
|
||||
Quickly add new tags and categories to your posts.
|
||||
|
||||
![](_images/blogpost-add-tags-categories.png)
|
@ -1,10 +1,20 @@
|
||||
---
|
||||
title: Using widgets
|
||||
---
|
||||
# Widgets
|
||||
|
||||
# Using Widgets
|
||||
The blog module comes bundled with some useful widgets. To take advantage of them, you'll need to install the [SilverStripe widgets module](https://github.com/silverstripe/silverstripe-widgets). Widgets are totally optional - so your blog will work just fine without having widgets installed.
|
||||
|
||||
**This guide assumes you have the optional [Widgets](https://addons.silverstripe.org/add-ons/silverstripe/widgets/) module installed**
|
||||
You can enable the widgets by adding the following YML config:
|
||||
|
||||
```yml
|
||||
Blog:
|
||||
extensions:
|
||||
- WidgetPageExtension
|
||||
|
||||
BlogPost:
|
||||
extensions:
|
||||
- WidgetPageExtension
|
||||
```
|
||||
|
||||
Once you have widgets installed you'll see the "Widgets" tab in the content section of your blog.
|
||||
|
||||
![](_images/widgets.png)
|
||||
|
||||
@ -12,37 +22,26 @@ To add a widget - simply click the *plus* icon and the widget will be appear in
|
||||
|
||||
After you've finished adding widgets, publish your blog, and your freshly minted widgets will appear in your blog's sidebar.
|
||||
|
||||
## Available blog widgets
|
||||
|
||||
### Archive
|
||||
## Archive
|
||||
|
||||
The archive widget helps you keep historical content relevant, by generating a list of posts, ordered by month or year.
|
||||
|
||||
![](_images/widgets-archive.png)
|
||||
|
||||
### Blog Categories
|
||||
## Blog Categories
|
||||
|
||||
The blog categories widget lets your readers easily find the content they're interested in.
|
||||
|
||||
![](_images/widgets-categories.png)
|
||||
|
||||
### Recent Posts
|
||||
## Recent Posts
|
||||
|
||||
The recent posts widget is great for providing quick links to your latest content.
|
||||
|
||||
![](_images/widgets-recent-posts.png)
|
||||
|
||||
### Blog Tags
|
||||
## Blog Tags
|
||||
|
||||
Similar to the blog categories widget, blog tags help your readers find relevant content, at more fine grained level.
|
||||
|
||||
![](_images/widgets-tags.png)
|
||||
|
||||
## Optional extra widgets
|
||||
|
||||
Additional widgets can be installed alongside your blog.
|
||||
|
||||
* [Content Widget - Display HTML content in a widget](https://github.com/silverstripe-labs/silverstripe-content-widget)
|
||||
|
||||
|
||||
|
BIN
images/blog-icon-s0a5ab5f851.png
Normal file
After Width: | Height: | Size: 680 B |
BIN
images/blog-icon/timer.png
Executable file
After Width: | Height: | Size: 844 B |
BIN
images/information.png
Executable file
After Width: | Height: | Size: 778 B |
BIN
images/move-icon.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
118
js/cms.js
Normal file
@ -0,0 +1,118 @@
|
||||
(function ($) {
|
||||
|
||||
$.entwine('ss', function ($) {
|
||||
|
||||
/**
|
||||
* Register expandable help text functions with fields.
|
||||
*/
|
||||
$('.toggle-description').entwine({
|
||||
'onadd': function () {
|
||||
var $this = $(this);
|
||||
|
||||
/**
|
||||
* Prevent multiple events being added.
|
||||
*/
|
||||
if ($this.hasClass('toggle-description-enabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this.addClass('toggle-description-enabled');
|
||||
|
||||
/**
|
||||
* Toggle next description when button is clicked.
|
||||
*/
|
||||
var shown = false;
|
||||
|
||||
$this.on('click', function() {
|
||||
$this.parent().next('.description')[shown ? 'hide' : 'show']();
|
||||
|
||||
$this.toggleClass('toggle-description-shown');
|
||||
|
||||
shown = !shown;
|
||||
});
|
||||
|
||||
/**
|
||||
* Hide next description by default.
|
||||
*/
|
||||
$this.parent().next('.description').hide();
|
||||
|
||||
/**
|
||||
* Add classes to correct inherited layout issues in a small context.
|
||||
*/
|
||||
$this.parent().addClass('toggle-description-correct-right');
|
||||
$this.parent().prev('.middleColumn').addClass('toggle-description-correct-middle');
|
||||
$this.parent().next('.description').addClass('toggle-description-correct-description');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Custom merge actions for tags and categories
|
||||
*/
|
||||
$('.MergeAction').entwine({
|
||||
'onadd': function() {
|
||||
var $this = $(this);
|
||||
|
||||
$this.on('click', 'select', function() {
|
||||
return false;
|
||||
});
|
||||
|
||||
$this.children('button').each(function(i, button) {
|
||||
var $button = $(button);
|
||||
var $select = $button.prev('select');
|
||||
|
||||
$button.before('<input type="hidden" name="' + $button.attr('data-target') + '" value="' + $select.val() + '" />');
|
||||
});
|
||||
|
||||
$this.on('change', 'select', function(e) {
|
||||
var $target = $(e.target);
|
||||
|
||||
$target.next('input').val($target.val());
|
||||
});
|
||||
|
||||
$this.children('button, select').hide();
|
||||
|
||||
$this.on('click', '.MergeActionReveal', function(e) {
|
||||
var $target = $(e.target);
|
||||
|
||||
$target.parent().children('button, select').show();
|
||||
$target.hide();
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Customise the cms-panel behaviour for blog sidebar
|
||||
*
|
||||
* see LeftAndMain.Panel.js for base behaviour
|
||||
*/
|
||||
$('.blog-admin-sidebar.cms-panel').entwine({
|
||||
minInnerWidth: 620,
|
||||
onadd: function() {
|
||||
this._super();
|
||||
this.updateLayout();
|
||||
|
||||
// If this panel is open and the left hand column is smaller than the minimum, contract it instead
|
||||
if(!this.hasClass('collapsed') && ($(".blog-admin-outer").width() < this.getminInnerWidth())) {
|
||||
this.collapsePanel();
|
||||
}
|
||||
},
|
||||
togglePanel: function(bool, silent) {
|
||||
this._super(bool, silent);
|
||||
this.updateLayout();
|
||||
},
|
||||
/**
|
||||
* Adjust minimum width of content to account for extra panel
|
||||
*
|
||||
* @returns {undefined}
|
||||
*/
|
||||
updateLayout: function() {
|
||||
$('.cms-container').updateLayoutOptions({
|
||||
minContentWidth: 820 + this.width()
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
})(jQuery);
|
29
lang/ar.yml
@ -1,29 +0,0 @@
|
||||
ar:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: المواضيع
|
||||
Title: عنوان
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'إضافة {اسم}'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: 'تم التعديل'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: عنوان
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
Archive: أرشفة
|
||||
By: بواسطة
|
||||
Comments: التعليقات
|
||||
PLURALNAME: 'الصفحات الأساسية'
|
||||
Tags: البطاقات
|
||||
has_many_Tags: البطاقات
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
db_Title: عنوان
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: عنوان
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: الكاتب
|
||||
FeaturedImage: 'صورة مميزة'
|
||||
PLURALNAME: 'الصفحات الأساسية'
|
||||
Tags: البطاقات
|
||||
many_many_Tags: البطاقات
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
db_Title: عنوان
|
29
lang/da.yml
@ -1,29 +0,0 @@
|
||||
da:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Tilføj {name}'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Ændret
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: og
|
||||
Archive: Arkiv
|
||||
Comments: Kommentarer
|
||||
Tags: Tags
|
||||
has_many_Tags: Tags
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
db_Title: Titel
|
||||
db_URLSegment: 'URL adresse'
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
db_URLSegment: 'URL adresse'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Forfatter
|
||||
Tags: Tags
|
||||
many_many_Tags: Tags
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
db_Title: Titel
|
||||
db_URLSegment: 'URL adresse'
|
170
lang/de.yml
@ -1,156 +1,54 @@
|
||||
de:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Beiträge
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Admin\GridFieldMergeAction:
|
||||
MovePostsTo: 'Verschiebe Beiträge zu'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: '{name} hinzufügen'
|
||||
AddFail: 'Kann Klasse {class} nicht in der Datenbank speichern.'
|
||||
PermissionFail: 'Sie haben keine Berechtigungen, um {class} zu erstellen.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Als Entwurf am {date} gespeichert'
|
||||
Modified: Bearbeitet
|
||||
Published: 'Veröffentlicht am {date}'
|
||||
Timer: 'Am {date} veröffentlichen'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: und
|
||||
Blog:
|
||||
Archive: Archiv
|
||||
By: von
|
||||
CONTRIBUTOR: Mitwirkende
|
||||
Categories: Kategorien
|
||||
Categorisation: Kategorisierung
|
||||
Category: Kategorie
|
||||
Comments: Kommentare
|
||||
DESCRIPTION: 'Fügt einen Blog zu Ihrer Webseite hinzu'
|
||||
EDITOR: Verfasser
|
||||
FILTERDESCRIPTION_AUTHOR: 'Von {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'In Kategorie {category}'
|
||||
FILTERDESCRIPTION_DATE: 'Am {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Seite {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Verschlagwortet mit {tag}'
|
||||
LessThanAMinuteToRead: 'Weniger als eine Minute zum Lesen'
|
||||
LumberjackTitle: Blog-Einträge
|
||||
MinutesToRead: 'Minute(n) zum Lesen'
|
||||
LumberjackTitle: 'Blog-Einträge'
|
||||
NoPosts: 'Keine Blog-Einträge vorhanden'
|
||||
PERMISSIONS_CATEGORY: 'Blog Berechtigungen'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Benutzer für einzelne Blog-Einträge verwalten'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Erlaubt, Editoren, Autoren und Mitwirkende zum Blog hinzuzufügen'
|
||||
PLURALNAME: 'Basis Seiten'
|
||||
PLURALS:
|
||||
one: 'Ein Blog'
|
||||
other: '{count} Blogs'
|
||||
Posted: Veröffentlicht
|
||||
PostedIn: 'Veröffentlicht in'
|
||||
PLURALNAME: Blogs
|
||||
PostsPerPage: 'Einträge pro Seite'
|
||||
ReadMoreAbout: 'Lesen Sie mehr über ''{title}'''
|
||||
SINGULARNAME: Blog
|
||||
Tag: Schlagwort
|
||||
Tagged: Verschlagwortet
|
||||
Tags: Schlagworte
|
||||
WRITER: Autor
|
||||
has_many_Categories: Kategorien
|
||||
has_many_Tags: Schlagwörter
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
Duplicate: 'Eine Blog Kategorie mit diesem Namen existiert bereits.'
|
||||
PLURALNAME: 'Blog Kategorien'
|
||||
PLURALS:
|
||||
one: 'Eine Blog Kategorie'
|
||||
other: '{count} Blog Kategorien'
|
||||
SINGULARNAME: 'Blog Kategorie'
|
||||
db_Title: Titel
|
||||
db_URLSegment: URL-Segment
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: Blogbeiträge
|
||||
TABBLOGPOSTS: Blogbeiträge
|
||||
db_URLSegment: URL-Segment
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
By: von
|
||||
EDITOR: Verfasser
|
||||
FILTERDESCRIPTION_AUTHOR: 'Von {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'In Kategorie {category}'
|
||||
FILTERDESCRIPTION_DATE: 'Am {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Seite {page}'
|
||||
PERMISSIONS_CATEGORY: 'Blog Berechtigungen'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Benutzer für einzelne Blog-Einträge verwalten'
|
||||
BlogArchiveWidget:
|
||||
Blog: Blog
|
||||
ArchiveType: Typ
|
||||
BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
BlogCategory:
|
||||
PLURALNAME: 'Kategorien'
|
||||
SINGULARNAME: 'Kategorie'
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Autor
|
||||
AdditionalCredits: 'Zusätzliche Credits'
|
||||
AdditionalCredits_Description: 'Wenn Autoren dieses Eintrags keinen Zugang zum CMS haben, können Sie die Namen hier mit Kommas getrennt eintragen.'
|
||||
Authors: Autoren
|
||||
CUSTOMSUMMARY: Zusammenfassung
|
||||
BlogPost:
|
||||
Categories: Kategorien
|
||||
FeaturedImage: Titelbild
|
||||
PLURALNAME: 'Basis Seiten'
|
||||
PLURALS:
|
||||
one: 'Ein Blogbeitrag'
|
||||
other: '{count} Blogbeiträge'
|
||||
PageTitleLabel: Titel
|
||||
PostOptions: Einstellungen
|
||||
DESCRIPTION: 'Allgemeine Inhaltsseite'
|
||||
PLURALNAME: 'Blog-Einträge'
|
||||
PageTitleLabel: 'Titel'
|
||||
PublishDate: 'Datum der Veröffentlichung'
|
||||
PublishDate_Description: 'Jetzt, wenn nichts eingegeben wird.'
|
||||
SINGULARNAME: Blog-Eintrag
|
||||
SUMMARY_DESCRIPTION: 'Wenn keine Zusammenfassung angegeben wird, werden die ersten 30 Wörter verwendet.'
|
||||
SINGULARNAME: 'Blog-Eintrag'
|
||||
Tags: Schlagworte
|
||||
many_many_Authors: Autoren
|
||||
many_many_Categories: Kategorien
|
||||
many_many_Tags: Schlagwörter
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
Duplicate: 'Ein Blog Tag mit diesem Namen existiert bereits.'
|
||||
PLURALNAME: 'Blog Schlagworte'
|
||||
PLURALS:
|
||||
one: 'Ein Blog Schlagwort'
|
||||
other: '{count} Blog Schlagworte'
|
||||
SINGULARNAME: 'Blog Schlagwort'
|
||||
db_Title: Titel
|
||||
db_URLSegment: URL-Segment
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: Archivtyp
|
||||
Blog: Blog
|
||||
NumberToDisplay: 'Anzahl anzeigen'
|
||||
PLURALNAME: 'Blog Archiv Widgets'
|
||||
PLURALS:
|
||||
one: 'Ein Blog Archiv Widget'
|
||||
other: '{count} Blog Archiv Widgets'
|
||||
SINGULARNAME: 'Blog Archiv Widget'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
Direction: Richtung
|
||||
Direction_Description: 'Ändern Sie die Sortierreihenfolge der Kategorien, die von diesem Widget angezeigt werden.'
|
||||
Limit: Begrenzen
|
||||
Limit_Description: 'Begrenzen Sie die Anzahl der angezeigten Kategorien (0 zeigt alle Kategorien)'
|
||||
PLURALNAME: 'Blog Kategorien Widgets'
|
||||
PLURALS:
|
||||
one: 'Ein Blog Kategorien Widget'
|
||||
other: '{count} Blog Kategorien Widgets'
|
||||
SINGULARNAME: 'Blog Kategorien Widget'
|
||||
Sort: Sortierung
|
||||
Sort_Description: 'Ändern Sie die Sortierung der Kategorien, die von diesem Widget angezeigt werden.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
AUTHOR: Autor
|
||||
Authors: Autoren
|
||||
BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Anzahl der Einträge'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
BlogTag:
|
||||
PLURALNAME: 'Schlagworte'
|
||||
SINGULARNAME: 'Schlagwort'
|
||||
Title: Titel
|
||||
BlogTagsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Anzahl der Einträge'
|
||||
PLURALNAME: 'Aktuelle Blog Einträge Widgets'
|
||||
PLURALS:
|
||||
one: 'Ein Aktuelle Blog Einträge Widget'
|
||||
other: '{count} Aktuelle Blog Einträge Widgets'
|
||||
SINGULARNAME: 'Aktuelle Blog Einträge Widget'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Blog
|
||||
PLURALNAME: Blog-Tag-Cloud-Widgets
|
||||
PLURALS:
|
||||
one: 'Ein Blog-Tag-Cloud-Widget'
|
||||
other: '{count} Blog-Tag-Cloud-Widgets'
|
||||
SINGULARNAME: Blog-Tag-Cloud-Widget
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Direction: Richtung
|
||||
Direction_Description: 'Ändern Sie die Sortierreihenfolge der Schlagworte, die von diesem Widget angezeigt werden.'
|
||||
Limit: Begrenzen
|
||||
Limit_Description: 'Begrenzen Sie die Anzahl der angezeigten Schlagworte (0 zeigt alle Schlagworte)'
|
||||
PLURALNAME: 'Blog Tags Widgets'
|
||||
PLURALS:
|
||||
one: 'Ein Blog Tags Widget'
|
||||
other: '{count} Blog Tags Widgets'
|
||||
SINGULARNAME: 'Blog Tags Widget'
|
||||
Sort: Sortierung
|
||||
Sort_Description: 'Ändern Sie die Sortierung der Schlagworte, die von diesem Widget angezeigt werden.'
|
||||
GridFieldAddByDBField:
|
||||
Add: '{name} hinzufügen'
|
||||
|
209
lang/en.yml
Normal file → Executable file
@ -1,28 +1,12 @@
|
||||
en:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Posts
|
||||
Title: Title
|
||||
SilverStripe\Blog\Admin\GridFieldMergeAction:
|
||||
MovePostsTo: 'Move posts to'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Add {name}'
|
||||
AddFail: 'Unable to save {class} to the database.'
|
||||
ButtonName: '{name}'
|
||||
PermissionFail: 'You don''t have permission to create a {class}.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Saved as Draft on {date}'
|
||||
Modified: Modified
|
||||
Published: 'Published on {date}'
|
||||
Timer: 'Publish at {date}'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Title
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: and
|
||||
ArchiveWidget:
|
||||
PLURALNAME: 'Archive Widgets'
|
||||
SINGULARNAME: 'Archive Widget'
|
||||
Blog:
|
||||
Archive: Archive
|
||||
By: by
|
||||
CONTRIBUTOR: Contributor
|
||||
Categories: Categories
|
||||
Categorisation: Categorisation
|
||||
Category: Category
|
||||
Comments: Comments
|
||||
DESCRIPTION: 'Adds a blog to your website.'
|
||||
@ -32,151 +16,100 @@ en:
|
||||
FILTERDESCRIPTION_DATE: 'In {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Page {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Tagged with {tag}'
|
||||
LessThanAMinuteToRead: 'Less than a minute to read'
|
||||
LumberjackTitle: 'Blog Posts'
|
||||
MinutesToRead: 'Minute(s) to read'
|
||||
NoPosts: 'There are no posts'
|
||||
PERMISSIONS_CATEGORY: 'Blog permissions'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Manage users for individual blogs'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Allow assignment of Editors, Writers, or Contributors to blogs'
|
||||
PLURALNAME: 'Base Pages'
|
||||
PLURALS:
|
||||
one: 'A Blog'
|
||||
other: '{count} Base Pages'
|
||||
Posted: Posted
|
||||
PostedIn: 'Posted in'
|
||||
PostsByUser: 'Posts by {firstname} {surname} for {title}'
|
||||
PostsPerPage: 'Posts Per Page'
|
||||
ReadMoreAbout: 'Read more about ''{title}''...'
|
||||
SINGULARNAME: Blog
|
||||
Tag: Tag
|
||||
Tagged: Tagged
|
||||
Tags: Tags
|
||||
UsersContributorsFieldDescription: "Contributors have the ability to create or edit BlogPosts, but are unable to publish without\n authorisation of an editor. They are also unable to assign other contributing authors to any of\n their BlogPosts.<br />\n <br />\n Contributors have these permissions:<br />\n <br />\n Update any BlogPost they have authored or have been assigned to"
|
||||
UsersEditorsFieldDescription: "An editor has control over specific Blogs, and all posts included within it.\n Short of being able to assign other editors to a blog, they are able to handle most changes to\n their assigned blog. <br /><br />\n Editors have these permissions:<br />\n <br />\n Update or publish any BlogPost in their Blog<br />\n Update or publish their Blog<br />\n Assign/unassign writers to their Blog<br />\n Assign/unassign contributors to their Blog<br />\n Assign/unassign any member as an author of a particular BlogPost"
|
||||
UsersWritersFieldDescription: "A writer has full control over creating, editing and publishing BlogPosts they have authored\n or have been assigned to. Writers are unable to edit BlogPosts to which they are not assigned.\n <br /><br />\n Writers have these permissions:<br />\n <br />\n Update or publish any BlogPost they have authored or have been assigned to<br />\n Assign/unassign any member as an author of a particular BlogPost they have authored or have been\n assigned to"
|
||||
WRITER: Writer
|
||||
db_PostsPerPage: 'Posts per page'
|
||||
has_many_Categories: Categories
|
||||
has_many_Tags: Tags
|
||||
many_many_Contributors: Contributors
|
||||
many_many_Editors: Editors
|
||||
many_many_Writers: Writers
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
Duplicate: 'A blog category already exists with that name.'
|
||||
PLURALNAME: 'Blog Categories'
|
||||
PLURALS:
|
||||
one: 'A Blog Category'
|
||||
other: '{count} Blog Categories'
|
||||
SINGULARNAME: 'Blog Category'
|
||||
belongs_many_many_BlogPosts: 'Blog posts'
|
||||
db_Title: Title
|
||||
db_URLSegment: 'URL segment'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Blog Posts'
|
||||
TABBLOGPOSTS: 'Blog Posts'
|
||||
belongs_many_many_BlogPosts: 'Blog posts'
|
||||
db_BlogProfileSummary: 'Blog profile summary'
|
||||
db_URLSegment: 'URL segment'
|
||||
has_one_BlogProfileImage: 'Blog profile image'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Title
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Author
|
||||
AdditionalCredits: 'Additional Credits'
|
||||
AdditionalCredits_Description: 'If some authors of this post don''t have CMS access, enter their name(s) here. You can separate multiple names with a comma.'
|
||||
Authors: Authors
|
||||
CUSTOMSUMMARY: 'Add A Custom Summary'
|
||||
Categories: Categories
|
||||
FeaturedImage: 'Featured Image'
|
||||
PLURALNAME: 'Base Pages'
|
||||
PLURALS:
|
||||
one: 'A Blog Post'
|
||||
other: '{count} Base Pages'
|
||||
PageTitleLabel: 'Post Title'
|
||||
PostOptions: 'Post Options'
|
||||
PublishDate: 'Publish Date'
|
||||
PublishDate_Description: 'Will be set to "now" if published without a value.'
|
||||
SINGULARNAME: 'Blog Post'
|
||||
SUMMARY_DESCRIPTION: 'If no summary is specified the first 30 words will be used.'
|
||||
Tags: Tags
|
||||
db_AuthorNames: 'Author names'
|
||||
db_PublishDate: 'Publish date'
|
||||
db_Summary: Summary
|
||||
has_one_FeaturedImage: 'Featured image'
|
||||
many_many_Authors: Authors
|
||||
many_many_Categories: Categories
|
||||
many_many_Tags: Tags
|
||||
SilverStripe\Blog\Model\BlogPostFeaturedExtension:
|
||||
FEATURED: 'Include Post in Feature Widget'
|
||||
db_FeaturedInWidget: 'Featured in widget'
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
Duplicate: 'A blog tag already exists with that name.'
|
||||
PLURALNAME: 'Blog Tags'
|
||||
PLURALS:
|
||||
one: 'A Blog Tag'
|
||||
other: '{count} Blog Tags'
|
||||
SINGULARNAME: 'Blog Tag'
|
||||
belongs_many_many_BlogPosts: 'Blog posts'
|
||||
db_Title: Title
|
||||
db_URLSegment: 'URL segment'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
BlogArchiveWidget:
|
||||
ArchiveType: ArchiveType
|
||||
Blog: Blog
|
||||
NumberToDisplay: 'No. to Display'
|
||||
PLURALNAME: 'Blog Archive Widgets'
|
||||
PLURALS:
|
||||
one: 'A Blog Archive Widget'
|
||||
other: '{count} Blog Archive Widgets'
|
||||
SINGULARNAME: 'Blog Archive Widget'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
Direction: Direction
|
||||
Direction_Description: 'Change the direction of ordering of categories shown by this widget.'
|
||||
Limit: Limit
|
||||
Limit_Description: 'Limit the number of categories shown by this widget (set to 0 to show all categories).'
|
||||
Direction:
|
||||
Description: 'Change the direction of ordering of categories shown by this widget.'
|
||||
Label: Direction
|
||||
Limit:
|
||||
Description: 'Limit the number of categories shown by this widget (set to 0 to show all categories).'
|
||||
Label: Limit
|
||||
PLURALNAME: 'Blog Categories Widgets'
|
||||
PLURALS:
|
||||
one: 'A Blog Categories Widget'
|
||||
other: '{count} Blog Categories Widgets'
|
||||
SINGULARNAME: 'Blog Categories Widget'
|
||||
Sort: Sort
|
||||
Sort_Description: 'Change the order of categories shown by this widget.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Number of Posts'
|
||||
PLURALNAME: 'Blog Featured Posts Widgets'
|
||||
PLURALS:
|
||||
one: 'A Blog Featured Posts Widget'
|
||||
other: '{count} Blog Featured Posts Widgets'
|
||||
SINGULARNAME: 'Blog Featured Posts Widget'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
Sort:
|
||||
Description: 'Change the order of categories shown by this widget.'
|
||||
Label: Sort
|
||||
BlogCategory:
|
||||
PLURALNAME: 'Blog Categories'
|
||||
SINGULARNAME: 'Blog Category'
|
||||
Title: Title
|
||||
BlogEntry:
|
||||
DESCRIPTION: 'Generic content page'
|
||||
PLURALNAME: 'Base Pages'
|
||||
SINGULARNAME: 'Blog Entry'
|
||||
BlogHolder:
|
||||
DESCRIPTION: 'Generic content page'
|
||||
PLURALNAME: 'Base Pages'
|
||||
SINGULARNAME: 'Blog Holder'
|
||||
BlogPost:
|
||||
AUTHOR: Author
|
||||
AdditionalCredits: 'Additional Credits'
|
||||
Authors: Authors
|
||||
CUSTOMSUMMARY: 'Add A Custom Summary'
|
||||
Categories: Categories
|
||||
DESCRIPTION: 'Generic content page'
|
||||
FeaturedImage: 'Featured Image'
|
||||
PLURALNAME: 'Base Pages'
|
||||
PageTitleLabel: 'Post Title'
|
||||
PublishDate: 'Publish Date'
|
||||
SINGULARNAME: 'Blog Post'
|
||||
SUMMARY_DESCRIPTION: 'If no summary is specified the first 30 words will be used.'
|
||||
Tags: Tags
|
||||
BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Number of Posts'
|
||||
PLURALNAME: 'Blog Recent Posts Widgets'
|
||||
PLURALS:
|
||||
one: 'A Blog Recent Posts Widget'
|
||||
other: '{count} Blog Recent Posts Widgets'
|
||||
SINGULARNAME: 'Blog Recent Posts Widget'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
BlogTag:
|
||||
PLURALNAME: 'Blog Tags'
|
||||
SINGULARNAME: 'Blog Tag'
|
||||
Title: Title
|
||||
BlogTagsWidget:
|
||||
Blog: Blog
|
||||
PLURALNAME: 'Blog Tags Cloud Widgets'
|
||||
PLURALS:
|
||||
one: 'A Blog Tags Cloud Widget'
|
||||
other: '{count} Blog Tags Cloud Widgets'
|
||||
SINGULARNAME: 'Blog Tags Cloud Widget'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Direction: Direction
|
||||
Direction_Description: 'Change the direction of ordering of tags shown by this widget.'
|
||||
Limit: Limit
|
||||
Limit_Description: 'Limit the number of tags shown by this widget (set to 0 to show all tags).'
|
||||
Direction:
|
||||
Description: 'Change the direction of ordering of tags shown by this widget.'
|
||||
Label: Direction
|
||||
Limit:
|
||||
Description: 'Limit the number of tags shown by this widget (set to 0 to show all tags).'
|
||||
Label: Limit
|
||||
PLURALNAME: 'Blog Tags Widgets'
|
||||
PLURALS:
|
||||
one: 'A Blog Tags Widget'
|
||||
other: '{count} Blog Tags Widgets'
|
||||
SINGULARNAME: 'Blog Tags Widget'
|
||||
Sort: Sort
|
||||
Sort_Description: 'Change the order of tags shown by this widget.'
|
||||
Sort:
|
||||
Description: 'Change the order of tags shown by this widget.'
|
||||
Label: Sort
|
||||
BlogTree:
|
||||
DESCRIPTION: 'Generic content page'
|
||||
PLURALNAME: 'Base Pages'
|
||||
SINGULARNAME: 'Blog Tree'
|
||||
GridFieldAddByDBField:
|
||||
Add: 'Add {name}'
|
||||
AddFail: 'Unable to save {class} to the database.'
|
||||
PermissionFail: 'You don''t have permission to create a {class}.'
|
||||
GridFieldBlogPostState:
|
||||
Draft: '<i class="btn-icon gridfield-icon btn-icon-pencil"></i> Saved as Draft on {date}'
|
||||
Published: '<i class="btn-icon gridfield-icon btn-icon-accept"></i> Published on {date}'
|
||||
Timer: '<i class="gridfield-icon blog-icon-timer"></i> Publish at {date}'
|
||||
TagCloudWidget:
|
||||
PLURALNAME: 'Tag Cloud Widgets'
|
||||
SINGULARNAME: 'Tag Cloud Widget'
|
||||
|
203
lang/eo.yml
@ -1,182 +1,79 @@
|
||||
eo:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Afiŝoj
|
||||
Title: Titolo
|
||||
SilverStripe\Blog\Admin\GridFieldMergeAction:
|
||||
MovePostsTo: 'Movi afiŝojn al'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Aldoni {name}'
|
||||
AddFail: '{klaso} ne estas konservebla al la datumbazo.'
|
||||
ButtonName: '{name}'
|
||||
PermissionFail: 'Vi ne havas permeson krei je {klaso}.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Konservita kiel malneto je {dato}'
|
||||
Modified: Ŝanĝita
|
||||
Published: 'Publikigita je {dato}'
|
||||
Timer: 'Publikigi je {dato}'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Titolo
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: kaj
|
||||
Blog:
|
||||
Archive: Arkivo
|
||||
By: de
|
||||
CONTRIBUTOR: Kontribuinto
|
||||
Categories: Kategorioj
|
||||
Categorisation: Kategoriigi
|
||||
Category: Kategorio
|
||||
Comments: Komentoj
|
||||
DESCRIPTION: 'Aldonas blogon al via retejo.'
|
||||
LumberjackTitle: 'Blogaj afiŝoj'
|
||||
NoPosts: 'Mankas afiŝoj'
|
||||
PLURALNAME: Blogaĵoj
|
||||
Posted: Afiŝita
|
||||
PostedIn: 'Afiŝita en'
|
||||
PostsPerPage: 'Afiŝoj en ĉiu paĝo'
|
||||
ReadMoreAbout: 'Legi plu pri ''{title}''...'
|
||||
SINGULARNAME: Blogo
|
||||
Tag: Etikedo
|
||||
Tagged: Havas etikedon
|
||||
Tags: Etikedoj
|
||||
By: de
|
||||
CONTRIBUTOR: Kontribuinto
|
||||
EDITOR: Redaktinto
|
||||
FILTERDESCRIPTION_AUTHOR: 'De {aŭtoro}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'En kategorio {kategorio}'
|
||||
FILTERDESCRIPTION_DATE: 'En {dato}'
|
||||
FILTERDESCRIPTION_PAGE: 'Paĝo {paĝo}'
|
||||
FILTERDESCRIPTION_TAG: 'Etikedo {etikedo}'
|
||||
LessThanAMinuteToRead: 'Malpli ol minuto por legi'
|
||||
LumberjackTitle: 'Blogaj afiŝoj'
|
||||
MinutesToRead: 'Minuto(j) por legi'
|
||||
NoPosts: 'Mankas afiŝoj'
|
||||
PERMISSIONS_CATEGORY: 'Blogaj permesoj'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Administri uzantojn por specifaj blogaĵoj'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Permesi agordi redaktantojn, verkantojn, aŭ kontribuantojn al blogoj'
|
||||
PLURALNAME: 'Bazaj paĝoj'
|
||||
PLURALS:
|
||||
one: '1 baza paĝo'
|
||||
other: '{count} bazaj paĝoj'
|
||||
Posted: Afiŝita
|
||||
PostedIn: 'Afiŝita en'
|
||||
PostsByUser: 'Afiŝoj laŭ {firstname} {surname} por {title}'
|
||||
PostsPerPage: 'Afiŝoj en ĉiu paĝo'
|
||||
ReadMoreAbout: 'Legi plu pri ''{title}''...'
|
||||
SINGULARNAME: Blogo
|
||||
Tag: Etikedo
|
||||
Tagged: 'Havas etikedon'
|
||||
Tags: Etikedoj
|
||||
UsersContributorsFieldDescription: "Kontribuantoj rajtas krei aŭ redakti BlogAfiŝojn, sed ne publikigi sen \npermeso de redaktanto, Ankaŭ ili ne rajtas asigni aliajn kontribuantajn aŭtorojn al iu el \n siaj BlogAfiŝoj.<br />\n <br />\n Kontribuantoj rajtas:<br />\n <br />\n Ĝisdatigi iun BlogAfiŝon kiun ili aŭtoris aŭ al kiu li/ŝi estas asignita."
|
||||
UsersEditorsFieldDescription: "Redaktanto regas specifajn BlogAfiŝojn, kaj ĉiujn afiŝojn en ĉiu.\n Malpli ol asigni aliajn redaktantojn al blogo, ili rajtas trakti plejmultajn ŝanĝojn al\n sia asignita blogo. <br /><br />\n Redaktantoj havas ĉi tiujn permesojn:<br />\n <br />\n Ĝisdatigi aŭ publikigi ajnan BlogAfiŝon en sia Blogo<br />\n Ĝisdatigi aŭ publikigi sian Blogon<br />\n Asigni/malasigni verkantojn al sia Blogo<br />\n Asigni/malasigni kontribuantojn al sia Blogo<br />\n Asigni/malasigni ajnan membron aŭtoro de specifa BlogAfiŝo"
|
||||
UsersWritersFieldDescription: "Verkanto tute regas krei, redakti kaj publikigi BlogAfiŝojn kiujn ili verkis\n aŭ al kiuj ili estas asignitaj. Verkantoj ne rajtas redakti BlogAfiŝon al kiu ili ne estas asignitaj.\n <br /><br />\n Verkantoj havas la jenajn permesojn:<br />\n <br />\n Ĝisdatigi aŭ publikigi ajnan BlogAfiŝon kiun ili verkis, aŭ al kiu ili estas asignitaj<br />\n Asigni/malasigni ajnan membron aŭtoro de specifa BlogAfiŝo kiun ili verkis aŭ al kiu ili estas asignita."
|
||||
WRITER: Verkanto
|
||||
db_PostsPerPage: 'Afiŝoj en ĉiu paĝo'
|
||||
has_many_Categories: Kategorioj
|
||||
has_many_Tags: Etikedoj
|
||||
many_many_Contributors: Kontribuintoj
|
||||
many_many_Editors: Redaktantoj
|
||||
many_many_Writers: Verkantoj
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
Duplicate: 'Bloga kategorio jam ekzistas kun tiu nomo'
|
||||
PLURALNAME: 'Blogaj kategorioj'
|
||||
PLURALS:
|
||||
one: 'Unu bloga kategorio'
|
||||
other: '{count} blogaj kategorioj'
|
||||
SINGULARNAME: 'Bloga kategorio'
|
||||
belongs_many_many_BlogPosts: 'Blogaj afiŝoj'
|
||||
db_Title: Titolo
|
||||
db_URLSegment: URL-segmento
|
||||
has_one_Blog: Blogo
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Blogaj afiŝoj'
|
||||
TABBLOGPOSTS: 'Blogaj afiŝoj'
|
||||
belongs_many_many_BlogPosts: 'Blogaj afiŝoj'
|
||||
db_BlogProfileSummary: 'Bloga profila resumo'
|
||||
db_URLSegment: URL-segmento
|
||||
has_one_BlogProfileImage: 'Bloga profila bildo'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Titolo
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Aŭtoro
|
||||
AdditionalCredits: 'Kromaj agnoskoj'
|
||||
AdditionalCredits_Description: 'Se iuj aŭtoroj de ĉi tiu afiŝo ne havas CMS-aliron, enigu iliajn nomo(j)n ĉi tie. Vi povas apartigi plurajn nomojn per komo.'
|
||||
Authors: Aŭtoroj
|
||||
CUSTOMSUMMARY: 'Aldoni propran resumon'
|
||||
Categories: Kategorioj
|
||||
FeaturedImage: 'Prezentita bildo'
|
||||
PLURALNAME: 'Bazaj paĝoj'
|
||||
PLURALS:
|
||||
one: '1 baza paĝo'
|
||||
other: '{count} bazaj paĝoj'
|
||||
PageTitleLabel: 'Titolo de afiŝo'
|
||||
PostOptions: 'Afiŝaj agordoj'
|
||||
PublishDate: 'Dato de publikigo'
|
||||
PublishDate_Description: 'Agordiĝos al "nun", se publikigita sen valoro'
|
||||
SINGULARNAME: Blogaĵo
|
||||
SUMMARY_DESCRIPTION: 'Se resumo ne estas agordita, la unuaj 30 vortoj uziĝos.'
|
||||
Tags: Etikedoj
|
||||
db_AuthorNames: 'Nomoj de aŭtoroj'
|
||||
db_PublishDate: 'Dato de publikigo'
|
||||
db_Summary: Resumo
|
||||
has_one_FeaturedImage: 'Prezentita bildo'
|
||||
many_many_Authors: Aŭtoroj
|
||||
many_many_Categories: Kategorioj
|
||||
many_many_Tags: Etikedoj
|
||||
SilverStripe\Blog\Model\BlogPostFeaturedExtension:
|
||||
FEATURED: 'Inkludi afiŝon en elstara fenestraĵo'
|
||||
db_FeaturedInWidget: 'Prezentita en fenestraĵo'
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
Duplicate: 'Blogaj etikedoj jam ekzistas kun tiu nomo'
|
||||
PLURALNAME: 'Blogaj etikedoj'
|
||||
PLURALS:
|
||||
one: 'Unu bloga etikedo'
|
||||
other: '{count} blogaj etikedoj'
|
||||
SINGULARNAME: 'Bloga etikedo'
|
||||
belongs_many_many_BlogPosts: 'Blogaj afiŝoj'
|
||||
db_Title: Titolo
|
||||
db_URLSegment: URL-segmento
|
||||
has_one_Blog: Blogo
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: ArkivoTipo
|
||||
BlogArchiveWidget:
|
||||
Blog: Blogo
|
||||
NumberToDisplay: 'Nombro vidigotaj'
|
||||
PLURALNAME: 'Fenestraĵoj por bloga arkivo'
|
||||
PLURALS:
|
||||
one: 'Unu fenestraĵo por bloga arkivo'
|
||||
other: '{count} fenestraĵoj por bloga arkivo'
|
||||
SINGULARNAME: 'Fenestraĵo por bloga arkivo'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
ArchiveType: Tipo
|
||||
BlogCategoriesWidget:
|
||||
Blog: Blogo
|
||||
Direction: Direkto
|
||||
Direction_Description: 'Ŝanĝi la direkton de ordigo de kategorioj vidigotaj de tiu fenestraĵo.'
|
||||
Limit: Limigi
|
||||
Limit_Description: 'Limigu la nombron da kategorioj vidigotaj de tiu fenestraĵo (agordu al 0 por vidigi ĉiujn kategoriojn).'
|
||||
PLURALNAME: 'Fenestraĵoj por blogaj kategorioj'
|
||||
PLURALS:
|
||||
one: 'Unu fenestraĵo por blogaj kategorioj'
|
||||
other: '{count} fenestraĵoj por blogaj kategorioj'
|
||||
SINGULARNAME: 'Fenestraĵo por blogaj kategorioj'
|
||||
Sort: Ordigi
|
||||
Sort_Description: 'Ŝanĝi la ordon de kategorioj vidigotaj de tiu fenestraĵo.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blogo
|
||||
NumberOfPosts: 'Nombro da afiŝoj'
|
||||
PLURALNAME: 'Fenestraĵoj de lastatempaj blogaĵoj'
|
||||
PLURALS:
|
||||
one: 'Unu fenestraĵo de lastatempa blogaĵo'
|
||||
other: '{count} fenestraĵoj de lastatempaj blogaĵoj'
|
||||
SINGULARNAME: 'Fenestraĵo de lastatempa blogaĵo'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
BlogCategory:
|
||||
PLURALNAME: 'Kategorioj'
|
||||
SINGULARNAME: 'Kategorio'
|
||||
Title: Titolo
|
||||
BlogPost:
|
||||
Categories: Kategorioj
|
||||
DESCRIPTION: 'Komuna enhavpaĝo'
|
||||
FeaturedImage: 'Prezentita bildo'
|
||||
PLURALNAME: 'Blogaj afiŝoj'
|
||||
PageTitleLabel: 'Titolo de afiŝo'
|
||||
PublishDate: 'Dato de publikigo'
|
||||
SINGULARNAME: 'Blogaĵo'
|
||||
Tags: Etikedoj
|
||||
AUTHOR: Aŭtoro
|
||||
AdditionalCredits: 'Kromaj agnoskoj'
|
||||
Authors: Aŭtoroj
|
||||
CUSTOMSUMMARY: 'Aldoni propran resumon'
|
||||
SUMMARY_DESCRIPTION: 'Se resumo ne estas agordita, la unuaj 30 vortoj uziĝos.'
|
||||
BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Nombro da afiŝoj'
|
||||
PLURALNAME: 'Fenestraĵoj de lastatempaj blogaĵoj'
|
||||
PLURALS:
|
||||
one: 'Unu fenestraĵo de lastatempaj blogaĵoj'
|
||||
other: '{count} fenestraĵoj de lastatempaj blogaĵoj'
|
||||
PLURALNAME: 'Fenestraĵoj de lastaj blogaĵoj'
|
||||
SINGULARNAME: 'Fenestraĵo de lastaj blogaĵoj'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Blogo
|
||||
PLURALNAME: 'Nubaj fenestraĵoj por blogaj etikedoj'
|
||||
PLURALS:
|
||||
one: 'Unu nuba fenestraĵo por blogaj etikedoj'
|
||||
other: '{count} nubaj fenestraĵoj por blogaj etikedoj'
|
||||
SINGULARNAME: 'Nuba fenestraĵo por blogaj etikedoj'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
BlogTag:
|
||||
PLURALNAME: 'Etikedoj'
|
||||
SINGULARNAME: 'Etikedo'
|
||||
Title: Titolo
|
||||
BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Direction: Direkto
|
||||
Direction_Description: 'Ŝanĝi la direkton de ordigo de etikedoj vidigotaj de tiu fenestraĵo.'
|
||||
Limit: Limigi
|
||||
Limit_Description: 'Limigu la nombron da etikedoj vidigotaj de tiu fenestraĵo (agordu al 0 por vidigi ĉiujn etikedojn).'
|
||||
PLURALNAME: 'Fenestraĵoj por blogaj etikedoj'
|
||||
PLURALS:
|
||||
one: 'Unu fenestraĵo por blogaj etikedoj'
|
||||
other: '{count} fenestraĵoj por blogaj etikedoj'
|
||||
SINGULARNAME: 'Fenestraĵo por blogaj etikedoj'
|
||||
Sort: Ordigi
|
||||
Sort_Description: 'Ŝanĝi la ordon de etikedoj vidigotaj de tiu fenestraĵo.'
|
||||
GridFieldAddByDBField:
|
||||
Add: 'Aldoni {name}'
|
||||
AddFail: '{klaso} ne estas konservebla al la datumbazo.'
|
||||
PermissionFail: 'Vi ne havas permeson krei je {klaso}.'
|
||||
GridFieldBlogPostState:
|
||||
Draft: '<i class="btn-icon gridfield-icon btn-icon-pencil"></i> Konservita kiel malneto je {dato}'
|
||||
Published: '<i class="btn-icon gridfield-icon btn-icon-accept"></i> Publikigita je {dato}'
|
||||
Timer: '<i class="gridfield-icon blog-icon-timer"></i> Publikigi je {dato}'
|
||||
|
130
lang/es.yml
@ -1,130 +0,0 @@
|
||||
es:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Artículos
|
||||
Title: Título
|
||||
SilverStripe\Blog\Admin\GridFieldMergeAction:
|
||||
MovePostsTo: 'Mover artículos a'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Agregar {name}'
|
||||
AddFail: 'No se pudo guardar {class} en la base de datos.'
|
||||
PermissionFail: 'No tienes los permisos para crear {class}.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Guardado como Borrador el {date}'
|
||||
Modified: Modificado
|
||||
Published: 'Publicado el {date}'
|
||||
Timer: 'Se publicará el {date}'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Título
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: 'y'
|
||||
Archive: Archivo
|
||||
By: Por
|
||||
CONTRIBUTOR: Contribuidor
|
||||
Categories: Categorías
|
||||
Categorisation: Categorización
|
||||
Category: Categoría
|
||||
Comments: Comentarios
|
||||
DESCRIPTION: 'Agrega un blog al sitio web.'
|
||||
EDITOR: Editor
|
||||
FILTERDESCRIPTION_AUTHOR: 'Por {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'En la categoría {category}'
|
||||
FILTERDESCRIPTION_DATE: 'En {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Página {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Etiquetado con {tag}'
|
||||
LessThanAMinuteToRead: 'Menos de un minuto para leer'
|
||||
LumberjackTitle: 'Artículos del blog'
|
||||
MinutesToRead: 'Minuto(s) para leer'
|
||||
NoPosts: 'No hay artículos'
|
||||
PERMISSIONS_CATEGORY: 'Permisos del blog'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Administrar usuarios para blogs individuales'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Permitir de asignación de Editores, Escritores o Contribuidores a los blogs'
|
||||
PLURALNAME: 'Páginas base'
|
||||
PLURALS:
|
||||
one: 'Un blog'
|
||||
other: '{count} Blogs'
|
||||
Posted: Publicado
|
||||
PostedIn: 'Publicado en'
|
||||
PostsPerPage: 'Artículos por página'
|
||||
ReadMoreAbout: 'Leer más sobre ''{title}''...'
|
||||
SINGULARNAME: Blog
|
||||
Tag: Etiqueta
|
||||
Tagged: Etiquetado
|
||||
Tags: Etiquetas
|
||||
WRITER: Escritor
|
||||
has_many_Categories: Categorías
|
||||
has_many_Tags: Etiquetas
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
Duplicate: 'Ya existe una categoría con el mismo nombre.'
|
||||
PLURALNAME: 'Categorías del Blog'
|
||||
PLURALS:
|
||||
many: '{count} Categorías de blog'
|
||||
one: 'Una categoría de blog'
|
||||
other: '{count} Categorías de blog'
|
||||
SINGULARNAME: 'Categoría del blog'
|
||||
db_Title: Título
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Artículos del blog'
|
||||
TABBLOGPOSTS: 'Artículos del blog'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Título
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Autor
|
||||
AdditionalCredits: 'Créditos adicionales'
|
||||
AdditionalCredits_Description: 'Si algunos autores de este artículo no tienen acceso al CMS, agregue aquí su(s) nombres. Puedes agregar varios nombres utilizando una coma.'
|
||||
Authors: Autores
|
||||
CUSTOMSUMMARY: 'Agregar un resumen personalizado'
|
||||
Categories: Categorías
|
||||
FeaturedImage: 'Imagen Destacada'
|
||||
PLURALNAME: 'Páginas base'
|
||||
PLURALS:
|
||||
one: 'Un artículo del blog'
|
||||
other: '{count} Artículos del blog'
|
||||
PageTitleLabel: 'Título del artículo'
|
||||
PostOptions: 'Opciones del artículo'
|
||||
PublishDate: 'Fecha de publicación'
|
||||
PublishDate_Description: 'Se usara la fecha "actual" si se publica sin un valor.'
|
||||
SINGULARNAME: 'Artículo del blog'
|
||||
SUMMARY_DESCRIPTION: 'Si no se especifica un resumen se usarán las primeras 30 palabras.'
|
||||
Tags: Etiquetas
|
||||
many_many_Authors: Autores
|
||||
many_many_Categories: Categorías
|
||||
many_many_Tags: Etiquetas
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
Duplicate: 'Ya existe una etiqueta con este nombre.'
|
||||
PLURALNAME: 'Etiquetas del Blog'
|
||||
PLURALS:
|
||||
many: '{count} Etiquetas de blog'
|
||||
one: 'Una etiqueta de blog'
|
||||
other: '{count} Etiquetas de blog'
|
||||
SINGULARNAME: 'Etiqueta del Blog'
|
||||
db_Title: Título
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: 'Tipo de archivo'
|
||||
Blog: Blog
|
||||
NumberToDisplay: 'No. a mostrar'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
Direction: Dirección
|
||||
Direction_Description: 'Cambia la dirección de ordenamiento de las categorías mostradas por este widget.'
|
||||
Limit: Limite
|
||||
Limit_Description: 'Limita el número de categorías mostradas por este widget (use 0 para mostrar todas las categorías) '
|
||||
Sort: Ordenar
|
||||
Sort_Description: 'Cambia el orden de las categorías mostradas por este widget.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Numero de artículos'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Numero de artículos'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Direction: Dirección
|
||||
Direction_Description: 'Cambia la dirección del orden de las etiquetas mostradas por este widget.'
|
||||
Limit: Limit
|
||||
Limit_Description: 'Limita el número de etiquetas mostradas por este widget (use 0 para mostrar todas las etiquetas).'
|
||||
Sort: Ordenar
|
||||
Sort_Description: 'Cambiar el orden de las etiquetas mostradas por este widget'
|
114
lang/fa_IR.yml
@ -1,114 +0,0 @@
|
||||
fa_IR:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: عنوان
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'افزودن {name}'
|
||||
AddFail: 'ناتوان از ذخیرهسازی {class} در بانک داده'
|
||||
PermissionFail: 'شما دسترسی لازم جهت ایجاد یک {class} را ندارید.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: 'تغییر یافته'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: عنوان
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: و
|
||||
Archive: بایگانی
|
||||
By: توسط
|
||||
CONTRIBUTOR: مشارکتکننده
|
||||
Categories: مجموعهها
|
||||
Category: مجموعه
|
||||
Comments: دیدگاهها
|
||||
DESCRIPTION: 'یک وبلاگ به سایت شما میافزاید.'
|
||||
EDITOR: ویرایشگر
|
||||
FILTERDESCRIPTION_AUTHOR: 'توسط {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'در مجموعهی {category}'
|
||||
FILTERDESCRIPTION_DATE: 'در {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'صفحهی {page}'
|
||||
FILTERDESCRIPTION_TAG: 'تگشده با {tag}'
|
||||
LumberjackTitle: 'ارسالهای وبلاگ'
|
||||
NoPosts: 'هیچ ارسالی وجود ندارد'
|
||||
PERMISSIONS_CATEGORY: 'دسترسیهای وبلاگ'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'مدیریت کاربران برای بلاگهای انفرادی'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'تعیین اجازهی دسترسی ویرایشگران، نویسندگان یا مشارکتکنندگان به وبلاگ'
|
||||
PLURALNAME: 'صفحه اصلی'
|
||||
Posted: 'ارسال شده'
|
||||
PostedIn: 'ارسال شده در'
|
||||
PostsPerPage: 'تعداد ارسال در صفحه'
|
||||
ReadMoreAbout: 'درباره ''{title}'' بیشتر بخوانید...'
|
||||
SINGULARNAME: وبلاگ
|
||||
Tag: تگ
|
||||
Tagged: تگشده
|
||||
Tags: تگها
|
||||
WRITER: نویسنده
|
||||
has_many_Categories: مجموعهها
|
||||
has_many_Tags: تگها
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
PLURALNAME: 'مجموعههای وبلاگ'
|
||||
SINGULARNAME: 'مجموعه وبلاگ'
|
||||
db_Title: عنوان
|
||||
has_one_Blog: وبلاگ
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'صفحات پایهای'
|
||||
TABBLOGPOSTS: 'صفحات پایهای'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: عنوان
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: نگارنده
|
||||
AdditionalCredits: 'دیگر مشارکتکنندگان'
|
||||
AdditionalCredits_Description: 'اگر برخی از نگارندگان این ارسال دسترسی به سیاماس ندارند، نام آنها را اینجا وارد نمایید. میتوانید نامها را با علامت ویرگول از هم جدا کنید.'
|
||||
Authors: نگارندگان
|
||||
CUSTOMSUMMARY: 'افزودن یک خلاصه دلخواه'
|
||||
Categories: مجموعهها
|
||||
FeaturedImage: 'تصویر برجسته'
|
||||
PLURALNAME: 'صفحه اصلی'
|
||||
PageTitleLabel: 'عنوان ارسال'
|
||||
PublishDate: 'تاریخ انتشار'
|
||||
PublishDate_Description: 'اگر بدون دادهای منتشر شود به "اکنون" تنظیم خواهد شد.'
|
||||
SINGULARNAME: 'ارسال وبلاگ'
|
||||
SUMMARY_DESCRIPTION: 'اگر هیچ خلاصهای معرفی نشود ۳۰ کلمهی آغازین استفاده خواهد شد.'
|
||||
Tags: تگها
|
||||
many_many_Authors: نگارندگان
|
||||
many_many_Categories: مجموعهها
|
||||
many_many_Tags: تگها
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
PLURALNAME: 'تگهای وبلاگ'
|
||||
SINGULARNAME: 'تگ وبلاگ'
|
||||
db_Title: عنوان
|
||||
has_one_Blog: وبلاگ
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: 'نوع بایگانی'
|
||||
Blog: وبلاگ
|
||||
NumberToDisplay: 'شمار در نمایش'
|
||||
PLURALNAME: 'ویجتهای بایگانی بلاگ'
|
||||
SINGULARNAME: 'ویجت بایگانی بلاگ'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: وبلاگ
|
||||
Direction: جهت
|
||||
Direction_Description: 'تغییر جهت ترتیب مجموعههای نمایش دادهشده توسط این ویجت'
|
||||
Limit: 'محدود کردن'
|
||||
Limit_Description: 'محدود کردن تعداد مجموعههای نمایش داده شده توسط این ویجت (روی 0 بگذارید تا همه به نمایش دربیایند)'
|
||||
PLURALNAME: 'ویجتهای مجموعههای بلاگ'
|
||||
SINGULARNAME: 'ویجت مجموعههای بلاگ'
|
||||
Sort: مرتبسازی
|
||||
Sort_Description: 'تغییر ترتیب مجموعههای نمایش دادهشده توسط این ویجت'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: وبلاگ
|
||||
NumberOfPosts: 'شمار ارسالها'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
Blog: وبلاگ
|
||||
NumberOfPosts: 'شمار ارسالها'
|
||||
PLURALNAME: 'ویجتهای جدیدترین ارسالهای بلاگ'
|
||||
SINGULARNAME: 'ویجت جدیدترین ارسالهای بلاگ'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: وبلاگ
|
||||
PLURALNAME: 'ویجت ابر تگهای وبلاگ'
|
||||
SINGULARNAME: 'ویجتهای ابر تگهای وبلاگ'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: وبلاگ
|
||||
Direction: جهت
|
||||
Direction_Description: 'تغییر جهت ترتیب تگهای نمایش دادهشده توسط این ویجت'
|
||||
Limit: 'محدود کردن'
|
||||
Limit_Description: 'محدود کردن تعداد تگهای نمایش داده شده توسط این ویجت (روی 0 بگذارید تا همه به نمایش دربیایند)'
|
||||
PLURALNAME: 'ویجتهای تگهای وبلاگ'
|
||||
SINGULARNAME: 'ویجت تگهای وبلاگ'
|
||||
Sort: مرتبسازی
|
||||
Sort_Description: 'تغییر ترتیب تگهای نمایش دادهشده توسط این ویجت'
|
195
lang/fi.yml
@ -1,164 +1,79 @@
|
||||
fi:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Artikkelit
|
||||
Title: Otsikko
|
||||
SilverStripe\Blog\Admin\GridFieldMergeAction:
|
||||
MovePostsTo: 'Siirrä artikkeli kohteeseen'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Lisää {name}'
|
||||
AddFail: '{class} ei voida tallentaa tietokantaan.'
|
||||
PermissionFail: 'Sinulla ei ole oikeuksia luoda {class}.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Versio tallennettu {date}'
|
||||
Modified: Muokattu
|
||||
Published: 'Julkaistu {date}'
|
||||
Timer: 'Julkaistaan {date}'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Otsikko
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: ja
|
||||
Blog:
|
||||
Archive: Arkisto
|
||||
By: kirjoittanut
|
||||
CONTRIBUTOR: Avustaja
|
||||
Categories: Kategoriat
|
||||
Categorisation: Kategoriointi
|
||||
Category: Kategoria
|
||||
Comments: Kommentit
|
||||
DESCRIPTION: 'Lisää blogin nettisivuillesi.'
|
||||
EDITOR: Toimittaja
|
||||
FILTERDESCRIPTION_AUTHOR: 'Kirjoittanut {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'Kategoriassa: {category}'
|
||||
FILTERDESCRIPTION_DATE: 'Pvm: {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Sivu {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Avainsanat: {tag}'
|
||||
LessThanAMinuteToRead: 'Lukemiseen kuluu alle minuutti'
|
||||
LumberjackTitle: Blogikirjoitukset
|
||||
MinutesToRead: 'Minuutti(a) lukemiseen'
|
||||
LumberjackTitle: 'Blogikirjoitukset'
|
||||
NoPosts: 'Ei kirjoituksia'
|
||||
PERMISSIONS_CATEGORY: 'Blogin oikeudet'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Hallinnoi käyttäjiä yksittäisissä blogeissa'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Salli toimittajien, kirjoittajien tai avustajien kiinnittäminen blogeihin'
|
||||
PLURALNAME: Pohjasivut
|
||||
PLURALS:
|
||||
one: Blogi
|
||||
other: '{count} blogia'
|
||||
PLURALNAME: Blogit
|
||||
Posted: Kirjoitettu
|
||||
PostedIn: 'Kirjoitettu:'
|
||||
PostsByUser: 'Postaukset kirjoittajalta {firstname} {surname} otsikolla {title}'
|
||||
PostsPerPage: 'Kirjoitusta per sivu'
|
||||
ReadMoreAbout: 'Lue lisää kirjoituksesta ''{title}''...'
|
||||
SINGULARNAME: Blogi
|
||||
Tag: Avainsana
|
||||
Tagged: Merkitty
|
||||
Tags: Avainsanat
|
||||
By: kirjoittanut
|
||||
CONTRIBUTOR: Avustaja
|
||||
EDITOR: Toimittaja
|
||||
FILTERDESCRIPTION_AUTHOR: 'Kirjoittanut {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'Kategoriassa: {category}'
|
||||
FILTERDESCRIPTION_DATE: 'Pvm: {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Sivu {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Avainsanat: {tag}'
|
||||
PERMISSIONS_CATEGORY: 'Blogin oikeudet'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Hallinnoi käyttäjiä yksittäisissä blogeissa'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Salli toimittajien, kirjoittajien tai avustajien kiinnittäminen blogeihin'
|
||||
WRITER: Kirjoittaja
|
||||
has_many_Categories: Kategoriat
|
||||
has_many_Tags: Avainsanat
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
Duplicate: 'Tämä blogikategoria on jo olemassa'
|
||||
PLURALNAME: Blogikategoriat
|
||||
PLURALS:
|
||||
one: 'Blogin kategoria'
|
||||
other: '{count} blogin kategoriaa'
|
||||
SINGULARNAME: Blogikategoria
|
||||
db_Title: Otsikko
|
||||
db_URLSegment: 'URL-osoitteen osio'
|
||||
has_one_Blog: Blogi
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: Artikkelit
|
||||
TABBLOGPOSTS: Artikkelit
|
||||
db_URLSegment: 'URL-osoitteen osio'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
BlogArchiveWidget:
|
||||
Blog: Blogi
|
||||
NumberToDisplay: 'Näytetään'
|
||||
PLURALNAME: 'Blogiarkisto-vimpaimet'
|
||||
SINGULARNAME: 'Blogiarkisto-vimpain'
|
||||
ArchiveType: Tyyppi
|
||||
BlogCategoriesWidget:
|
||||
Blog: Blogi
|
||||
PLURALNAME: 'Blogikategoriat-vimpaimet'
|
||||
SINGULARNAME: 'Blogikategoriat-vimpain'
|
||||
BlogCategory:
|
||||
PLURALNAME: 'Kategoriat'
|
||||
SINGULARNAME: 'Kategoria'
|
||||
Title: Otsikko
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
BlogPost:
|
||||
Categories: Kategoriat
|
||||
DESCRIPTION: 'Yleinen sisältösivu'
|
||||
FeaturedImage: 'Pääkuvitus'
|
||||
PLURALNAME: 'Blogikirjoitukset'
|
||||
PageTitleLabel: 'Otsikko'
|
||||
PublishDate: 'Julkaisupäivä'
|
||||
SINGULARNAME: 'Blogikirjoitus'
|
||||
Tags: Avainsanat
|
||||
AUTHOR: Kirjoittaja
|
||||
AdditionalCredits: Lisäkiitokset
|
||||
AdditionalCredits_Description: 'Mikäli kaikilla artikkelin kirjoittajilla ei ole pääsyä sisällönhallintajärjestelmään, syötä heidän nimensä (nimi) tähän. Erota useampi pilkulla.'
|
||||
AdditionalCredits: 'Lisäkiitokset'
|
||||
Authors: Kirjoittajat
|
||||
CUSTOMSUMMARY: 'Lisää tiivistelmä'
|
||||
Categories: Kategoriat
|
||||
FeaturedImage: Kuvanosto
|
||||
PLURALNAME: Pohjasivut
|
||||
PLURALS:
|
||||
one: Blogipostaus
|
||||
other: '{count} Blogipostausta'
|
||||
PageTitleLabel: Otsikko
|
||||
PostOptions: 'Artikkelin asetukset'
|
||||
PublishDate: Julkaisupäivä
|
||||
PublishDate_Description: 'Asetetaan "nyt", mikäli arvo jätetään asettamatta.'
|
||||
SINGULARNAME: Blogikirjoitus
|
||||
SUMMARY_DESCRIPTION: 'Mikäli tiivistelmää ei ole kirjoitettu, käytetään 30 ensimmäistä sanaa kirjoituksesta.'
|
||||
Tags: Avainsanat
|
||||
many_many_Authors: Kirjoittajat
|
||||
many_many_Categories: Kategoriat
|
||||
many_many_Tags: Avainsanat
|
||||
SilverStripe\Blog\Model\BlogPostFeaturedExtension:
|
||||
FEATURED: 'Sisällytä postaus pääjutuksi'
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
Duplicate: 'Tämä blogin avainsana on jo olemassa'
|
||||
PLURALNAME: 'Blogin avainsanat'
|
||||
PLURALS:
|
||||
one: 'Blogin avainsana'
|
||||
other: '{count} blogin avainsanaa'
|
||||
SINGULARNAME: 'Blogin avainsana'
|
||||
db_Title: Otsikko
|
||||
db_URLSegment: 'URL-osoitteen osio'
|
||||
has_one_Blog: Blogi
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: Arkistotyyppi
|
||||
Blog: Blogi
|
||||
NumberToDisplay: Näytetään
|
||||
PLURALNAME: Blogiarkisto-vimpaimet
|
||||
PLURALS:
|
||||
one: Blogiarkisto-vimpain
|
||||
other: '{count} Blogiarkisto-vimpaimet'
|
||||
SINGULARNAME: Blogiarkisto-vimpain
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Blogi
|
||||
Direction: Suunta
|
||||
Direction_Description: 'Vaihda vimpaimen näytettävien kategorioiden järjestyksen suunta.'
|
||||
Limit: Rajoita
|
||||
Limit_Description: 'Rajoita näytettävien kategorioiden määrää tässä vimpaimessa (aseta arvoksi 0, jos haluat näyttää kaikki kategoriat).'
|
||||
PLURALNAME: Blogikategoria-vimpaimet
|
||||
PLURALS:
|
||||
one: 'Blogin kategoria-vimpain'
|
||||
other: '{count} blogikategoria-vimpainta'
|
||||
SINGULARNAME: Blogikategoriat-vimpain
|
||||
Sort: Järjestä
|
||||
Sort_Description: 'Vaihda vimpaimen näytettävien kategorioiden järjestys.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blogi
|
||||
NumberOfPosts: 'Postausten määrä'
|
||||
PLURALNAME: 'Blogin pääjutut-vimpaimet'
|
||||
PLURALS:
|
||||
one: 'Blogin pääjutut-vimpain'
|
||||
other: '{count} blogin pääjutut vimpainta'
|
||||
SINGULARNAME: 'Blogin pääjutut-vimpain'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
BlogRecentPostsWidget:
|
||||
Blog: Blogi
|
||||
NumberOfPosts: 'Kirjoituksien määrä'
|
||||
PLURALNAME: 'Äskettäiset julkaisut vimpain'
|
||||
PLURALS:
|
||||
one: 'Blogin äskettäiset julkaisut -vimpain'
|
||||
other: '{count} blogin äskettäiset julkaisut -vimpainta'
|
||||
SINGULARNAME: 'Äskettäin julkaistut artikkelit -vimpain'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
PLURALNAME: 'Viimeisimmät blogikirjoitukset -vimpaimet'
|
||||
SINGULARNAME: 'Viimeisimmät blogikirjoitukset -vimpain'
|
||||
BlogTag:
|
||||
PLURALNAME: 'Avainsanat'
|
||||
SINGULARNAME: 'Avainsana'
|
||||
Title: Otsikko
|
||||
BlogTagsWidget:
|
||||
Blog: Blogi
|
||||
PLURALNAME: Avainsanapilvi-vimpaimet
|
||||
PLURALS:
|
||||
one: Avainsanapilvi-vimpain
|
||||
other: '{count} avainsanapilvi-vimpainta'
|
||||
SINGULARNAME: 'Blogin avainanapilvivimpain'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blogi
|
||||
Direction: Suunta
|
||||
Direction_Description: 'Vaihda vimpaimen näytettävien avainsanojen järjestyksen suunta'
|
||||
Limit: Rajoita
|
||||
Limit_Description: 'Rajoita vimpaimella näytettävien avainsanojen määrää (aseta arvoksi 0, jos haluat näyttää kaikki avainsanat).'
|
||||
PLURALNAME: 'Blogin avainsanavimpain'
|
||||
PLURALS:
|
||||
one: 'Blogin avainsanavimpain'
|
||||
other: '{count} blogin avainsanavimpainta'
|
||||
SINGULARNAME: 'Blogin avainsanavimpain'
|
||||
Sort: Järjestä
|
||||
Sort_Description: 'Vaihda vimpaimella näytettävien avainsanojen järjestystä.'
|
||||
PLURALNAME: 'Avainsanat-vimpaimet'
|
||||
SINGULARNAME: 'Avainsanat-vimpain'
|
||||
GridFieldAddByDBField:
|
||||
Add: 'Lisää {name}'
|
||||
AddFail: '{class} ei voida tallentaa tietokantaan.'
|
||||
PermissionFail: 'Sinulla ei ole oikeuksia luoda {class}.'
|
||||
GridFieldBlogPostState:
|
||||
Draft: '<i class="btn-icon blog-icon btn-icon-pencil"></i> Versio tallennettu {date}'
|
||||
Published: '<i class="btn-icon blog-icon btn-icon-accept"></i> Julkaistu {date}'
|
||||
Timer: '<i class="blog-icon blog-icon-timer"></i> Julkaistaan {date}'
|
||||
|
@ -1,33 +0,0 @@
|
||||
fi_FI:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Postaukset
|
||||
Title: Otsikko
|
||||
SilverStripe\Blog\Admin\GridFieldMergeAction:
|
||||
MovePostsTo: 'Siirrä postaus kohteeseen'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Lisää {name}'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Muokattu
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Otsikko
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: ja
|
||||
Archive: Arkistoi
|
||||
Comments: Kommentit
|
||||
FILTERDESCRIPTION_PAGE: 'Sivu {page}'
|
||||
LumberjackTitle: Pohjasivut
|
||||
PLURALNAME: Pohjasivut
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
Title: Otsikko
|
||||
db_Title: Otsikko
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: Pohjasivut
|
||||
TABBLOGPOSTS: Pohjasivut
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Otsikko
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Kirjoittaja
|
||||
PLURALNAME: Pohjasivut
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
Title: Otsikko
|
||||
db_Title: Otsikko
|
117
lang/fr.yml
@ -1,117 +0,0 @@
|
||||
fr:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Messages
|
||||
Title: Titre
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Ajouter {name}'
|
||||
AddFail: 'Impossible de sauvegarder {class} dans la base de données.'
|
||||
PermissionFail: 'Vous n''avez pas la permission de créer {class}.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Enregistré comme brouillon à {date}'
|
||||
Modified: Modifié
|
||||
Published: 'Publié le {date}'
|
||||
Timer: 'Publier le {date}'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Titre
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: et
|
||||
Archive: Archive
|
||||
By: par
|
||||
CONTRIBUTOR: Contributeur
|
||||
Categories: Catégories
|
||||
Category: Catégorie
|
||||
Comments: Commentaires
|
||||
DESCRIPTION: 'Ajouter un blog à votre site web.'
|
||||
EDITOR: Editeur
|
||||
FILTERDESCRIPTION_AUTHOR: 'Par {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'Dans la catégorie {category}'
|
||||
FILTERDESCRIPTION_DATE: 'A {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Page {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Taggé avec {tag}'
|
||||
LumberjackTitle: 'Billets du blog'
|
||||
NoPosts: 'Il n''y a pas de billets'
|
||||
PERMISSIONS_CATEGORY: 'Permissions du blog'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Gérer les utilisateurs pour un blog'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Autoriser l''assignation d''éditeurs, auteurs ou contributeurs au blog'
|
||||
PLURALNAME: 'Base Pages'
|
||||
Posted: Publié
|
||||
PostedIn: 'Publié dans'
|
||||
PostsPerPage: 'Billets par page'
|
||||
ReadMoreAbout: 'Lire plus à propos de ''{title}''...'
|
||||
SINGULARNAME: Blog
|
||||
Tag: Tag
|
||||
Tagged: Taggé
|
||||
Tags: Tags
|
||||
WRITER: Auteur
|
||||
has_many_Categories: Catégories
|
||||
has_many_Tags: Tags
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
PLURALNAME: 'Catégories du blog'
|
||||
SINGULARNAME: 'Catégorie du blog'
|
||||
db_Title: Titre
|
||||
db_URLSegment: 'Segment d''URL'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: Billets
|
||||
TABBLOGPOSTS: Billets
|
||||
db_URLSegment: 'Segment d''URL'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Titre
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Auteur
|
||||
AdditionalCredits: 'Mentions additionnelles'
|
||||
Authors: Auteurs
|
||||
CUSTOMSUMMARY: 'Ajouter un sommaire personnalisé'
|
||||
Categories: Catégories
|
||||
PLURALNAME: 'Base Pages'
|
||||
PageTitleLabel: 'Titre du billet'
|
||||
PublishDate: 'Date de publication'
|
||||
PublishDate_Description: 'Sera mis à "maintenant" si publié sans valeur.'
|
||||
SINGULARNAME: Billet
|
||||
SUMMARY_DESCRIPTION: 'Si aucun sommaire, les 30 premiers mots seront utilisés.'
|
||||
Tags: Tags
|
||||
many_many_Authors: Auteurs
|
||||
many_many_Categories: Catégories
|
||||
many_many_Tags: Tags
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
PLURALNAME: 'Tags du blog'
|
||||
SINGULARNAME: 'Tag du blog'
|
||||
db_Title: Titre
|
||||
db_URLSegment: 'Segment d''URL'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: ArchiveType
|
||||
Blog: Blog
|
||||
NumberToDisplay: 'Num. à afficher'
|
||||
PLURALNAME: 'Widgets archive du blog'
|
||||
SINGULARNAME: 'Widget archive du blog'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
Direction: Direction
|
||||
Direction_Description: 'Changer la direction du tri de ce widget.'
|
||||
Limit: Limite
|
||||
Limit_Description: 'Limiter le nombre (mettre 0 pour tout montrer).'
|
||||
PLURALNAME: 'Widgets catégories du blog'
|
||||
SINGULARNAME: 'Widget catégories du blog'
|
||||
Sort: Tri
|
||||
Sort_Description: 'Changer l''ordre de tri pour ce widget.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Nombre de billets'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Nombre de billets'
|
||||
PLURALNAME: 'Widgets billets récents'
|
||||
SINGULARNAME: 'Widget billet récent'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Direction: Direction
|
||||
Direction_Description: 'Changer la direction du tri de ce widget.'
|
||||
Limit: Limite
|
||||
Limit_Description: 'Limiter le nombre (mettre 0 pour tout montrer).'
|
||||
PLURALNAME: 'Widgets tags du blog'
|
||||
SINGULARNAME: 'Widget tag du blog'
|
||||
Sort: Tri
|
||||
Sort_Description: 'Changer l''ordre de tri pour ce widget.'
|
82
lang/hr.yml
@ -1,82 +0,0 @@
|
||||
hr:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: Naslov
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Dodaj {name}'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Izmjenjeno
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Naslov
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: i
|
||||
Archive: Arhiva
|
||||
By: od
|
||||
CONTRIBUTOR: Suradnik
|
||||
Categories: Kategorije
|
||||
Category: Kategorija
|
||||
Comments: Komentari
|
||||
DESCRIPTION: 'Dodaje blog na Vašu web stranicu.'
|
||||
EDITOR: Urednik
|
||||
FILTERDESCRIPTION_AUTHOR: 'od {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'U kategoriji {category}'
|
||||
FILTERDESCRIPTION_DATE: 'od {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Stranica {page} '
|
||||
FILTERDESCRIPTION_TAG: 'Tagiran s {tag}'
|
||||
LumberjackTitle: 'Blog zapisi'
|
||||
NoPosts: 'Nema zapisa'
|
||||
PERMISSIONS_CATEGORY: 'Blog dozvole'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Upravljaj korisnike za pojedinačne blogove'
|
||||
PLURALNAME: 'Osnovne stranice'
|
||||
Posted: Objavljeno
|
||||
PostedIn: 'Objavljeno u'
|
||||
PostsPerPage: 'Postova po stranici'
|
||||
ReadMoreAbout: 'Pročitaj više o ''{title}''...'
|
||||
SINGULARNAME: Blog
|
||||
Tag: Tag
|
||||
Tagged: Tagirano
|
||||
Tags: Tagovi
|
||||
WRITER: Pisac
|
||||
has_many_Categories: Kategorije
|
||||
has_many_Tags: Tagovi
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
db_Title: Naslov
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Bazna stranica'
|
||||
TABBLOGPOSTS: 'Bazna stranica'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Naslov
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Autor
|
||||
Authors: Autori
|
||||
Categories: Kategorije
|
||||
FeaturedImage: 'Izdvojena slika'
|
||||
PLURALNAME: 'Osnovne stranice'
|
||||
PageTitleLabel: 'Naslov posta'
|
||||
PublishDate: 'Datum objave'
|
||||
SINGULARNAME: 'Blog zapis'
|
||||
Tags: Tagovi
|
||||
many_many_Authors: Autori
|
||||
many_many_Categories: Kategorije
|
||||
many_many_Tags: Tagovi
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
db_Title: Naslov
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: 'Tip arhive'
|
||||
Blog: Blog
|
||||
NumberToDisplay: 'Broj za prikaz'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
Limit: Limit
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Broj zapisa'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Broj zapisa'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Limit: Limit
|
27
lang/id.yml
@ -1,27 +0,0 @@
|
||||
id:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: Judul
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Tambah {name}'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Diubah
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Judul
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
Archive: Arsip
|
||||
By: oleh
|
||||
Comments: Komentar
|
||||
PLURALNAME: 'Laman Dasar'
|
||||
Tags: Penanda
|
||||
has_many_Tags: Penanda
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
db_Title: Judul
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Judul
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Penulis
|
||||
PLURALNAME: 'Laman Dasar'
|
||||
Tags: Penanda
|
||||
many_many_Tags: Penanda
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
db_Title: Judul
|
138
lang/it.yml
@ -1,39 +1,13 @@
|
||||
it:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Messaggi
|
||||
Title: Titolo
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Aggiungi {name}'
|
||||
AddFail: 'Impossibile salvare {class} nel database.'
|
||||
PermissionFail: 'Non hai i permessi per creare un {class}.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Salvato come bozza il {date}'
|
||||
Modified: Modificato
|
||||
Published: 'Pubblicato il {date}'
|
||||
Timer: 'Pubblicare al {date}'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Titolo
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: e
|
||||
Blog:
|
||||
Archive: Archivia
|
||||
By: di
|
||||
CONTRIBUTOR: Collaboratore
|
||||
Categories: Categorie
|
||||
Category: Categoria
|
||||
Comments: Commenti
|
||||
DESCRIPTION: 'Aggiungi un blog al tuo sito.'
|
||||
EDITOR: Editore
|
||||
FILTERDESCRIPTION_AUTHOR: 'Di {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'Nella categoria {category}'
|
||||
FILTERDESCRIPTION_DATE: 'Il {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Pagina {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Etichettato con {tag}'
|
||||
LumberjackTitle: 'Articoli del Blog'
|
||||
NoPosts: 'Non ci sono articoli'
|
||||
PERMISSIONS_CATEGORY: 'Permessi del blog'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Gestire utenti per i singoli blog'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Consenti l''assegnazione di Editori, Scrittori o Collaboratori ai blog'
|
||||
PLURALNAME: 'Pagine Base'
|
||||
PLURALNAME: Blog
|
||||
Posted: Inserito
|
||||
PostedIn: 'Inserito il'
|
||||
PostsPerPage: 'Articoli Per Pagina'
|
||||
@ -42,80 +16,64 @@ it:
|
||||
Tag: Etichetta
|
||||
Tagged: Etichettato
|
||||
Tags: Etichette
|
||||
By: di
|
||||
CONTRIBUTOR: Collaboratore
|
||||
EDITOR: Editore
|
||||
FILTERDESCRIPTION_AUTHOR: 'Di {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'Nella categoria {category}'
|
||||
FILTERDESCRIPTION_DATE: 'Il {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Pagina {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Etichettato con {tag}'
|
||||
PERMISSIONS_CATEGORY: 'Permessi del blog'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Gestire utenti per i singoli blog'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Consenti l''assegnazione di Editori, Scrittori o Collaboratori ai blog'
|
||||
WRITER: Scrittore
|
||||
has_many_Categories: Categorie
|
||||
has_many_Tags: Etichette
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
PLURALNAME: 'Categorie Blog'
|
||||
SINGULARNAME: 'Categoria Blog'
|
||||
db_Title: Titolo
|
||||
db_URLSegment: 'Segmento URL'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Articoli del Blog'
|
||||
TABBLOGPOSTS: 'Articoli del Blog'
|
||||
db_URLSegment: 'Segmento URL'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Titolo
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Autore
|
||||
AdditionalCredits: 'Riconoscimenti Aggiuntivi'
|
||||
AdditionalCredits_Description: 'Se l''autore di questo articolo non ha accesso al CMS inserire qui il suo nome(i). Separare nomi multipli con la virgola.'
|
||||
Authors: Autori
|
||||
CUSTOMSUMMARY: 'Aggiungi una Sintesi Personalizzata'
|
||||
Categories: Categorie
|
||||
FeaturedImage: 'Immagine in Evidenza'
|
||||
PLURALNAME: 'Pagine Base'
|
||||
PageTitleLabel: 'Titolo Articolo'
|
||||
PublishDate: 'Data Pubblicazione'
|
||||
PublishDate_Description: 'Sarà impostato a "now" se pubblicato senza un valore.'
|
||||
SINGULARNAME: 'Articolo del Blog'
|
||||
SUMMARY_DESCRIPTION: 'Se non è specificata una sintesi saranno usate le prime 30 parole.'
|
||||
Tags: Etichette
|
||||
many_many_Authors: Autori
|
||||
many_many_Categories: Categorie
|
||||
many_many_Tags: Etichette
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
PLURALNAME: 'Etichette Blog'
|
||||
SINGULARNAME: 'Etichetta Blog'
|
||||
db_Title: Titolo
|
||||
db_URLSegment: 'Segmento URL'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: TipoArchiviazione
|
||||
BlogArchiveWidget:
|
||||
Blog: Blog
|
||||
NumberToDisplay: 'N. da Visualizzare'
|
||||
PLURALNAME: 'Widget Archiviazione Blog'
|
||||
SINGULARNAME: 'Widget Archiviazione Blog'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
ArchiveType: Tipo
|
||||
BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
Direction: Direzione
|
||||
Direction_Description: 'Modificare la direzione di ordinamento delle categorie mostrate da questo widget.'
|
||||
Limit: Limite
|
||||
Limit_Description: 'Limitare il numero di categorie mostrate da questo widget (impostare a 0 per mostrare tutte le categorie).'
|
||||
PLURALNAME: 'Widget Categorie Blog'
|
||||
SINGULARNAME: 'Widget Categorie Blog'
|
||||
Sort: Ordine
|
||||
Sort_Description: 'Modificare l''ordine delle categorie mostrate da questo widget.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Numero di Articoli'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
BlogCategory:
|
||||
PLURALNAME: 'Categorie'
|
||||
SINGULARNAME: 'Categoria'
|
||||
Title: Titolo
|
||||
BlogPost:
|
||||
Categories: Categorie
|
||||
DESCRIPTION: 'Pagina di contenuto generico'
|
||||
FeaturedImage: 'Immagine in primo piano'
|
||||
PLURALNAME: 'Articoli del Blog'
|
||||
PageTitleLabel: 'Titolo Articolo'
|
||||
PublishDate: 'Data Pubblicazione'
|
||||
SINGULARNAME: 'Articolo del Blog'
|
||||
Tags: Etichette
|
||||
AUTHOR: Autore
|
||||
AdditionalCredits: 'Riconoscimenti Aggiuntivi'
|
||||
Authors: Autori
|
||||
CUSTOMSUMMARY: 'Aggiungi una Sintesi Personalizzata'
|
||||
SUMMARY_DESCRIPTION: 'Se non è specificata una sintesi saranno usate le prime 30 parole.'
|
||||
BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Numero di Articoli'
|
||||
PLURALNAME: 'Widget Articoli Blog Recenti'
|
||||
SINGULARNAME: 'Widget Articoli Blog Recenti'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
BlogTag:
|
||||
PLURALNAME: 'Etichette'
|
||||
SINGULARNAME: 'Etichetta'
|
||||
Title: Titolo
|
||||
BlogTagsWidget:
|
||||
Blog: Blog
|
||||
PLURALNAME: 'Widget Tag Cloud del Blog'
|
||||
SINGULARNAME: 'Widget Tag Cloud del Blog'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Direction: Direzione
|
||||
Direction_Description: 'Modificare la direzione di ordinamento delle etichette mostrate da questo widget.'
|
||||
Limit: Limite
|
||||
Limit_Description: 'Limitare il numero di etichette mostrate da questo widget (impostare a 0 per mostrare tutte le etichette).'
|
||||
PLURALNAME: 'Widget Etichette Blog'
|
||||
SINGULARNAME: 'Widget Etichette Blog'
|
||||
Sort: Ordine
|
||||
Sort_Description: 'Modificare l''ordine delle etichette mostrate da questo widget.'
|
||||
GridFieldAddByDBField:
|
||||
Add: 'Aggiungi {name}'
|
||||
AddFail: 'Impossibile salvare {class} nel database.'
|
||||
PermissionFail: 'Non hai i permessi per creare un {class}.'
|
||||
GridFieldBlogPostState:
|
||||
Draft: '<i class="btn-icon gridfield-icon btn-icon-pencil"></i> Salvato come bozza il {date}'
|
||||
Published: '<i class="btn-icon gridfield-icon btn-icon-accept"></i> Pubblicato il {date}'
|
||||
Timer: '<i class="gridfield-icon blog-icon-timer"></i> Pubblicare al {date}'
|
||||
|
@ -1,27 +0,0 @@
|
||||
it_IT:
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Salva come Bozza in {date}'
|
||||
Published: 'Pubblicato in {date}'
|
||||
Timer: 'Pubblica il {date}'
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
Categories: Categorie
|
||||
Category: Categoria
|
||||
Comments: Commenti
|
||||
DESCRIPTION: 'Aggiunti un blog al tuo website'
|
||||
EDITOR: Editor
|
||||
FILTERDESCRIPTION_AUTHOR: 'Di {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'In categoria {category}'
|
||||
FILTERDESCRIPTION_DATE: 'Il {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Pagina {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Taggato con {tag}'
|
||||
LumberjackTitle: 'Blog Posts'
|
||||
NoPosts: 'Non ci sono post'
|
||||
PERMISSIONS_CATEGORY: 'Permessi Blog'
|
||||
Tagged: Taggato
|
||||
has_many_Categories: Categorie
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Blog Posts'
|
||||
TABBLOGPOSTS: 'Blog Posts'
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
Categories: Categorie
|
||||
many_many_Categories: Categorie
|
32
lang/lt.yml
@ -1,32 +0,0 @@
|
||||
lt:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: Pavadinimas
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Pakeistas
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Pavadinimas
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: ir
|
||||
Archive: Archyvuoti
|
||||
Comments: Komentarai
|
||||
LumberjackTitle: 'Baziniai puslapiai'
|
||||
PLURALNAME: 'Baziniai puslapiai'
|
||||
Tags: Žymos
|
||||
has_many_Tags: Žymos
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
Title: Pavadinimas
|
||||
db_Title: Pavadinimas
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Baziniai puslapiai'
|
||||
TABBLOGPOSTS: 'Baziniai puslapiai'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Pavadinimas
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Autorius
|
||||
DESCRIPTION: 'Standartinio turinio puslapis'
|
||||
PLURALNAME: 'Baziniai puslapiai'
|
||||
Tags: Žymos
|
||||
many_many_Tags: Žymos
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
Title: Pavadinimas
|
||||
db_Title: Pavadinimas
|
26
lang/nb.yml
@ -1,26 +0,0 @@
|
||||
nb:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Meldinger
|
||||
Title: Tittel
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Legg til {name}'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Endret
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Tittel
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
Archive: Arkiver
|
||||
By: av
|
||||
Comments: Kommentarer
|
||||
Tags: Tags
|
||||
has_many_Tags: Tags
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
db_Title: Tittel
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Tittel
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Forfatter
|
||||
Tags: Tags
|
||||
many_many_Tags: Tags
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
db_Title: Tittel
|
168
lang/nl.yml
@ -1,168 +0,0 @@
|
||||
nl:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Artikels
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Admin\GridFieldMergeAction:
|
||||
MovePostsTo: 'Artikels verplaatsen naar'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Voeg {name} toe'
|
||||
AddFail: 'Kon geen {class} opslaan in de database.'
|
||||
ButtonName: '{name}'
|
||||
PermissionFail: 'Je hebt geen permissie om een {class} aan te maken.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Opgeslagen als concept op {date}'
|
||||
Modified: Aangepast
|
||||
Published: 'Gepubliceerd op {date}'
|
||||
Timer: 'Publiceer op {date}'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: en
|
||||
Archive: Archief
|
||||
By: door
|
||||
CONTRIBUTOR: Co-auteur
|
||||
Categories: Categorieën
|
||||
Categorisation: Categorisatie
|
||||
Category: Categorie
|
||||
Comments: Reacties
|
||||
DESCRIPTION: 'Voegt een blog toe aan je site.'
|
||||
EDITOR: Redacteur
|
||||
FILTERDESCRIPTION_AUTHOR: 'Door {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'In categorie {category}'
|
||||
FILTERDESCRIPTION_DATE: 'In {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Pagina {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Getagd met {tag}'
|
||||
LessThanAMinuteToRead: 'Minder dan een minuut om te lezen'
|
||||
LumberjackTitle: 'Blog Artikelen'
|
||||
MinutesToRead: 'Minuten om te lezen'
|
||||
NoPosts: 'Er zijn geen blog artikelen'
|
||||
PERMISSIONS_CATEGORY: 'Blog rechten'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Beheer gebruikers voor individuele blogs'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Laat toewijzing toe van Redacteurs, Auteurs en Co-auteurs'
|
||||
PLURALNAME: Blog
|
||||
PLURALS:
|
||||
one: 'Eén blogpagina'
|
||||
other: '{count} blogpagina''s'
|
||||
Posted: Geplaatst
|
||||
PostedIn: 'Geplaatst in'
|
||||
PostsByUser: 'Berichten van {firstname} {surname} bij {title}'
|
||||
PostsPerPage: 'Artikelen per pagina'
|
||||
ReadMoreAbout: 'Lees meer over ''{title}''...'
|
||||
SINGULARNAME: Blog
|
||||
Tag: Tag
|
||||
Tagged: Getagd
|
||||
Tags: Tags
|
||||
UsersContributorsFieldDescription: "Co-auteurs hebben de mogelijkheid om artikelen te maken en te bewerken, maar niet te publiceren\n zonder toestemming van een Auteur. Het is ook niet mogelijk om andere auteur toe te kennen\n aan hun artikelen.<br />\n <br />\n Co-auteurs hebben deze rechten:<br />\n <br />\n Bewerken van artikelen die ze zelf geschreven hebben of aan toegekend zijn"
|
||||
UsersEditorsFieldDescription: "Een Redacteur heeft het beheer over specifieke blogs (en alle artikelen die daaronder vallen).\n Behalve dat ze andere Redacteuren aan een blog kunnen toewijzen, kunnen ze de meeste instellingen\n van hun blog zelf beheren. <br /><br />\n Redacteuren hebben deze rechten:<br />\n <br />\n Bijwerken en publiceren van artikelen in hun blog<br />\n Aanpassen en publiceren van hun blog<br />\n Auteurs (ont)koppelen aan hun blog\n Co-auteurs (ont)koppelen aan hun blog<br />\n Een gebruiker instellen als auteur van een artikel"
|
||||
UsersWritersFieldDescription: "Een Auteur heeft volledig beheer over artikelen die zij geschreven hebben of aan gekoppeld zijn. \nAuteurs kunnen geen artikelen beheren waar zij niet aan gekoppeld zijn.\n <br /><br />\n Auteurs hebben deze rechten:<br />\n <br />\n Bewerken of publiceren van artikelen die zij geschreven hebben of aan gekoppeld zijn<br />\n Een gebruiker (ont)koppelen als auteur van een artikel die zij geschreven hebben of aan gekoppeld zijn"
|
||||
WRITER: Auteur
|
||||
has_many_Categories: Categorieën
|
||||
has_many_Tags: Tags
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
Duplicate: 'Een blog categorie met dezelfde naam bestaat al'
|
||||
PLURALNAME: 'Blog Categorieën'
|
||||
PLURALS:
|
||||
one: 'Een Blog Categorie'
|
||||
other: '{count} Blog Categorieën'
|
||||
SINGULARNAME: 'Blog Categorie'
|
||||
db_Title: Titel
|
||||
db_URLSegment: 'URL segment'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Blog Artikelen'
|
||||
TABBLOGPOSTS: 'Blog Artikel'
|
||||
db_URLSegment: 'URL segment'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Auteur
|
||||
AdditionalCredits: Dankbetuigingen
|
||||
AdditionalCredits_Description: 'Indien enkele van de auteurs geen toegang hebben tot dit CMS, kunnen ze hier worden toegevoegd. Scheid namen door middel van komma''s.'
|
||||
Authors: Auteurs
|
||||
CUSTOMSUMMARY: 'Voeg een eigen samenvatting toe'
|
||||
Categories: Categorieën
|
||||
FeaturedImage: 'Prominente Afbeelding'
|
||||
PLURALNAME: Artikel
|
||||
PLURALS:
|
||||
one: 'Eén artikel'
|
||||
other: '{count} artikelen'
|
||||
PageTitleLabel: 'Artikel Titel'
|
||||
PostOptions: 'Artikel opties'
|
||||
PublishDate: Publicatiedatum
|
||||
PublishDate_Description: 'Wordt op "nu" gezet indien gepubliceerd zonder waarde.'
|
||||
SINGULARNAME: 'Blog Artikel'
|
||||
SUMMARY_DESCRIPTION: 'Als er geen samenvatting ingevoerd wordt, dan worden de eerste 30 woorden gebruikt.'
|
||||
Tags: Tags
|
||||
many_many_Authors: Auteurs
|
||||
many_many_Categories: Categorieën
|
||||
many_many_Tags: Tags
|
||||
SilverStripe\Blog\Model\BlogPostFeaturedExtension:
|
||||
FEATURED: 'Dit artikel tonen in de Uitgelicht-widget'
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
Duplicate: 'Een blog tag met dezelfde naam bestaat al.'
|
||||
PLURALNAME: 'Blog Tags'
|
||||
PLURALS:
|
||||
one: 'Een Blog Tag'
|
||||
other: '{count} Blog Tags'
|
||||
SINGULARNAME: 'Blog Tag'
|
||||
db_Title: Titel
|
||||
db_URLSegment: 'URL segment'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: ArchiveType
|
||||
Blog: Blog
|
||||
NumberToDisplay: 'Aantal te tonen'
|
||||
PLURALNAME: 'Blog Archief-widgets'
|
||||
PLURALS:
|
||||
one: 'Een Blog Archief-widget'
|
||||
other: '{count} Blog Archief-widgets'
|
||||
SINGULARNAME: 'Blog Archief-widget'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
Direction: Sorteerrichting
|
||||
Direction_Description: 'Verander de sorteerrichting van categoriën getoond door deze widget.'
|
||||
Limit: Limiet
|
||||
Limit_Description: 'Limiteer het aantal categorieën getoond door deze widget (stel in op 0 om alle categorieën te tonen).'
|
||||
PLURALNAME: 'Blog Categorie-widgets'
|
||||
PLURALS:
|
||||
one: 'Blog Categorie-widget'
|
||||
other: '{count} Blog Categorie-widgets'
|
||||
SINGULARNAME: 'Blog Categorie-widget'
|
||||
Sort: Volgorde
|
||||
Sort_Description: 'Verander de volgorde van categorieën getoond door deze widget.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Aantal berichten'
|
||||
PLURALNAME: 'Uitgelichte berichten widgets'
|
||||
PLURALS:
|
||||
one: 'Een uitgelicht bericht widget'
|
||||
other: '{count} uitgelichte berichten widgets'
|
||||
SINGULARNAME: 'Uitgelicht bericht widget'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Aantal Artikelen'
|
||||
PLURALNAME: 'Blog Recente Artikelen-widgets'
|
||||
PLURALS:
|
||||
one: 'Een Blog Recente Artikelen-widget'
|
||||
other: '{count} Blog Recente Artikelen-widgets'
|
||||
SINGULARNAME: 'Blog Recente Artikelen-widget'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Blog
|
||||
PLURALNAME: 'Blog Tags Cloud-widgets'
|
||||
PLURALS:
|
||||
one: 'Een Blog Tags Cloud-widget'
|
||||
other: '{count} Blog Tags Cloud-widgets'
|
||||
SINGULARNAME: 'Blog Tags Cloud-widget'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Direction: Volgorde
|
||||
Direction_Description: 'Verander de volgorde van tags getoond door deze widget.'
|
||||
Limit: Limiet
|
||||
Limit_Description: 'Limiteer het aantal tags getoond door deze widget (stel in op 0 om alle tags te tonen).'
|
||||
PLURALNAME: 'Blog Tags-widgets'
|
||||
PLURALS:
|
||||
one: 'Een Blog Tags-widget'
|
||||
other: '{count} Blog Tags-widgets'
|
||||
SINGULARNAME: 'Blog Tags-widget'
|
||||
Sort: Volgorde
|
||||
Sort_Description: 'Verander de volgorde van tags getoond door deze widget.'
|
33
lang/pl.yml
@ -1,33 +0,0 @@
|
||||
pl:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Posty
|
||||
Title: Tytuł
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Dodaj {name}'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Zmodyfikowany
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Tytuł
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: i
|
||||
Archive: Archiwizuj
|
||||
By: przez
|
||||
Comments: Komentarze
|
||||
PLURALNAME: 'Podstawowe strony'
|
||||
Tags: 'Tagi:'
|
||||
has_many_Tags: 'Tagi:'
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
db_Title: Tytuł
|
||||
db_URLSegment: URL
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
db_URLSegment: URL
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Tytuł
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Autor
|
||||
PLURALNAME: 'Podstawowe strony'
|
||||
Tags: 'Tagi:'
|
||||
many_many_Tags: 'Tagi:'
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
db_Title: Tytuł
|
||||
db_URLSegment: URL
|
@ -1,25 +0,0 @@
|
||||
pl_PL:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: Tytuł
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Zmodyfikowano
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Tytuł
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
Archive: Archiwizuj
|
||||
Comments: Komentarze
|
||||
FILTERDESCRIPTION_PAGE: 'Strona {page}'
|
||||
PLURALNAME: 'Podstawowa strona'
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
db_Title: Tytuł
|
||||
db_URLSegment: URL
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
db_URLSegment: URL
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Tytuł
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Autor
|
||||
PLURALNAME: 'Podstawowa strona'
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
db_Title: Tytuł
|
||||
db_URLSegment: URL
|
121
lang/ru.yml
@ -1,118 +1,45 @@
|
||||
ru:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Сообщения
|
||||
Title: Заголовок
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Добавить {name}'
|
||||
AddFail: 'Не удалось сохранить {class} в базе данных.'
|
||||
PermissionFail: 'У вас нет прав для создания элемента {class}.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Черновик сохранен {date}'
|
||||
Modified: Измененные
|
||||
Published: 'Опубликовано {date}'
|
||||
Timer: 'Опубликовать {date}'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Заголовок
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: и
|
||||
Blog:
|
||||
Archive: Архив
|
||||
By: 'автор:'
|
||||
CONTRIBUTOR: Автор
|
||||
Categories: Категории
|
||||
Category: Категория
|
||||
Comments: Комментарии
|
||||
DESCRIPTION: 'Добавляет к сайту блог.'
|
||||
PLURALNAME: Блоги
|
||||
Posted: Отправлено
|
||||
SINGULARNAME: Блог
|
||||
Tag: Метка
|
||||
Tagged: Метки
|
||||
Tags: Метки
|
||||
By: 'автор:'
|
||||
EDITOR: Редактор
|
||||
FILTERDESCRIPTION_AUTHOR: 'Автор: {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'В категории: {category}'
|
||||
FILTERDESCRIPTION_DATE: 'Дата: {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Страница {page}'
|
||||
FILTERDESCRIPTION_TAG: 'С метками {tag}'
|
||||
LumberjackTitle: 'Записи в блоге'
|
||||
NoPosts: 'В блоге нет записей'
|
||||
PERMISSIONS_CATEGORY: 'Права доступа к содержимому блога'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Управление пользователями для индивидуальных блогов'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Разрешить назначать Редакторов, Писателей и Авторов к блогам'
|
||||
PLURALNAME: 'Базовые страницы'
|
||||
Posted: Отправлено
|
||||
PostedIn: Отправлено
|
||||
PostsPerPage: 'Записей на странице'
|
||||
ReadMoreAbout: 'Узнать больше о ''{title}''...'
|
||||
SINGULARNAME: Блог
|
||||
Tag: Метка
|
||||
Tagged: Метки
|
||||
BlogPost:
|
||||
SINGULARNAME: 'Запись в блоге'
|
||||
Tags: Метки
|
||||
WRITER: Автор
|
||||
has_many_Categories: Категории
|
||||
has_many_Tags: Метки
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
PLURALNAME: 'Категории Блога'
|
||||
SINGULARNAME: 'Категория Блога'
|
||||
db_Title: Заголовок
|
||||
has_one_Blog: Блог
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Базовые страницы'
|
||||
TABBLOGPOSTS: 'Базовые страницы'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Заголовок
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Автор
|
||||
AdditionalCredits: 'Дополнительные сведения'
|
||||
AdditionalCredits_Description: 'Если некоторые авторы этого сообщения не имеют доступа к админке укажите их имена здесь. Для разделения имён используется запятая.'
|
||||
Authors: Авторы
|
||||
CUSTOMSUMMARY: 'Добавить уникальное описание'
|
||||
Categories: Категории
|
||||
FeaturedImage: Изображение
|
||||
PLURALNAME: 'Базовые страницы'
|
||||
PageTitleLabel: 'Заголовок Сообщения'
|
||||
PublishDate: 'Дата публикации'
|
||||
PublishDate_Description: 'Будет использована текущая дата если не будет указанно значение.'
|
||||
SINGULARNAME: 'Запись в блоге'
|
||||
SUMMARY_DESCRIPTION: 'Если не указанно описание будут использованы первые 30 слов.'
|
||||
Tags: Метки
|
||||
many_many_Authors: Авторы
|
||||
many_many_Categories: Категории
|
||||
many_many_Tags: Метки
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
PLURALNAME: 'Тэги Блога'
|
||||
SINGULARNAME: 'Тэг Блога'
|
||||
db_Title: Заголовок
|
||||
has_one_Blog: Блог
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: 'Тип архива'
|
||||
Blog: Блог
|
||||
NumberToDisplay: 'Отображать:'
|
||||
PLURALNAME: 'Виджеты архива'
|
||||
SINGULARNAME: 'Виджет архива'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Блог
|
||||
Direction: Направление
|
||||
Direction_Description: 'Изменять направление сортировки категорий отображаемых в этом блоке.'
|
||||
Limit: Ограничение
|
||||
Limit_Description: 'Ограничить количество категорий отображаемых в этом блоке (укажите 0 чтобы отображать все категории).'
|
||||
PLURALNAME: 'Блоки категорий блога'
|
||||
SINGULARNAME: 'Блок категорий блога'
|
||||
Sort: Сортировать
|
||||
Sort_Description: 'Изменить порядок категорий в этом блоке.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
BlogRecentPostsWidget:
|
||||
Blog: Блог
|
||||
NumberOfPosts: 'Количество записей'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
BlogTag:
|
||||
PLURALNAME: 'Метки'
|
||||
SINGULARNAME: 'Метка'
|
||||
Title: Заголовок
|
||||
BlogTagsWidget:
|
||||
Blog: Блог
|
||||
NumberOfPosts: 'Количество записей'
|
||||
PLURALNAME: 'Блоки последних сообщений блога'
|
||||
SINGULARNAME: 'Блок последних сообщений блога'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Блог
|
||||
PLURALNAME: 'Блоки облака тэгов'
|
||||
SINGULARNAME: 'Блок облака тэгов'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Блог
|
||||
Direction: Направление
|
||||
Direction_Description: 'Изменить направление сортировки тэгов отображаемых в этом блоке.'
|
||||
Limit: Ограничение
|
||||
Limit_Description: 'Ограничить количество тэгов в этом блоке (укажите 0 чтобы отобразить все тэги).'
|
||||
PLURALNAME: 'Виджеты для меток блога'
|
||||
SINGULARNAME: 'Виджет для меток блога'
|
||||
Sort: Сортировать
|
||||
Sort_Description: 'Изменить порядок тэгов в этом блоке.'
|
||||
GridFieldAddByDBField:
|
||||
Add: 'Добавить {name}'
|
||||
AddFail: 'Не удалось сохранить {class} в базе данных.'
|
||||
PermissionFail: 'У вас нет прав для создания элемента {class}.'
|
||||
GridFieldBlogPostState:
|
||||
Draft: '<i class="btn-icon gridfield-icon btn-icon-pencil"></i> Черновик сохранен {date}'
|
||||
Published: '<i class="btn-icon gridfield-icon btn-icon-accept"></i> Опубликовано {date}'
|
||||
Timer: '<i class="gridfield-icon blog-icon-timer"></i> Опубликовать {date}'
|
||||
|
125
lang/sk.yml
@ -1,125 +0,0 @@
|
||||
sk:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: Názov
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Pridať {name}'
|
||||
AddFail: 'Nie je možné uložiť {class} do databázy.'
|
||||
PermissionFail: 'Nemáte oprávnenie na vytvorenie {class}.'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Zmenené
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Názov
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: a
|
||||
Archive: Archív
|
||||
By: ' od'
|
||||
CONTRIBUTOR: Prispievateľ
|
||||
Categories: Kategórie
|
||||
Category: Kategória
|
||||
Comments: Komentáre
|
||||
DESCRIPTION: 'Pridá blog na stránku.'
|
||||
EDITOR: Vydavateľ
|
||||
FILTERDESCRIPTION_AUTHOR: '{author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'V kategórii {category}'
|
||||
FILTERDESCRIPTION_DATE: '{date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Strana {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Štítkovaný {tag}'
|
||||
LumberjackTitle: 'Základné stránky'
|
||||
NoPosts: 'Žiadne príspevky'
|
||||
PERMISSIONS_CATEGORY: 'Práva blogu'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Správa užívateľov pre jednotlivé blogy'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Umožniť priradenie vydavateľov, spisovateľov alebo prispievateľov do blogu.'
|
||||
PLURALNAME: 'Základné stránky'
|
||||
Posted: Uverejnené
|
||||
PostedIn: 'Uverejnené v'
|
||||
PostsPerPage: 'Príspevky na stránke'
|
||||
ReadMoreAbout: 'Čítať viac o ''{title}''...'
|
||||
SINGULARNAME: Blog
|
||||
Tag: Štítok
|
||||
Tagged: Oštítkované
|
||||
Tags: Štítky
|
||||
WRITER: Spisovateľ
|
||||
has_many_Categories: Kategórie
|
||||
has_many_Tags: Štítky
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
PLURALNAME: 'Kategórie blogu'
|
||||
SINGULARNAME: 'Kategória blogu'
|
||||
Title: Názov
|
||||
belongs_many_many_BlogPosts: 'Príspevky v blogu'
|
||||
db_Title: Názov
|
||||
db_URLSegment: 'Časť URL'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Základné stránky'
|
||||
TABBLOGPOSTS: 'Základné stránky'
|
||||
belongs_many_many_BlogPosts: 'Príspevky v blogu'
|
||||
db_BlogProfileSummary: 'Prehľad profilu blogu'
|
||||
db_URLSegment: 'Časť URL'
|
||||
has_one_BlogProfileImage: 'Profilový obrázok blogu'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Názov
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Autor
|
||||
AdditionalCredits: 'Doplnkoví autori'
|
||||
AdditionalCredits_Description: 'Ak niektorí autori tohto príspevku nemajú prístup k CMS, zadajte ich mená sem. Viacero autorov môžete oddeliť čiarkou.'
|
||||
Authors: 'Ak niektorí autori tohto príspevku nemajú prístup k CMS, zadajte ich mená sem. Viacero autorov môžete oddeliť čiarkou.'
|
||||
CUSTOMSUMMARY: 'Pridať vlastné zhrnutie'
|
||||
Categories: Kategórie
|
||||
DESCRIPTION: 'Obyčajná jednoduchá stránka s vlastným obsahom.'
|
||||
FeaturedImage: 'Hlavný obrázok'
|
||||
PLURALNAME: 'Základné stránky'
|
||||
PageTitleLabel: 'Názov príspevku'
|
||||
PublishDate: 'Dátum publikovania'
|
||||
PublishDate_Description: 'V prípade zverejnenia bez hodnoty bude nastavený aktuálny dátum a čas.'
|
||||
SINGULARNAME: 'Príspevok v blogu'
|
||||
SUMMARY_DESCRIPTION: 'Ak zhrnutie nie je uvedené, bude použitých prvých 30 slov z obsahu.'
|
||||
Tags: Štítky
|
||||
many_many_Authors: 'Ak niektorí autori tohto príspevku nemajú prístup k CMS, zadajte ich mená sem. Viacero autorov môžete oddeliť čiarkou.'
|
||||
many_many_Categories: Kategórie
|
||||
many_many_Tags: Štítky
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
PLURALNAME: 'Štítky blogu'
|
||||
SINGULARNAME: 'Štítok blogu'
|
||||
Title: Názov
|
||||
belongs_many_many_BlogPosts: 'Príspevky v blogu'
|
||||
db_Title: Názov
|
||||
db_URLSegment: 'Časť URL'
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: 'Typ archívu'
|
||||
Blog: Blog
|
||||
NumberToDisplay: 'Počet na zobrazenie'
|
||||
PLURALNAME: 'Widgety archívu blogu'
|
||||
SINGULARNAME: 'Widget archívu blogu'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
Direction: Smer
|
||||
Direction_Description: 'Zmení smer usporiadania kategórií na tomto widgete.'
|
||||
Limit: 'Max. počet'
|
||||
Limit_Description: 'Obmedzí počet zobrazených kategórií na tomto widgete (nastavením na 0 sa zobrazujú všetky kategórie).'
|
||||
PLURALNAME: 'Widgety kategórií blogu'
|
||||
SINGULARNAME: 'Widget kategórií blogu'
|
||||
Sort: Usporiadanie
|
||||
Sort_Description: 'Zmení usporiadanie kategórií na tomto widgete.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Počet príspevkov'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Počet príspevkov'
|
||||
PLURALNAME: 'Widgety nedávnych príspevkov blogu'
|
||||
SINGULARNAME: 'Widget nedávnych príspevkov blogu'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Blog
|
||||
PLURALNAME: 'Widgety používaných štítkov blogu'
|
||||
SINGULARNAME: 'Widget používaných štítkov blogu'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Direction: Smer
|
||||
Direction_Description: 'Zmení smer usporiadania štítkov na tomto widgete.'
|
||||
Limit: 'Max. počet'
|
||||
Limit_Description: 'Obmedzí počet zobrazených štítkov na tomto widgete (nastavením na 0 sa zobrazujú všetky štítky).'
|
||||
PLURALNAME: 'Widgety štítkov blogu'
|
||||
SINGULARNAME: 'Widget štítkov blogu'
|
||||
Sort: Usporiadanie
|
||||
Sort_Description: 'Zmení usporiadanie štítkov na tomto widgete.'
|
112
lang/sk_SK.yml
@ -1,112 +0,0 @@
|
||||
sk_SK:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: Názov
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Pridať {name}'
|
||||
AddFail: 'Nie je možné uložiť {class} do databázy.'
|
||||
PermissionFail: 'Nemáte oprávnenie na vytvorenie {class}.'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Názov
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: a
|
||||
Archive: Archív
|
||||
By: ' od'
|
||||
CONTRIBUTOR: Prispievateľ
|
||||
Categories: Kategórie
|
||||
Category: Kategória
|
||||
Comments: Komentáre
|
||||
DESCRIPTION: 'Pridá blog na stránku.'
|
||||
EDITOR: Vydavateľ
|
||||
FILTERDESCRIPTION_AUTHOR: '{author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'V kategórii {category}'
|
||||
FILTERDESCRIPTION_DATE: '{date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Stránka {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Štítkovaný {tag}'
|
||||
LumberjackTitle: 'Príspevky v blogu'
|
||||
NoPosts: 'Žiadne príspevky'
|
||||
PERMISSIONS_CATEGORY: 'Práva blogu'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Správa užívateľov pre jednotlivé blogy'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Umožniť priradenie vydavateľov, spisovateľov alebo prispievateľov do blogu.'
|
||||
PLURALNAME: 'Základné stránky'
|
||||
Posted: Uverejnené
|
||||
PostedIn: 'Uverejnené v'
|
||||
PostsPerPage: 'Príspevky na stránke'
|
||||
ReadMoreAbout: 'Čítať viac o ''{title}''...'
|
||||
SINGULARNAME: Blog
|
||||
Tag: Štítok
|
||||
Tagged: Oštítkované
|
||||
Tags: Štítky
|
||||
WRITER: Spisovateľ
|
||||
has_many_Categories: Kategórie
|
||||
has_many_Tags: Štítky
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
PLURALNAME: 'Kategórie blogu'
|
||||
SINGULARNAME: 'Kategória blogu'
|
||||
db_Title: Názov
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: 'Príspevky v blogu'
|
||||
TABBLOGPOSTS: 'Príspevky v blogu'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Názov
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Autor
|
||||
AdditionalCredits: 'Doplnkoví autori'
|
||||
AdditionalCredits_Description: 'Ak niektorí autori tohto príspevku nemajú prístup k CMS, zadajte ich mená sem. Viacero autorov môžete oddeliť čiarkou.'
|
||||
Authors: Autori
|
||||
CUSTOMSUMMARY: 'Pridať vlastné zhrnutie'
|
||||
Categories: Kategórie
|
||||
FeaturedImage: 'Hlavný obrázok'
|
||||
PLURALNAME: 'Základné stránky'
|
||||
PageTitleLabel: 'Názov príspevku'
|
||||
PublishDate: 'Dátum publikovania'
|
||||
PublishDate_Description: 'V prípade zverejnenia bez hodnoty bude nastavený aktuálny dátum a čas.'
|
||||
SINGULARNAME: 'Príspevok v blogu'
|
||||
SUMMARY_DESCRIPTION: 'Ak zhrnutie nie je uvedené, bude použitých prvých 30 slov z obsahu.'
|
||||
Tags: Štítky
|
||||
many_many_Authors: Autori
|
||||
many_many_Categories: Kategórie
|
||||
many_many_Tags: Štítky
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
PLURALNAME: 'Štítky blogu'
|
||||
SINGULARNAME: 'Štítok blogu'
|
||||
db_Title: Názov
|
||||
has_one_Blog: Blog
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: 'Typ archívu'
|
||||
Blog: Blog
|
||||
NumberToDisplay: 'Počet na zobrazenie'
|
||||
PLURALNAME: 'Widgety archívu blogu'
|
||||
SINGULARNAME: 'Widget archívu blogu'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Blog
|
||||
Direction: Smer
|
||||
Direction_Description: 'Zmení smer usporiadania kategórií na tomto widgete.'
|
||||
Limit: 'Max. počet'
|
||||
Limit_Description: 'Obmedzí počet zobrazených kategórií na tomto widgete (nastavením na 0 sa zobrazujú všetky kategórie).'
|
||||
PLURALNAME: 'Widgety kategórií blogu'
|
||||
SINGULARNAME: 'Widget kategórií blogu'
|
||||
Sort: Usporiadanie
|
||||
Sort_Description: 'Zmení usporiadanie kategórií na tomto widgete.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Počet príspevkov'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
Blog: Blog
|
||||
NumberOfPosts: 'Počet príspevkov'
|
||||
PLURALNAME: 'Widgety nedávnych príspevkov blogu'
|
||||
SINGULARNAME: 'Widget nedávnych príspevkov blogu'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Blog
|
||||
PLURALNAME: 'Widgety používaných štítkov blogu'
|
||||
SINGULARNAME: 'Widget používaných štítkov blogu'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blog
|
||||
Direction: Smer
|
||||
Direction_Description: 'Zmení smer usporiadania štítkov na tomto widgete.'
|
||||
Limit: 'Max. počet'
|
||||
Limit_Description: 'Obmedzí počet zobrazených štítkov na tomto widgete (nastavením na 0 sa zobrazujú všetky štítky).'
|
||||
PLURALNAME: 'Widgety štítkov blogu'
|
||||
SINGULARNAME: 'Widget štítkov blogu'
|
||||
Sort: Usporiadanie
|
||||
Sort_Description: 'Zmení usporiadanie štítkov na tomto widgete.'
|
37
lang/sl.yml
@ -1,37 +0,0 @@
|
||||
sl:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: Naziv
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Dodaj {name}'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: Spremenjeno
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Naziv
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: in
|
||||
Archive: Arhiv
|
||||
Comments: Komentarji
|
||||
FILTERDESCRIPTION_PAGE: 'Stran {page}'
|
||||
PLURALNAME: 'Izvorna stran'
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
belongs_many_many_BlogPosts: 'Zapisi na blogu'
|
||||
db_Title: Naziv
|
||||
db_URLSegment: 'Naslov URL'
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
belongs_many_many_BlogPosts: 'Zapisi na blogu'
|
||||
db_BlogProfileSummary: 'Povzetek blogerskega profila'
|
||||
db_URLSegment: 'Naslov URL'
|
||||
has_one_BlogProfileImage: 'Osebna podoba'
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Naziv
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Avtor
|
||||
PLURALNAME: 'Izvorna stran'
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
belongs_many_many_BlogPosts: 'Zapisi na blogu'
|
||||
db_Title: Naziv
|
||||
db_URLSegment: 'Naslov URL'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Sort: Razvrščanje
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Sort: Razvrščanje
|
120
lang/sv.yml
@ -1,120 +0,0 @@
|
||||
sv:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Posts: Inlägg
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: 'Lägg till {name}'
|
||||
AddFail: 'Det går inte att spara {class} till databasen .'
|
||||
PermissionFail: 'Du har inte behörighet att skapa en {class} .'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Draft: 'Sparad som utkast den {date}'
|
||||
Modified: Ändrad
|
||||
Published: 'Publicerad den {date}'
|
||||
Timer: 'Publicerad den {date}'
|
||||
SilverStripe\Blog\Model:
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
AND: och
|
||||
Archive: Arkiv
|
||||
By: av
|
||||
CONTRIBUTOR: Bidragsgivare
|
||||
Categories: Kategorier
|
||||
Category: Kategori
|
||||
Comments: Kommentarer
|
||||
DESCRIPTION: 'Lägger till en blog på din hemsida.'
|
||||
EDITOR: Redaktör
|
||||
FILTERDESCRIPTION_AUTHOR: 'Av {author}'
|
||||
FILTERDESCRIPTION_CATEGORY: 'I kategori {category}'
|
||||
FILTERDESCRIPTION_DATE: 'På {date}'
|
||||
FILTERDESCRIPTION_PAGE: 'Sida {page}'
|
||||
FILTERDESCRIPTION_TAG: 'Taggat med {tag}'
|
||||
LumberjackTitle: Bloginlägg
|
||||
NoPosts: 'Det finns inga bloginlägg'
|
||||
PERMISSIONS_CATEGORY: 'Blogg rättigheter'
|
||||
PERMISSION_MANAGE_USERS_DESCRIPTION: 'Hantera användare för enskilda bloggar'
|
||||
PERMISSION_MANAGE_USERS_HELP: 'Tillåt tilldelning av redaktörer , författare , eller bidragsgivare till bloggar'
|
||||
PLURALNAME: Bas-sidor
|
||||
Posted: Postat
|
||||
PostedIn: 'Postat den'
|
||||
PostsPerPage: 'Blogginlägg per sida'
|
||||
ReadMoreAbout: 'Läs mer om ''{title}''...'
|
||||
SINGULARNAME: Blogg
|
||||
Tag: Tagg
|
||||
Tagged: Taggad
|
||||
Tags: Taggar
|
||||
WRITER: Författare
|
||||
has_many_Categories: Kategorier
|
||||
has_many_Tags: Taggar
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
Duplicate: 'En bloggkategori finns redan med det namnet.'
|
||||
PLURALNAME: 'Blogg Kategorier'
|
||||
SINGULARNAME: 'Blogg Kategori'
|
||||
db_Title: Titel
|
||||
has_one_Blog: Blogg
|
||||
SilverStripe\Blog\Model\BlogMemberExtension:
|
||||
BLOGPOSTS: Blogginlägg
|
||||
TABBLOGPOSTS: Blogginlägg
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: Titel
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: Författare
|
||||
AdditionalCredits: 'Ytterligare erkännanden'
|
||||
AdditionalCredits_Description: 'Om vissa författare till det här inlägget inte har CMS-åtkomst anger du deras namn (en) här. Du kan separera flera namn med komma.'
|
||||
Authors: Författare
|
||||
CUSTOMSUMMARY: 'Lägg till en anpassad sammanfattning'
|
||||
Categories: Kategorier
|
||||
FeaturedImage: 'Utvald bild'
|
||||
PLURALNAME: Bas-sidor
|
||||
PageTitleLabel: Blogginläggstitel
|
||||
PublishDate: 'Publicerat datum'
|
||||
PublishDate_Description: 'Kommer att sättas till "nu" om publiceras utan ett värde .'
|
||||
SINGULARNAME: Bloginlägg
|
||||
SUMMARY_DESCRIPTION: 'Om ingen sammanfattning anges, kommer de första 30 orden att användas .'
|
||||
Tags: Taggar
|
||||
many_many_Authors: Författare
|
||||
many_many_Categories: Kategorier
|
||||
many_many_Tags: Taggar
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
Duplicate: 'En tag med det här namnet är redan tillagd'
|
||||
PLURALNAME: 'Blogg taggar'
|
||||
SINGULARNAME: 'Blogg tag'
|
||||
db_Title: Titel
|
||||
has_one_Blog: Blogg
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
ArchiveType: ArkivTyp
|
||||
Blog: Blogg
|
||||
NumberToDisplay: 'Antal att visa'
|
||||
PLURALNAME: 'Blogg Arkiv-Widgets'
|
||||
SINGULARNAME: 'Blogg Arkiv-Widget'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
Blog: Blogg
|
||||
Direction: Ordning
|
||||
Direction_Description: 'Ändra ordningen av kategorier som visas av denna widget.'
|
||||
Limit: Begränsa
|
||||
Limit_Description: 'Begränsa antalet kategorier som visas av denna widget (sätt till 0 för att visa alla kategorier).'
|
||||
PLURALNAME: 'Blogg Kategorier-Widgets'
|
||||
SINGULARNAME: 'Blogg Kategori-Widget'
|
||||
Sort: Sortera
|
||||
Sort_Description: 'Ändra ordningen av kategorier som visas av denna widget.'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
Blog: Blogg
|
||||
NumberOfPosts: 'Antal inlägg'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
Blog: Blogg
|
||||
NumberOfPosts: 'Antal inlägg'
|
||||
PLURALNAME: 'Blogg Senaste Inläggs-Widget'
|
||||
SINGULARNAME: 'Blogg Senaste Inläggs-Widget'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
Blog: Blogg
|
||||
PLURALNAME: 'Cloud-widgets för taggar'
|
||||
SINGULARNAME: 'Cloud-widget för tagg'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
Blog: Blogg
|
||||
Direction: Ordning
|
||||
Direction_Description: 'Ändra riktningen av ordningen av taggar som visas av denna widget.'
|
||||
Limit: Begränsa
|
||||
Limit_Description: 'Begränsa antalet taggar som visas av denna widget (sätt till 0 för att visa alla taggar).'
|
||||
PLURALNAME: 'Blogg taggar Widgets'
|
||||
SINGULARNAME: 'Blogg taggar Widget'
|
||||
Sort: Sortera
|
||||
Sort_Description: 'Ändra ordningen av taggar som visas av denna widget.'
|
27
lang/zh.yml
@ -1,27 +0,0 @@
|
||||
zh:
|
||||
SilverStripe\Blog\Admin\GridFieldCategorisationConfig:
|
||||
Title: 题目
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField:
|
||||
Add: '添加 {name}'
|
||||
SilverStripe\Blog\Forms\GridField\GridFieldBlogPostState:
|
||||
Modified: 已修改
|
||||
SilverStripe\Blog\Model:
|
||||
Title: 题目
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
Archive: 归档
|
||||
Comments: 评论
|
||||
PLURALNAME: 基本页面
|
||||
Tags: 标签
|
||||
has_many_Tags: 标签
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
db_Title: 题目
|
||||
SilverStripe\Blog\Model\BlogObject:
|
||||
Title: 题目
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
AUTHOR: 作者
|
||||
FeaturedImage: 特色图片
|
||||
PLURALNAME: 基本页面
|
||||
Tags: 标签
|
||||
many_many_Tags: 标签
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
db_Title: 题目
|
10
license.md
@ -1,10 +0,0 @@
|
||||
Copyright (c) 2018, Michael Strong
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
38
package.json
@ -1,38 +0,0 @@
|
||||
{
|
||||
"name": "silverstripe-blog",
|
||||
"version": "3.0.0",
|
||||
"description": "A fresh take on blogging in Silverstripe set out to tackle the issue of a cluttered Site Tree",
|
||||
"scripts": {
|
||||
"build": "yarn && yarn lint && NODE_ENV=production webpack -p --bail --progress",
|
||||
"dev": "NODE_ENV=development webpack --progress",
|
||||
"watch": "NODE_ENV=development webpack --watch --progress",
|
||||
"css": "WEBPACK_CHILD=css npm run build",
|
||||
"lint": "yarn lint-js && yarn lint-sass",
|
||||
"lint-js": "eslint client/src",
|
||||
"lint-js-fix": "eslint client/src --fix",
|
||||
"lint-sass": "sass-lint client/src",
|
||||
"test": "true"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/silverstripe/silverstripe-blog.git"
|
||||
},
|
||||
"keywords": [
|
||||
"silverstripe",
|
||||
"blog"
|
||||
],
|
||||
"author": "SilverStripe Ltd",
|
||||
"license": "BSD-2-Clause",
|
||||
"bugs": {
|
||||
"url": "https://github.com/silverstripe/silverstripe-blog/issues"
|
||||
},
|
||||
"homepage": "https://github.com/silverstripe/silverstripe-blog#readme",
|
||||
"dependencies": {},
|
||||
"peerDependencies": {
|
||||
"jquery": "^3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@silverstripe/eslint-config": "^0.0.5",
|
||||
"@silverstripe/webpack-config": "^1.3"
|
||||
}
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ruleset name="SilverStripe">
|
||||
<description>CodeSniffer ruleset for SilverStripe coding conventions.</description>
|
||||
|
||||
<file>src</file>
|
||||
<file>tests</file>
|
||||
|
||||
<!-- base rules are PSR-2 -->
|
||||
<rule ref="PSR2" >
|
||||
<!-- Current exclusions -->
|
||||
<exclude name="PSR1.Methods.CamelCapsMethodName" />
|
||||
<exclude name="PSR1.Files.SideEffects.FoundWithSymbols" />
|
||||
</rule>
|
||||
</ruleset>
|
||||
|
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit bootstrap="vendor/silverstripe/cms/tests/bootstrap.php" colors="true">
|
||||
<testsuites>
|
||||
<testsuite name="blog">
|
||||
<directory>tests/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<filter>
|
||||
<whitelist addUncoveredFilesFromWhitelist="true">
|
||||
<directory suffix=".php">src/</directory>
|
||||
<exclude>
|
||||
<directory suffix=".php">tests/</directory>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
15
scss/blog.scss
Normal file
@ -0,0 +1,15 @@
|
||||
.no-sidebar .content-container.size3of4 {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.blog-entry .post-image img {
|
||||
width: 98.75%;
|
||||
}
|
||||
|
||||
.blog-sidebar .WidgetHolder ul {
|
||||
margin-left: 0;
|
||||
|
||||
li {
|
||||
list-style-type: none;
|
||||
}
|
||||
}
|
0
scss/categories-tags.scss
Normal file
191
scss/cms.scss
Executable file
@ -0,0 +1,191 @@
|
||||
/**
|
||||
* CMS Styles
|
||||
*/
|
||||
/**
|
||||
* Include Compass framework
|
||||
*/
|
||||
@import "compass";
|
||||
/*
|
||||
* Sprite maps & Icons
|
||||
*/
|
||||
@import "compass/utilities/sprites/base";
|
||||
@import "blog-icon/*.png";
|
||||
// buttons
|
||||
|
||||
.gridfield-icon {
|
||||
@include all-blog-icon-sprites;
|
||||
}
|
||||
|
||||
#FeaturedImage .middleColumn {
|
||||
clear: none;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.blog-admin-sidebar {
|
||||
width: 280px;
|
||||
border-right: none;
|
||||
border-left: 1px solid #C0C0C2;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
height: 100%;
|
||||
|
||||
.cms-panel-toggle a {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
~ .blog-admin-outer {
|
||||
width: 100%;
|
||||
padding-right: 280px;
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
overflow-y: hidden;
|
||||
overflow-x: hidden;
|
||||
box-sizing: border-box;
|
||||
|
||||
> .ss-tabset {
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
#Title {
|
||||
label {
|
||||
float: none;
|
||||
}
|
||||
.middleColumn, input {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cms-content-view {
|
||||
> .field {
|
||||
+ .field {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
&.urlsegment {
|
||||
.preview {
|
||||
padding-top: 0;
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
.edit {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
&.datetime {
|
||||
> .middleColumn {
|
||||
> .date {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
> .time {
|
||||
width: 36%;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.middleColumn, input {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.collapsed {
|
||||
~ .blog-admin-outer {
|
||||
padding-right: 41px;
|
||||
}
|
||||
}
|
||||
|
||||
&.cms-content-tools {
|
||||
.cms-panel-content {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.toggle-description {
|
||||
text-indent: -1000000px;
|
||||
display: inline-block;
|
||||
background: url("../images/information.png") no-repeat center center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.middleColumn.toggle-description-correct-middle {
|
||||
margin-left: 0;
|
||||
float: left;
|
||||
width: 416px;
|
||||
}
|
||||
|
||||
label.right.toggle-description-correct-right {
|
||||
display: inline-block;
|
||||
margin-left: 0;
|
||||
clear: none;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.description.toggle-description-correct-description {
|
||||
width: 416px;
|
||||
padding: 12px 0;
|
||||
}
|
||||
|
||||
.custom-summary {
|
||||
.ui-accordion-content .field {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.ui-accordion-content,
|
||||
.ui-accordion-content .field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.ui-icon-triangle-1-e {
|
||||
background-position: -16px -128px;
|
||||
}
|
||||
}
|
||||
|
||||
.cms table.ss-gridfield-table {
|
||||
tr td.MergeAction {
|
||||
width: 225px;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
select {
|
||||
width: 150px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cms-content-actions,
|
||||
.cms-preview-controls {
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.blog-cms-categorisation {
|
||||
|
||||
.MergeActionReveal {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.MergeActionReveal:after {
|
||||
content: '';
|
||||
background: url('../images/move-icon.png');
|
||||
display: inline-block;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Admin;
|
||||
|
||||
use SilverStripe\Blog\Forms\GridField\GridFieldAddByDBField;
|
||||
use SilverStripe\Blog\Model\CategorisationObject;
|
||||
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
|
||||
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
||||
use SilverStripe\ORM\SS_List;
|
||||
|
||||
class GridFieldCategorisationConfig extends GridFieldConfig_RecordEditor
|
||||
{
|
||||
/**
|
||||
* @param int $itemsPerPage
|
||||
* @param array|SS_List $mergeRecords
|
||||
* @param string $parentType
|
||||
* @param string $parentMethod
|
||||
* @param string $childMethod
|
||||
*/
|
||||
public function __construct($itemsPerPage, $mergeRecords, $parentType, $parentMethod, $childMethod)
|
||||
{
|
||||
parent::__construct($itemsPerPage);
|
||||
|
||||
$this->removeComponentsByType(GridFieldAddNewButton::class);
|
||||
|
||||
$this->addComponent(
|
||||
GridFieldAddByDBField::create('buttons-before-left')
|
||||
);
|
||||
|
||||
$this->addComponent(
|
||||
GridFieldMergeAction::create($mergeRecords, $parentType, $parentMethod, $childMethod)
|
||||
);
|
||||
|
||||
/**
|
||||
* @var GridFieldDataColumns $columns
|
||||
*/
|
||||
$columns = $this->getComponentByType(GridFieldDataColumns::class);
|
||||
|
||||
$columns->setFieldFormatting(
|
||||
[
|
||||
'BlogPostsCount' => function ($value, CategorisationObject $item) {
|
||||
return $item->BlogPosts()->Count();
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
$this->changeColumnOrder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reorders GridField columns so that Actions is last.
|
||||
*/
|
||||
protected function changeColumnOrder()
|
||||
{
|
||||
/**
|
||||
* @var GridFieldDataColumns $columns
|
||||
*/
|
||||
$columns = $this->getComponentByType(GridFieldDataColumns::class);
|
||||
|
||||
$columns->setDisplayFields(
|
||||
[
|
||||
'Title' => _t(__CLASS__ . '.Title', 'Title'),
|
||||
'BlogPostsCount' => _t(__CLASS__ . '.Posts', 'Posts'),
|
||||
'MergeAction' => 'MergeAction',
|
||||
'Actions' => 'Actions'
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Admin;
|
||||
|
||||
use SilverStripe\Forms\GridField\GridField_FormAction;
|
||||
|
||||
class GridFieldFormAction extends GridField_FormAction
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $extraAttributes = [];
|
||||
|
||||
/**
|
||||
* @param array $attributes
|
||||
*/
|
||||
public function setExtraAttributes(array $attributes)
|
||||
{
|
||||
$this->extraAttributes = $attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getAttributes()
|
||||
{
|
||||
$attributes = parent::getAttributes();
|
||||
|
||||
return array_merge(
|
||||
$attributes,
|
||||
$this->extraAttributes
|
||||
);
|
||||
}
|
||||
}
|
@ -1,165 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Admin;
|
||||
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\Injector\Injectable;
|
||||
use Silverstripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridField_ActionProvider;
|
||||
use SilverStripe\Forms\GridField\GridField_ColumnProvider;
|
||||
use SilverStripe\ORM\SS_List;
|
||||
|
||||
class GridFieldMergeAction implements GridField_ColumnProvider, GridField_ActionProvider
|
||||
{
|
||||
use Injectable;
|
||||
|
||||
/**
|
||||
* List of records to show in the MergeAction column.
|
||||
*
|
||||
* @var array|SS_List
|
||||
*/
|
||||
protected $records;
|
||||
|
||||
/**
|
||||
* Type of parent DataObject (i.e BlogTag, BlogCategory).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $parentType;
|
||||
|
||||
/**
|
||||
* Relationship method to reference parent (i.e BlogTags).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $parentMethod;
|
||||
|
||||
/**
|
||||
* Relationship method to reference child (i.e BlogPosts).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $childMethod;
|
||||
|
||||
/**
|
||||
* @param array|SS_List $records
|
||||
* @param string $parentType
|
||||
* @param string $parentMethod
|
||||
* @param string $childMethod
|
||||
*/
|
||||
public function __construct($records, $parentType, $parentMethod, $childMethod)
|
||||
{
|
||||
$this->records = $records;
|
||||
$this->parentType = $parentType;
|
||||
$this->parentMethod = $parentMethod;
|
||||
$this->childMethod = $childMethod;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function augmentColumns($gridField, &$columns)
|
||||
{
|
||||
if (!in_array('MergeAction', $columns ?? [])) {
|
||||
$columns[] = 'MergeAction';
|
||||
}
|
||||
|
||||
return $columns;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnsHandled($gridField)
|
||||
{
|
||||
return ['MergeAction'];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnContent($gridField, $record, $columnName)
|
||||
{
|
||||
if ($columnName === 'MergeAction' && $record->{$this->childMethod}()->Count() > 0) {
|
||||
$dropdown = DropdownField::create('Target', 'Target', $this->records->exclude('ID', $record->ID)->map());
|
||||
$dropdown->setAttribute('id', 'Target_'.$record->ID);
|
||||
$prefix = strtolower($this->parentMethod . '-' . $this->childMethod);
|
||||
|
||||
$action = GridFieldFormAction::create(
|
||||
$gridField,
|
||||
'MergeAction' . $record->ID,
|
||||
'Move',
|
||||
'merge',
|
||||
[
|
||||
'record' => $record->ID,
|
||||
'target' => $prefix . '-target-record-' . $record->ID,
|
||||
]
|
||||
);
|
||||
|
||||
$action->setExtraAttributes([
|
||||
'data-target' => $prefix . '-target-record-' . $record->ID
|
||||
]);
|
||||
|
||||
$action->addExtraClass('btn btn-primary btn-sm blog-merge-action');
|
||||
$MovePostsTo = _t(__CLASS__ . '.MovePostsTo', 'Move posts to');
|
||||
$MergeActionReveal = '<a title="' . $MovePostsTo . '" class="MergeActionReveal">' . $MovePostsTo . '</a>';
|
||||
|
||||
return $dropdown->Field() . $action->Field() . $MergeActionReveal;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnAttributes($gridField, $record, $columnName)
|
||||
{
|
||||
return ['class' => 'MergeAction'];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnMetadata($gridField, $columnName)
|
||||
{
|
||||
return ['title' => _t(__CLASS__ . '.MovePostsTo', 'Move posts to')];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getActions($gridField)
|
||||
{
|
||||
return ['merge'];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function handleAction(GridField $gridField, $actionName, $arguments, $data)
|
||||
{
|
||||
if ($actionName === 'merge') {
|
||||
$controller = Controller::curr();
|
||||
|
||||
$request = $controller->getRequest();
|
||||
|
||||
$target = $request->requestVar($arguments["target"]);
|
||||
|
||||
$parentType = $this->parentType;
|
||||
|
||||
$fromParent = $parentType::get()->byId($arguments['record']);
|
||||
$toParent = $parentType::get()->byId($target);
|
||||
|
||||
$posts = $fromParent->{$this->childMethod}();
|
||||
|
||||
foreach ($posts as $post) {
|
||||
$relationship = $post->{$this->parentMethod}();
|
||||
|
||||
$relationship->remove($fromParent);
|
||||
$relationship->add($toParent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Forms;
|
||||
|
||||
use SilverStripe\Control\Cookie;
|
||||
use SilverStripe\Forms\FieldGroup;
|
||||
|
||||
class BlogAdminSidebar extends FieldGroup
|
||||
{
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isOpen()
|
||||
{
|
||||
$sidebar = Cookie::get('blog-admin-sidebar');
|
||||
|
||||
if ($sidebar == 1 || is_null($sidebar)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,240 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Forms\GridField;
|
||||
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Control\HTTPResponse;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Core\Injector\Injectable;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridField_ActionProvider;
|
||||
use SilverStripe\Forms\GridField\GridField_FormAction;
|
||||
use SilverStripe\Forms\GridField\GridField_HTMLProvider;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DataList;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\Security\Security;
|
||||
use SilverStripe\View\ArrayData;
|
||||
use SilverStripe\View\Requirements;
|
||||
use UnexpectedValueException;
|
||||
|
||||
class GridFieldAddByDBField implements GridField_ActionProvider, GridField_HTMLProvider
|
||||
{
|
||||
use Injectable;
|
||||
|
||||
/**
|
||||
* HTML Fragment to render the field.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $targetFragment;
|
||||
|
||||
/**
|
||||
* Default field to create the DataObject by should be Title.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $dataObjectField = 'Title';
|
||||
|
||||
/**
|
||||
* Name for the buttons displayed in the CMS
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $buttonName;
|
||||
|
||||
/**
|
||||
* Creates a text field and add button which allows the user to directly create a new
|
||||
* DataObject by just entering the title.
|
||||
*
|
||||
* @param string $targetFragment
|
||||
* @param string $dataObjectField
|
||||
*/
|
||||
public function __construct($targetFragment = 'before', $dataObjectField = 'Title')
|
||||
{
|
||||
$this->targetFragment = $targetFragment;
|
||||
$this->dataObjectField = (string) $dataObjectField;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide actions to this component.
|
||||
*
|
||||
* @param GridField $gridField
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getActions($gridField)
|
||||
{
|
||||
return [
|
||||
'add',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the add action for the given DataObject.
|
||||
*
|
||||
* @param $gridField GridField
|
||||
* @param $actionName string
|
||||
* @param $arguments mixed
|
||||
* @param $data array
|
||||
*
|
||||
* @return null|HTTPResponse
|
||||
*
|
||||
* @throws UnexpectedValueException
|
||||
*/
|
||||
public function handleAction(GridField $gridField, $actionName, $arguments, $data)
|
||||
{
|
||||
if ($actionName == 'add') {
|
||||
$dbField = $this->getDataObjectField();
|
||||
|
||||
$objClass = $gridField->getModelClass();
|
||||
|
||||
/**
|
||||
* @var DataObject $obj
|
||||
*/
|
||||
$obj = $objClass::create();
|
||||
|
||||
if ($obj->hasField($dbField)) {
|
||||
$obj->setCastedField($dbField, $data['gridfieldaddbydbfield'][$obj->ClassName][$dbField]);
|
||||
|
||||
if ($obj->canCreate()) {
|
||||
$id = $gridField->getList()->add($obj);
|
||||
if (!$id) {
|
||||
$gridField->setCustomValidationMessage(
|
||||
_t(
|
||||
__CLASS__ . '.AddFail',
|
||||
'Unable to save {class} to the database.',
|
||||
'Unable to add the DataObject.',
|
||||
[
|
||||
'class' => get_class($obj),
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
return Security::permissionFailure(
|
||||
Controller::curr(),
|
||||
_t(
|
||||
__CLASS__ . '.PermissionFail',
|
||||
'You don\'t have permission to create a {class}.',
|
||||
'Unable to add the DataObject.',
|
||||
[
|
||||
'class' => get_class($obj)
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
throw new UnexpectedValueException(
|
||||
sprintf(
|
||||
'Invalid field (%s) on %s.',
|
||||
$dbField,
|
||||
$obj->ClassName
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the database field for which we'll add the new data object.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDataObjectField()
|
||||
{
|
||||
return $this->dataObjectField;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the button name
|
||||
*
|
||||
* @param $name string
|
||||
* @return $this
|
||||
*/
|
||||
public function setButtonName($name)
|
||||
{
|
||||
$this->buttonName = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the database field.
|
||||
*
|
||||
* @param $field string
|
||||
*/
|
||||
public function setDataObjectField($field)
|
||||
{
|
||||
$this->dataObjectField = (string) $field;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the TextField and add button to the GridField.
|
||||
*
|
||||
* @param $gridField GridField
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getHTMLFragments($gridField)
|
||||
{
|
||||
Requirements::javascript('silverstripe/blog:client/dist/js/main.bundle.js');
|
||||
|
||||
/**
|
||||
* @var DataList $dataList
|
||||
*/
|
||||
$dataList = $gridField->getList();
|
||||
|
||||
$dataClass = $dataList->dataClass();
|
||||
|
||||
$obj = singleton($dataClass);
|
||||
|
||||
if (!$obj->canCreate()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$dbField = $this->getDataObjectField();
|
||||
|
||||
$textField = TextField::create(
|
||||
sprintf(
|
||||
"gridfieldaddbydbfield[%s][%s]",
|
||||
$obj->ClassName,
|
||||
Convert::raw2htmlatt($dbField)
|
||||
)
|
||||
)
|
||||
->setAttribute('placeholder', $obj->fieldLabel($dbField))
|
||||
->addExtraClass('no-change-track');
|
||||
|
||||
if (!$this->buttonName) {
|
||||
// provide a default button name, can be changed by calling {@link setButtonName()} on this component
|
||||
$objectName = $obj->i18n_singular_name();
|
||||
$this->buttonName = _t(__CLASS__ . '.ButtonName', '{name}', ['name' => $objectName]);
|
||||
}
|
||||
|
||||
$addAction = GridField_FormAction::create(
|
||||
$gridField,
|
||||
'add',
|
||||
_t(
|
||||
__CLASS__ . '.Add',
|
||||
'Add {name}',
|
||||
'Add button text',
|
||||
['name' => $this->buttonName]
|
||||
),
|
||||
'add',
|
||||
'add'
|
||||
);
|
||||
$addAction->setAttribute('data-icon', 'add');
|
||||
$addAction->addExtraClass('btn btn-primary');
|
||||
|
||||
$forTemplate = ArrayData::create([]);
|
||||
|
||||
$forTemplate->Fields = ArrayList::create();
|
||||
$forTemplate->Fields->push($textField);
|
||||
$forTemplate->Fields->push($addAction);
|
||||
|
||||
return [$this->targetFragment => $forTemplate->renderWith(self::class)];
|
||||
}
|
||||
}
|
@ -1,100 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Forms\GridField;
|
||||
|
||||
use SilverStripe\Blog\Model\BlogPost;
|
||||
use SilverStripe\Lumberjack\Forms\GridFieldSiteTreeState;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
|
||||
/**
|
||||
* Provides a component to the {@link GridField} which tells the user whether or not a blog post
|
||||
* has been published and when.
|
||||
*
|
||||
*/
|
||||
class GridFieldBlogPostState extends GridFieldSiteTreeState
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnContent($gridField, $record, $columnName)
|
||||
{
|
||||
if ($columnName == 'State') {
|
||||
if ($record instanceof BlogPost) {
|
||||
$modifiedLabel = '';
|
||||
|
||||
if ($record->isModifiedOnDraft()) {
|
||||
$modifiedLabel = '<span class="modified">' . _t(__CLASS__ . '.Modified', 'Modified') . '</span>';
|
||||
}
|
||||
|
||||
if (!$record->isPublished()) {
|
||||
/**
|
||||
* @var DBDatetime $lastEdited
|
||||
*/
|
||||
$lastEdited = $record->dbObject('LastEdited');
|
||||
|
||||
return '<i class="font-icon-edit mr-2"></i> ' . _t(
|
||||
__CLASS__ . '.Draft',
|
||||
'Saved as Draft on {date}',
|
||||
'State for when a post is saved.',
|
||||
[
|
||||
'date' => $lastEdited->FormatFromSettings(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var DBDatetime $publishDate
|
||||
*/
|
||||
$publishDate = $record->dbObject('PublishDate');
|
||||
|
||||
if (strtotime($record->PublishDate ?? '') > time()) {
|
||||
return '<i class="font-icon-clock mr-2"></i> ' . _t(
|
||||
__CLASS__ . '.Timer',
|
||||
'Publish at {date}',
|
||||
'State for when a post is published.',
|
||||
[
|
||||
'date' => $publishDate->FormatFromSettings(),
|
||||
]
|
||||
) . $modifiedLabel;
|
||||
}
|
||||
|
||||
return '<i class="font-icon-check-mark-circle text-success mr-2"></i> ' . _t(
|
||||
__CLASS__ . '.Published',
|
||||
'Published on {date}',
|
||||
'State for when a post is published.',
|
||||
[
|
||||
'date' => $publishDate->FormatFromSettings(),
|
||||
]
|
||||
) . $modifiedLabel;
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getColumnAttributes($gridField, $record, $columnName)
|
||||
{
|
||||
if ($columnName == 'State') {
|
||||
if ($record instanceof BlogPost) {
|
||||
$published = $record->isPublished();
|
||||
|
||||
if (!$published) {
|
||||
$class = 'gridfield-icon draft';
|
||||
} elseif (strtotime($record->PublishDate ?? '') > time()) {
|
||||
$class = 'gridfield-icon timer';
|
||||
} else {
|
||||
$class = 'gridfield-icon published';
|
||||
}
|
||||
|
||||
return [
|
||||
'class' => $class,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Forms\GridField;
|
||||
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use SilverStripe\Lumberjack\Forms\GridFieldConfig_Lumberjack;
|
||||
use SilverStripe\Lumberjack\Forms\GridFieldSiteTreeState;
|
||||
|
||||
/**
|
||||
* GridField config necessary for managing a SiteTree object.
|
||||
*
|
||||
*/
|
||||
class GridFieldConfigBlogPost extends GridFieldConfig_Lumberjack
|
||||
{
|
||||
/**
|
||||
* @param null|int $itemsPerPage
|
||||
*/
|
||||
public function __construct($itemsPerPage = null)
|
||||
{
|
||||
parent::__construct($itemsPerPage);
|
||||
|
||||
$this->removeComponentsByType(GridFieldSiteTreeState::class);
|
||||
$this->addComponent(Injector::inst()->create(GridFieldBlogPostState::class));
|
||||
}
|
||||
}
|
@ -1,707 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use Page;
|
||||
use SilverStripe\Blog\Admin\GridFieldCategorisationConfig;
|
||||
use SilverStripe\Blog\Forms\GridField\GridFieldConfigBlogPost;
|
||||
use SilverStripe\CMS\Controllers\RootURLController;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\ListboxField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\ORM\DataList;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\DB;
|
||||
use SilverStripe\ORM\HasManyList;
|
||||
use SilverStripe\ORM\ManyManyList;
|
||||
use SilverStripe\ORM\SS_List;
|
||||
use SilverStripe\ORM\UnsavedRelationList;
|
||||
use SilverStripe\Security\Group;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\Security\Permission;
|
||||
use SilverStripe\Security\PermissionProvider;
|
||||
use SilverStripe\Security\Security;
|
||||
use SilverStripe\View\Requirements;
|
||||
|
||||
/**
|
||||
* Blog Holder
|
||||
*
|
||||
* @method HasManyList Tags() List of tags in this blog
|
||||
* @method HasManyList Categories() List of categories in this blog
|
||||
* @method ManyManyList Editors() List of editors
|
||||
* @method ManyManyList Writers() List of writers
|
||||
* @method ManyManyList Contributors() List of contributors
|
||||
*/
|
||||
class Blog extends Page implements PermissionProvider
|
||||
{
|
||||
/**
|
||||
* Permission for user management.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const MANAGE_USERS = 'BLOG_MANAGE_USERS';
|
||||
|
||||
/**
|
||||
* If true, users assigned as editor, writer, or contributor will be automatically granted
|
||||
* CMS_ACCESS_CMSMain permission. If false, only users with this permission already may be
|
||||
* assigned.
|
||||
*
|
||||
* @config
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
private static $grant_user_access = true;
|
||||
|
||||
/**
|
||||
* Permission to either require, or grant to users assigned to work on this blog.
|
||||
*
|
||||
* @config
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private static $grant_user_permission = 'CMS_ACCESS_CMSMain';
|
||||
|
||||
/**
|
||||
* Group code to assign newly granted users to.
|
||||
*
|
||||
* @config
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private static $grant_user_group = 'blog-users';
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'Blog';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'PostsPerPage' => 'Int',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_many = [
|
||||
'Tags' => BlogTag::class,
|
||||
'Categories' => BlogCategory::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $many_many = [
|
||||
'Editors' => Member::class,
|
||||
'Writers' => Member::class,
|
||||
'Contributors' => Member::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $allowed_children = [
|
||||
BlogPost::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = [
|
||||
BlogFilter::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* The ProvideComments db column is defined in the silverstripe/comments module
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $defaults = [
|
||||
'ProvideComments' => false,
|
||||
'PostsPerPage' => 10
|
||||
];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Adds a blog to your website.';
|
||||
|
||||
private static $icon_class = 'font-icon-p-posts';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$this->addCMSRequirements();
|
||||
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
if (!$this->canEdit()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$categories = GridField::create(
|
||||
'Categories',
|
||||
_t(__CLASS__ . '.Categories', 'Categories'),
|
||||
$this->Categories(),
|
||||
GridFieldCategorisationConfig::create(
|
||||
15,
|
||||
$this->Categories()->sort('Title'),
|
||||
BlogCategory::class,
|
||||
'Categories',
|
||||
'BlogPosts'
|
||||
)
|
||||
);
|
||||
|
||||
$tags = GridField::create(
|
||||
'Tags',
|
||||
_t(__CLASS__ . '.Tags', 'Tags'),
|
||||
$this->Tags(),
|
||||
GridFieldCategorisationConfig::create(
|
||||
15,
|
||||
$this->Tags()->sort('Title'),
|
||||
BlogTag::class,
|
||||
'Tags',
|
||||
'BlogPosts'
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->addFieldsToTab(
|
||||
'Root.Categorisation',
|
||||
[
|
||||
$categories,
|
||||
$tags
|
||||
]
|
||||
);
|
||||
|
||||
$fields->fieldByName('Root.Categorisation')
|
||||
->addExtraClass('blog-cms-categorisation')
|
||||
->setTitle(_t(__CLASS__ . '.Categorisation', 'Categorisation'));
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds CMS related css and js overrides
|
||||
*/
|
||||
protected function addCMSRequirements()
|
||||
{
|
||||
Requirements::css('silverstripe/blog:client/dist/styles/main.css');
|
||||
Requirements::javascript('silverstripe/blog:client/dist/js/main.bundle.js');
|
||||
}
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canEdit($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if ($this->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return parent::canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return null|Member
|
||||
*/
|
||||
protected function getMember($member = null)
|
||||
{
|
||||
if (!$member) {
|
||||
$member = Security::getCurrentUser();
|
||||
}
|
||||
|
||||
if (is_numeric($member)) {
|
||||
$member = Member::get()->byID($member);
|
||||
}
|
||||
|
||||
return $member;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this member is an editor of the blog.
|
||||
*
|
||||
* @param Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isEditor($member)
|
||||
{
|
||||
$isEditor = $this->isMemberOf($member, $this->Editors());
|
||||
$this->extend('updateIsEditor', $isEditor, $member);
|
||||
|
||||
return $isEditor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the given member belongs to the given relation.
|
||||
*
|
||||
* @param Member $member
|
||||
* @param DataList $relation
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isMemberOf($member, $relation)
|
||||
{
|
||||
if (!$member || !$member->exists()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($relation instanceof UnsavedRelationList) {
|
||||
return in_array($member->ID, $relation->getIDList() ?? []);
|
||||
}
|
||||
|
||||
return $relation->byID($member->ID) !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the role of the given member.
|
||||
*
|
||||
* Call be called via template to determine the current user.
|
||||
*
|
||||
* @example "Hello $RoleOf($CurrentMember.ID)"
|
||||
*
|
||||
* @param int|Member $member
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function RoleOf($member)
|
||||
{
|
||||
if (is_numeric($member)) {
|
||||
$member = Member::get()->byId($member);
|
||||
}
|
||||
|
||||
if (!$member) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($this->isEditor($member)) {
|
||||
return _t(__CLASS__ . '.EDITOR', 'Editor');
|
||||
}
|
||||
|
||||
if ($this->isWriter($member)) {
|
||||
return _t(__CLASS__ . '.WRITER', 'Writer');
|
||||
}
|
||||
|
||||
if ($this->isContributor($member)) {
|
||||
return _t(__CLASS__ . '.CONTRIBUTOR', 'Contributor');
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this member is a writer of the blog.
|
||||
*
|
||||
* @param Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isWriter($member)
|
||||
{
|
||||
$isWriter = $this->isMemberOf($member, $this->Writers());
|
||||
$this->extend('updateIsWriter', $isWriter, $member);
|
||||
|
||||
return $isWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this member is a contributor of the blog.
|
||||
*
|
||||
* @param Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isContributor($member)
|
||||
{
|
||||
$isContributor = $this->isMemberOf($member, $this->Contributors());
|
||||
$this->extend('updateIsContributor', $isContributor, $member);
|
||||
|
||||
return $isContributor;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canAddChildren($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if ($this->isEditor($member) || $this->isWriter($member) || $this->isContributor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return parent::canAddChildren($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getSettingsFields()
|
||||
{
|
||||
$this->addCMSRequirements();
|
||||
$fields = parent::getSettingsFields();
|
||||
|
||||
$fields->addFieldToTab(
|
||||
'Root.Settings',
|
||||
NumericField::create('PostsPerPage', _t(__CLASS__ . '.PostsPerPage', 'Posts Per Page'))
|
||||
);
|
||||
|
||||
$members = $this->getCandidateUsers()->map()->toArray();
|
||||
$toggleButton = LiteralField::create(
|
||||
'ToggleButton',
|
||||
'<a class="font-icon-info-circled toggle-description"></a>'
|
||||
);
|
||||
|
||||
$editorField = ListboxField::create('Editors', 'Editors', $members)
|
||||
->setRightTitle($toggleButton)
|
||||
->setDescription(
|
||||
_t(
|
||||
__CLASS__ . '.UsersEditorsFieldDescription',
|
||||
'An editor has control over specific Blogs, and all posts included within it.
|
||||
Short of being able to assign other editors to a blog, they are able to handle most changes to
|
||||
their assigned blog. <br /><br />
|
||||
Editors have these permissions:<br />
|
||||
<br />
|
||||
Update or publish any BlogPost in their Blog<br />
|
||||
Update or publish their Blog<br />
|
||||
Assign/unassign writers to their Blog<br />
|
||||
Assign/unassign contributors to their Blog<br />
|
||||
Assign/unassign any member as an author of a particular BlogPost'
|
||||
)
|
||||
);
|
||||
if (!$this->canEditEditors()) {
|
||||
$editorField = $editorField->performDisabledTransformation();
|
||||
}
|
||||
$writerField = ListboxField::create('Writers', 'Writers', $members)
|
||||
->setRightTitle($toggleButton)
|
||||
->setDescription(
|
||||
_t(
|
||||
__CLASS__ . '.UsersWritersFieldDescription',
|
||||
'A writer has full control over creating, editing and publishing BlogPosts they have authored
|
||||
or have been assigned to. Writers are unable to edit BlogPosts to which they are not assigned.
|
||||
<br /><br />
|
||||
Writers have these permissions:<br />
|
||||
<br />
|
||||
Update or publish any BlogPost they have authored or have been assigned to<br />
|
||||
Assign/unassign any member as an author of a particular BlogPost they have authored or have been
|
||||
assigned to'
|
||||
)
|
||||
);
|
||||
|
||||
if (!$this->canEditWriters()) {
|
||||
$writerField = $writerField->performDisabledTransformation();
|
||||
}
|
||||
|
||||
$contributorField = ListboxField::create('Contributors', 'Contributors', $members)
|
||||
// ->setMultiple(true)
|
||||
->setRightTitle($toggleButton)
|
||||
->setDescription(
|
||||
_t(
|
||||
__CLASS__ . '.UsersContributorsFieldDescription',
|
||||
'Contributors have the ability to create or edit BlogPosts, but are unable to publish without
|
||||
authorisation of an editor. They are also unable to assign other contributing authors to any of
|
||||
their BlogPosts.<br />
|
||||
<br />
|
||||
Contributors have these permissions:<br />
|
||||
<br />
|
||||
Update any BlogPost they have authored or have been assigned to'
|
||||
)
|
||||
);
|
||||
|
||||
if (!$this->canEditContributors()) {
|
||||
$contributorField = $contributorField->performDisabledTransformation();
|
||||
}
|
||||
|
||||
$fields->addFieldsToTab(
|
||||
'Root.Users',
|
||||
[
|
||||
$editorField,
|
||||
$writerField,
|
||||
$contributorField
|
||||
]
|
||||
);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of user candidates to be assigned to assist with this blog.
|
||||
*
|
||||
* @return SS_List
|
||||
*/
|
||||
protected function getCandidateUsers()
|
||||
{
|
||||
if ($this->config()->get('grant_user_access')) {
|
||||
$list = Member::get();
|
||||
$this->extend('updateCandidateUsers', $list);
|
||||
return $list;
|
||||
}
|
||||
|
||||
return Permission::get_members_by_permission(
|
||||
$this->config()->get('grant_user_permission')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if this user can edit the editors list.
|
||||
*
|
||||
* @param int|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canEditEditors($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$extended = $this->extendedCan('canEditEditors', $member);
|
||||
|
||||
if ($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, self::MANAGE_USERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if this user can edit writers list.
|
||||
*
|
||||
* @param int|Member $member
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function canEditWriters($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$extended = $this->extendedCan('canEditWriters', $member);
|
||||
|
||||
if ($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
if ($this->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, self::MANAGE_USERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if this user can edit the contributors list.
|
||||
*
|
||||
* @param int|Member $member
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function canEditContributors($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$extended = $this->extendedCan('canEditContributors', $member);
|
||||
|
||||
if ($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
if ($this->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, self::MANAGE_USERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns BlogPosts for a given date period.
|
||||
*
|
||||
* @param int $year
|
||||
* @param null|int $month
|
||||
* @param null|int $day
|
||||
*
|
||||
* @return DataList
|
||||
*/
|
||||
public function getArchivedBlogPosts($year, $month = null, $day = null)
|
||||
{
|
||||
$query = $this->getBlogPosts()->dataQuery();
|
||||
|
||||
$stage = $query->getQueryParam('Versioned.stage');
|
||||
|
||||
if ($stage) {
|
||||
$stage = '_' . $stage;
|
||||
}
|
||||
|
||||
$query->innerJoin(
|
||||
DataObject::getSchema()->tableName(BlogPost::class),
|
||||
sprintf('"SiteTree%s"."ID" = "BlogPost%s"."ID"', $stage, $stage)
|
||||
);
|
||||
|
||||
$conn = DB::get_conn();
|
||||
|
||||
// Filter by year
|
||||
$yearCond = $conn->formattedDatetimeClause('"BlogPost"."PublishDate"', '%Y');
|
||||
$query->where(sprintf('%s = \'%04d\'', $yearCond, Convert::raw2sql($year)));
|
||||
|
||||
// Filter by month (if given)
|
||||
if ($month) {
|
||||
$monthCond = $conn->formattedDatetimeClause('"BlogPost"."PublishDate"', '%m');
|
||||
$query->where(sprintf('%s = \'%02d\'', $monthCond, Convert::raw2sql($month)));
|
||||
|
||||
if ($day) {
|
||||
$dayCond = $conn->formattedDatetimeClause('"BlogPost"."PublishDate"', '%d');
|
||||
$query->where(sprintf('%s = \'%02d\'', $dayCond, Convert::raw2sql($day)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $this->getBlogPosts()->setDataQuery($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return blog posts.
|
||||
*
|
||||
* @return DataList of BlogPost objects
|
||||
*/
|
||||
public function getBlogPosts()
|
||||
{
|
||||
$blogPosts = BlogPost::get()->filter('ParentID', $this->ID);
|
||||
|
||||
$this->extend('updateGetBlogPosts', $blogPosts);
|
||||
|
||||
return $blogPosts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a link to a Member profile.
|
||||
*
|
||||
* @param string $urlSegment
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function ProfileLink($urlSegment)
|
||||
{
|
||||
$baseLink = $this->Link();
|
||||
if ($baseLink === '/') {
|
||||
// Handle homepage blogs
|
||||
$baseLink = RootURLController::get_homepage_link();
|
||||
}
|
||||
|
||||
return Controller::join_links($baseLink, 'profile', $urlSegment);
|
||||
}
|
||||
|
||||
/**
|
||||
* This sets the title for our gridfield.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLumberjackTitle()
|
||||
{
|
||||
return _t(__CLASS__ . '.LumberjackTitle', 'Blog Posts');
|
||||
}
|
||||
|
||||
/**
|
||||
* This overwrites lumberjacks default gridfield config.
|
||||
*
|
||||
* @return GridFieldConfig
|
||||
*/
|
||||
public function getLumberjackGridFieldConfig()
|
||||
{
|
||||
return GridFieldConfigBlogPost::create();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function providePermissions()
|
||||
{
|
||||
return [
|
||||
Blog::MANAGE_USERS => [
|
||||
'name' => _t(
|
||||
__CLASS__ . '.PERMISSION_MANAGE_USERS_DESCRIPTION',
|
||||
'Manage users for individual blogs'
|
||||
),
|
||||
'help' => _t(
|
||||
__CLASS__ . '.PERMISSION_MANAGE_USERS_HELP',
|
||||
'Allow assignment of Editors, Writers, or Contributors to blogs'
|
||||
),
|
||||
'category' => _t(__CLASS__ . '.PERMISSIONS_CATEGORY', 'Blog permissions'),
|
||||
'sort' => 100
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
$this->assignGroup();
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign users as necessary to the blog group.
|
||||
*/
|
||||
protected function assignGroup()
|
||||
{
|
||||
if (!$this->config()->get('grant_user_access')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$group = $this->getUserGroup();
|
||||
|
||||
// Must check if the method exists or else an error occurs when changing page type
|
||||
if ($this->hasMethod('Editors')) {
|
||||
foreach ([$this->Editors(), $this->Writers(), $this->Contributors()] as $levels) {
|
||||
foreach ($levels as $user) {
|
||||
if (!$user->inGroup($group)) {
|
||||
$user->Groups()->add($group);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets or creates the group used to assign CMS access.
|
||||
*
|
||||
* @return Group
|
||||
*/
|
||||
protected function getUserGroup()
|
||||
{
|
||||
$code = $this->config()->get('grant_user_group');
|
||||
|
||||
$group = Group::get()->filter('Code', $code)->first();
|
||||
|
||||
if ($group) {
|
||||
return $group;
|
||||
}
|
||||
|
||||
$group = Group::create();
|
||||
$group->Title = 'Blog users';
|
||||
$group->Code = $code;
|
||||
|
||||
$group->write();
|
||||
|
||||
$permission = Permission::create();
|
||||
$permission->Code = $this->config()->get('grant_user_permission');
|
||||
|
||||
$group->Permissions()->add($permission);
|
||||
|
||||
return $group;
|
||||
}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use SilverStripe\ORM\DataObject;
|
||||
|
||||
/**
|
||||
* A blog category for generalising blog posts.
|
||||
*
|
||||
*
|
||||
* @method Blog Blog()
|
||||
*
|
||||
* @property string $Title
|
||||
* @property string $URLSegment
|
||||
* @property int $BlogID
|
||||
*/
|
||||
class BlogCategory extends DataObject implements CategorisationObject
|
||||
{
|
||||
use BlogObject;
|
||||
|
||||
/**
|
||||
* Use an exception code so that attempted writes can continue on
|
||||
* duplicate errors.
|
||||
*
|
||||
* @const string
|
||||
* This must be a string because ValidationException has decided we can't use int
|
||||
*/
|
||||
const DUPLICATE_EXCEPTION = 'DUPLICATE';
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'BlogCategory';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'Title' => 'Varchar(255)',
|
||||
'URLSegment' => 'Varchar(255)'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'Blog' => Blog::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $belongs_many_many = [
|
||||
'BlogPosts' => BlogPost::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function getListUrlSegment()
|
||||
{
|
||||
return 'category';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function getDuplicateError()
|
||||
{
|
||||
return _t(__CLASS__ . '.Duplicate', 'A blog category already exists with that name.');
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
/**
|
||||
* Adds Blog specific behaviour to Comment.
|
||||
*/
|
||||
class BlogCommentExtension extends DataExtension
|
||||
{
|
||||
/**
|
||||
* Extra CSS classes for styling different comment types.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getExtraClass()
|
||||
{
|
||||
$blogPost = $this->owner->Parent();
|
||||
|
||||
if ($blogPost instanceof BlogPost) {
|
||||
if ($blogPost->isAuthor($this->owner->Author())) {
|
||||
return 'author-comment';
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
@ -1,587 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use PageController;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Control\HTTPResponse_Exception;
|
||||
use SilverStripe\Control\RSS\RSSFeed;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DataList;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\ORM\PaginatedList;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\View\Parsers\URLSegmentFilter;
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
|
||||
class BlogController extends PageController
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $allowed_actions = [
|
||||
'archive',
|
||||
'tag',
|
||||
'category',
|
||||
'rss',
|
||||
'profile'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $url_handlers = [
|
||||
'tag/$Tag!/$Rss' => 'tag',
|
||||
'category/$Category!/$Rss' => 'category',
|
||||
'archive/$Year!/$Month/$Day' => 'archive',
|
||||
'profile/$URLSegment!' => 'profile'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $casting = [
|
||||
'MetaTitle' => 'Text',
|
||||
'FilterDescription' => 'Text'
|
||||
];
|
||||
|
||||
/**
|
||||
* If enabled, blog author profiles will be turned off for this site
|
||||
*
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $disable_profiles = false;
|
||||
|
||||
/**
|
||||
* The current Blog Post DataList query.
|
||||
*
|
||||
* @var DataList
|
||||
*/
|
||||
protected $blogPosts;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function index(HTTPRequest $request)
|
||||
{
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
|
||||
$this->blogPosts = $dataRecord->getBlogPosts();
|
||||
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a Blog Member's profile.
|
||||
*
|
||||
* @throws HTTPResponse_Exception
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function profile()
|
||||
{
|
||||
if ($this->config()->get('disable_profiles')) {
|
||||
$this->httpError(404, 'Not Found');
|
||||
}
|
||||
|
||||
$profile = $this->getCurrentProfile();
|
||||
|
||||
if (!$profile) {
|
||||
return $this->httpError(404, 'Not Found');
|
||||
}
|
||||
|
||||
$this->blogPosts = $this->getCurrentProfilePosts();
|
||||
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Member associated with the current URL segment.
|
||||
*
|
||||
* @return null|Member
|
||||
*/
|
||||
public function getCurrentProfile()
|
||||
{
|
||||
$urlSegment = $this->request->param('URLSegment');
|
||||
if ($urlSegment) {
|
||||
$filter = URLSegmentFilter::create();
|
||||
// url encode unless it's multibyte (already pre-encoded in the database)
|
||||
// see https://github.com/silverstripe/silverstripe-cms/pull/2384
|
||||
if (!$filter->getAllowMultibyte()) {
|
||||
$urlSegment = rawurlencode($urlSegment ?? '');
|
||||
}
|
||||
|
||||
return Member::get()
|
||||
->filter('URLSegment', $urlSegment)
|
||||
->first();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get posts related to the current Member profile.
|
||||
*
|
||||
* @return null|DataList
|
||||
*/
|
||||
public function getCurrentProfilePosts()
|
||||
{
|
||||
$profile = $this->getCurrentProfile();
|
||||
|
||||
if ($profile) {
|
||||
return $profile->BlogPosts()->filter('ParentID', $this->ID);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders an archive for a specified date. This can be by year or year/month.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function archive()
|
||||
{
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
|
||||
$year = $this->getArchiveYear();
|
||||
$month = $this->getArchiveMonth();
|
||||
$day = $this->getArchiveDay();
|
||||
|
||||
if ($this->request->param('Month') && !$month) {
|
||||
$this->httpError(404, 'Not Found');
|
||||
}
|
||||
|
||||
if ($month && $this->request->param('Day') && !$day) {
|
||||
$this->httpError(404, 'Not Found');
|
||||
}
|
||||
|
||||
if ($year) {
|
||||
$this->blogPosts = $dataRecord->getArchivedBlogPosts($year, $month, $day);
|
||||
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
$this->httpError(404, 'Not Found');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the archive year from the url.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getArchiveYear()
|
||||
{
|
||||
if ($this->request->param('Year')) {
|
||||
if (preg_match('/^[0-9]{4}$/', $year = $this->request->param('Year'))) {
|
||||
return (int) $year;
|
||||
}
|
||||
} elseif ($this->request->param('Action') == 'archive') {
|
||||
return DBDatetime::now()->Year();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the archive money from the url.
|
||||
*
|
||||
* @return null|int
|
||||
*/
|
||||
public function getArchiveMonth()
|
||||
{
|
||||
$month = $this->request->param('Month');
|
||||
|
||||
if (preg_match('/^[0-9]{1,2}$/', $month ?? '')) {
|
||||
if ($month > 0 && $month < 13) {
|
||||
if (checkdate($month ?? 0, 01, $this->getArchiveYear() ?? 0)) {
|
||||
return (int) $month;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the archive day from the url.
|
||||
*
|
||||
* @return null|int
|
||||
*/
|
||||
public function getArchiveDay()
|
||||
{
|
||||
$day = $this->request->param('Day');
|
||||
|
||||
if (preg_match('/^[0-9]{1,2}$/', $day ?? '')) {
|
||||
if (checkdate($this->getArchiveMonth() ?? 0, $day ?? 0, $this->getArchiveYear() ?? 0)) {
|
||||
return (int) $day;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the blog posts for a given tag.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function tag()
|
||||
{
|
||||
$tag = $this->getCurrentTag();
|
||||
|
||||
if ($tag) {
|
||||
$this->blogPosts = $tag->BlogPosts();
|
||||
|
||||
if ($this->isRSS()) {
|
||||
return $this->rssFeed($this->blogPosts, $tag->getLink());
|
||||
} else {
|
||||
return $this->render();
|
||||
}
|
||||
}
|
||||
|
||||
$this->httpError(404, 'Not Found');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tag Getter for use in templates.
|
||||
*
|
||||
* @return null|BlogTag
|
||||
*/
|
||||
public function getCurrentTag()
|
||||
{
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
$tag = $this->request->param('Tag');
|
||||
if ($tag) {
|
||||
$filter = URLSegmentFilter::create();
|
||||
// url encode unless it's multibyte (already pre-encoded in the database)
|
||||
// see https://github.com/silverstripe/silverstripe-cms/pull/2384
|
||||
if (!$filter->getAllowMultibyte()) {
|
||||
$tag = rawurlencode($tag ?? '');
|
||||
}
|
||||
|
||||
return $dataRecord->Tags()
|
||||
->filter('URLSegment', $tag)
|
||||
->first();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the blog posts for a given category.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function category()
|
||||
{
|
||||
$category = $this->getCurrentCategory();
|
||||
|
||||
if ($category) {
|
||||
$this->blogPosts = $category->BlogPosts();
|
||||
|
||||
if ($this->isRSS()) {
|
||||
return $this->rssFeed($this->blogPosts, $category->getLink());
|
||||
}
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
$this->httpError(404, 'Not Found');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Category Getter for use in templates.
|
||||
*
|
||||
* @return null|BlogCategory
|
||||
*/
|
||||
public function getCurrentCategory()
|
||||
{
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
$category = $this->request->param('Category');
|
||||
if ($category) {
|
||||
$filter = URLSegmentFilter::create();
|
||||
// url encode unless it's multibyte (already pre-encoded in the database)
|
||||
// see https://github.com/silverstripe/silverstripe-cms/pull/2384
|
||||
if (!$filter->getAllowMultibyte()) {
|
||||
$category = rawurlencode($category ?? '');
|
||||
}
|
||||
|
||||
return $dataRecord->Categories()
|
||||
->filter('URLSegment', $category)
|
||||
->first();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the meta title for the current action.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMetaTitle()
|
||||
{
|
||||
$title = $this->data()->getTitle();
|
||||
$filter = $this->getFilterDescription();
|
||||
|
||||
if ($filter) {
|
||||
$title = sprintf('%s - %s', $title, $filter);
|
||||
}
|
||||
|
||||
$this->extend('updateMetaTitle', $title);
|
||||
|
||||
return $title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a description of the current filter.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getFilterDescription()
|
||||
{
|
||||
$items = [];
|
||||
|
||||
$list = $this->PaginatedList();
|
||||
$currentPage = $list->CurrentPage();
|
||||
|
||||
if ($currentPage > 1) {
|
||||
$items[] = _t(
|
||||
'SilverStripe\\Blog\\Model\\Blog.FILTERDESCRIPTION_PAGE',
|
||||
'Page {page}',
|
||||
null,
|
||||
[
|
||||
'page' => $currentPage
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
if ($author = $this->getCurrentProfile()) {
|
||||
$items[] = _t(
|
||||
'SilverStripe\\Blog\\Model\\Blog.FILTERDESCRIPTION_AUTHOR',
|
||||
'By {author}',
|
||||
null,
|
||||
[
|
||||
'author' => $author->Title
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
if ($tag = $this->getCurrentTag()) {
|
||||
$items[] = _t(
|
||||
'SilverStripe\\Blog\\Model\\Blog.FILTERDESCRIPTION_TAG',
|
||||
'Tagged with {tag}',
|
||||
null,
|
||||
[
|
||||
'tag' => $tag->Title
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
if ($category = $this->getCurrentCategory()) {
|
||||
$items[] = _t(
|
||||
'SilverStripe\\Blog\\Model\\Blog.FILTERDESCRIPTION_CATEGORY',
|
||||
'In category {category}',
|
||||
null,
|
||||
[
|
||||
'category' => $category->Title
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->owner->getArchiveYear()) {
|
||||
if ($this->owner->getArchiveDay()) {
|
||||
$date = $this->owner->getArchiveDate()->Nice();
|
||||
} elseif ($this->owner->getArchiveMonth()) {
|
||||
$date = $this->owner->getArchiveDate()->format('MMMM, y');
|
||||
} else {
|
||||
$date = $this->owner->getArchiveDate()->format('y');
|
||||
}
|
||||
|
||||
$items[] = _t(
|
||||
'SilverStripe\\Blog\\Model\\Blog.FILTERDESCRIPTION_DATE',
|
||||
'In {date}',
|
||||
null,
|
||||
[
|
||||
'date' => $date,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$result = '';
|
||||
|
||||
if ($items) {
|
||||
$result = implode(', ', $items);
|
||||
}
|
||||
|
||||
$this->extend('updateFilterDescription', $result);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of paginated blog posts based on the BlogPost dataList.
|
||||
*
|
||||
* @return PaginatedList
|
||||
*/
|
||||
public function PaginatedList()
|
||||
{
|
||||
$allPosts = $this->blogPosts ?: ArrayList::create();
|
||||
$posts = PaginatedList::create($allPosts);
|
||||
|
||||
// Set appropriate page size
|
||||
if ($this->PostsPerPage > 0) {
|
||||
$pageSize = $this->PostsPerPage;
|
||||
} elseif ($count = $allPosts->count()) {
|
||||
$pageSize = $count;
|
||||
} else {
|
||||
$pageSize = 99999;
|
||||
}
|
||||
$posts->setPageLength($pageSize);
|
||||
|
||||
// Set current page
|
||||
$start = max(0, (int)$this->request->getVar($posts->getPaginationGetVar()));
|
||||
$posts->setPageStart($start);
|
||||
|
||||
return $posts;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the absolute link to the next page for use in the page meta tags. This helps search engines
|
||||
* find the pagination and index all pages properly.
|
||||
*
|
||||
* @example "<% if $PaginationAbsoluteNextLink %><link rel="next" href="$PaginationAbsoluteNextLink"><% end_if %>"
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function PaginationAbsoluteNextLink()
|
||||
{
|
||||
$posts = $this->PaginatedList();
|
||||
if ($posts->NotLastPage()) {
|
||||
return Director::absoluteURL($posts->NextLink());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the absolute link to the previous page for use in the page meta tags. This helps search engines
|
||||
* find the pagination and index all pages properly.
|
||||
*
|
||||
* @example "<% if $PaginationAbsolutePrevLink %><link rel="prev" href="$PaginationAbsolutePrevLink"><% end_if %>"
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function PaginationAbsolutePrevLink()
|
||||
{
|
||||
$posts = $this->PaginatedList();
|
||||
if ($posts->NotFirstPage()) {
|
||||
return Director::absoluteURL($posts->PrevLink());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays an RSS feed of blog posts.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function rss()
|
||||
{
|
||||
/**
|
||||
* @var Blog $dataRecord
|
||||
*/
|
||||
$dataRecord = $this->dataRecord;
|
||||
|
||||
$this->blogPosts = $dataRecord->getBlogPosts();
|
||||
|
||||
return $this->rssFeed($this->blogPosts, $this->Link());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current archive date.
|
||||
*
|
||||
* @return null|DBDatetime
|
||||
*/
|
||||
public function getArchiveDate()
|
||||
{
|
||||
$year = $this->getArchiveYear();
|
||||
$month = $this->getArchiveMonth();
|
||||
$day = $this->getArchiveDay();
|
||||
|
||||
if ($year) {
|
||||
if ($month) {
|
||||
$date = sprintf('%s-%s-01', $year, $month);
|
||||
|
||||
if ($day) {
|
||||
$date = sprintf('%s-%s-%s', $year, $month, $day);
|
||||
}
|
||||
} else {
|
||||
$date = sprintf('%s-01-01', $year);
|
||||
}
|
||||
|
||||
$obj = DBDatetime::create('date');
|
||||
$obj->setValue($date);
|
||||
return $obj;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a link to the RSS feed.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRSSLink()
|
||||
{
|
||||
return $this->Link('rss');
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays an RSS feed of the given blog posts.
|
||||
*
|
||||
* @param DataList $blogPosts
|
||||
* @param string $link
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function rssFeed($blogPosts, $link)
|
||||
{
|
||||
$rss = RSSFeed::create($blogPosts, $link, $this->MetaTitle, $this->MetaDescription);
|
||||
|
||||
$this->extend('updateRss', $rss);
|
||||
|
||||
return $rss->outputToBrowser();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the $Rss sub-action for categories/tags has been set to "rss"
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isRSS()
|
||||
{
|
||||
$rss = $this->request->param('Rss');
|
||||
return (is_string($rss) && strcasecmp($rss ?? '', 'rss') == 0);
|
||||
}
|
||||
}
|
@ -1,114 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use SilverStripe\Blog\Model\BlogFilter\BlogFilterGridField;
|
||||
use SilverStripe\Core\ClassInfo;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\Tab;
|
||||
use SilverStripe\Lumberjack\Model\Lumberjack;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\Security\Permission;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
|
||||
/**
|
||||
* This class is responsible for filtering the SiteTree when necessary and also overlaps into
|
||||
* filtering only published posts.
|
||||
*
|
||||
*/
|
||||
class BlogFilter extends Lumberjack
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function stageChildren($showAll = false)
|
||||
{
|
||||
$staged = parent::stageChildren($showAll);
|
||||
|
||||
if (!$this->shouldFilter() && $this->subclassForBlog() && !Permission::check('VIEW_DRAFT_CONTENT')) {
|
||||
$stage = Versioned::get_stage();
|
||||
|
||||
if ($stage == 'Stage') {
|
||||
$stage = '';
|
||||
} elseif ($stage) {
|
||||
$stage = '_' . $stage;
|
||||
}
|
||||
|
||||
$dataQuery = $staged->dataQuery()
|
||||
->innerJoin(
|
||||
DataObject::getSchema()->tableName(BlogPost::class),
|
||||
sprintf('"BlogPost%s"."ID" = "SiteTree%s"."ID"', $stage, $stage)
|
||||
)
|
||||
->where(sprintf('"PublishDate" < \'%s\'', Convert::raw2sql(DBDatetime::now())));
|
||||
|
||||
$staged = $staged->setDataQuery($dataQuery);
|
||||
}
|
||||
|
||||
return $staged;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function subclassForBlog()
|
||||
{
|
||||
return in_array(get_class($this->owner), ClassInfo::subclassesFor(Blog::class) ?? []);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function liveChildren($showAll = false, $onlyDeletedFromStage = false)
|
||||
{
|
||||
$staged = parent::liveChildren($showAll, $onlyDeletedFromStage);
|
||||
|
||||
if (!$this->shouldFilter() && $this->isBlog() && !Permission::check('VIEW_DRAFT_CONTENT')) {
|
||||
$dataQuery = $staged->dataQuery()
|
||||
->innerJoin(
|
||||
DataObject::getSchema()->tableName(BlogPost::class),
|
||||
'"BlogPost_Live"."ID" = "SiteTree_Live"."ID"'
|
||||
)
|
||||
->where(sprintf('"PublishDate" < \'%s\'', Convert::raw2sql(DBDatetime::now())));
|
||||
|
||||
$staged = $staged->setDataQuery($dataQuery);
|
||||
}
|
||||
|
||||
return $staged;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function isBlog()
|
||||
{
|
||||
return $this->owner instanceof Blog;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
$excluded = $this->owner->getExcludedSiteTreeClassNames();
|
||||
|
||||
if (!empty($excluded)) {
|
||||
$pages = BlogPost::get()->filter([
|
||||
'ParentID' => $this->owner->ID,
|
||||
'ClassName' => $excluded
|
||||
]);
|
||||
|
||||
$gridField = BlogFilterGridField::create(
|
||||
'ChildPages',
|
||||
$this->getLumberjackTitle(),
|
||||
$pages,
|
||||
$this->getLumberjackGridFieldConfig()
|
||||
);
|
||||
|
||||
$tab = Tab::create('ChildPages', $this->getLumberjackTitle(), $gridField);
|
||||
|
||||
$fields->insertBefore('Main', $tab);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model\BlogFilter;
|
||||
|
||||
use SilverStripe\Forms\FormTransformation;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
|
||||
/**
|
||||
* Enables children of non-editable pages to be edited.
|
||||
*/
|
||||
class BlogFilterGridField extends GridField
|
||||
{
|
||||
/**
|
||||
* @param FormTransformation $transformation
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function transform(FormTransformation $transformation)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
}
|
@ -1,142 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Blog\Forms\GridField\GridFieldConfigBlogPost;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
|
||||
use SilverStripe\Forms\Tab;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\View\Parsers\URLSegmentFilter;
|
||||
use SilverStripe\View\Requirements;
|
||||
|
||||
/**
|
||||
* This class is responsible for add Blog specific behaviour to Members.
|
||||
*
|
||||
*/
|
||||
class BlogMemberExtension extends DataExtension
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'URLSegment' => 'Varchar(255)',
|
||||
'BlogProfileSummary' => 'Text'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'BlogProfileImage' => Image::class
|
||||
];
|
||||
|
||||
private static array $owns = [
|
||||
'BlogProfileImage',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $belongs_many_many = [
|
||||
'BlogPosts' => BlogPost::class
|
||||
];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
$count = 1;
|
||||
|
||||
if ($this->owner->URLSegment && !$this->owner->isChanged('FirstName') && !$this->owner->isChanged('Surname')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->owner->URLSegment = $this->generateURLSegment();
|
||||
|
||||
while (!$this->validURLSegment()) {
|
||||
$this->owner->URLSegment = preg_replace('/-[0-9]+$/', '', $this->owner->URLSegment ?? '') . '-' . $count;
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a unique URL segment based on the Member's name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function generateURLSegment()
|
||||
{
|
||||
$filter = URLSegmentFilter::create();
|
||||
$name = $this->owner->FirstName . ' ' . $this->owner->Surname;
|
||||
$urlSegment = $filter->filter($name);
|
||||
|
||||
if (!$urlSegment || $urlSegment == '-' || $urlSegment == '-1') {
|
||||
$urlSegment = 'profile-' . $this->owner->ID;
|
||||
}
|
||||
|
||||
return $urlSegment;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TRUE if this object has a URL segment value that does not conflict with any other
|
||||
* objects.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function validURLSegment()
|
||||
{
|
||||
$conflict = Member::get()->filter('URLSegment', $this->owner->URLSegment);
|
||||
|
||||
if ($this->owner->ID) {
|
||||
$conflict = $conflict->exclude('ID', $this->owner->ID);
|
||||
}
|
||||
|
||||
return $conflict->count() == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
$fields->removeByName('URLSegment');
|
||||
|
||||
// Remove the automatically-generated posts tab.
|
||||
$fields->removeFieldFromTab('Root', 'BlogPosts');
|
||||
|
||||
// Construct a better posts tab.
|
||||
Requirements::css('silverstripe/blog:client/dist/styles/main.css');
|
||||
Requirements::javascript('silverstripe/blog:client/dist/js/main.bundle.js');
|
||||
|
||||
$tab = Tab::create('BlogPosts', _t(__CLASS__ . '.TABBLOGPOSTS', 'Blog Posts'));
|
||||
|
||||
$gridField = GridField::create(
|
||||
'BlogPosts',
|
||||
_t(__CLASS__ . '.BLOGPOSTS', 'Blog Posts'),
|
||||
$this->owner->BlogPosts(),
|
||||
$gridFieldConfig = GridFieldConfigBlogPost::create()
|
||||
);
|
||||
|
||||
// Remove the "add new blog post" action from a member's profile
|
||||
$gridFieldConfig->removeComponentsByType(GridFieldAddNewButton::class);
|
||||
|
||||
$tab->Fields()->add($gridField);
|
||||
|
||||
$fields->addFieldToTab('Root', $tab);
|
||||
|
||||
// Ensure blog fields are added after defaults
|
||||
$fields->addFieldToTab(
|
||||
'Root.Main',
|
||||
TextareaField::create('BlogProfileSummary'),
|
||||
'BlogProfileImage'
|
||||
);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
@ -1,247 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\Tab;
|
||||
use SilverStripe\Forms\TabSet;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\DataList;
|
||||
use SilverStripe\ORM\ValidationResult;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\Security\Permission;
|
||||
use SilverStripe\View\Parsers\URLSegmentFilter;
|
||||
|
||||
/**
|
||||
* An object shared by BlogTag and BlogCategory.
|
||||
*
|
||||
*/
|
||||
trait BlogObject
|
||||
{
|
||||
/**
|
||||
* @param int|array|null $id Optional ID(s) for parent of this relation, if not the current record
|
||||
* @return DataList
|
||||
*/
|
||||
public function BlogPosts($id = null)
|
||||
{
|
||||
$blogPosts = parent::BlogPosts($id);
|
||||
|
||||
$this->extend('updateGetBlogPosts', $blogPosts);
|
||||
|
||||
return $blogPosts;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = TabSet::create(
|
||||
'Root',
|
||||
Tab::create(
|
||||
'Main',
|
||||
TextField::create('Title', _t(__CLASS__ . '.Title', 'Title'))
|
||||
)
|
||||
);
|
||||
|
||||
$fields = FieldList::create($fields);
|
||||
$this->extend('updateCMSFields', $fields);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* @return ValidationResult
|
||||
*/
|
||||
public function validate()
|
||||
{
|
||||
/** @var ValidationResult $validation */
|
||||
$validation = parent::validate();
|
||||
if (!$validation->isValid()) {
|
||||
return $validation;
|
||||
}
|
||||
|
||||
$blog = $this->Blog();
|
||||
if (!$blog || !$blog->exists()) {
|
||||
return $validation;
|
||||
}
|
||||
|
||||
if ($this->getDuplicatesByField('Title')->count() > 0) {
|
||||
$validation->addError($this->getDuplicateError(), self::DUPLICATE_EXCEPTION);
|
||||
}
|
||||
|
||||
return $validation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a relative link to this category.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLink()
|
||||
{
|
||||
return Controller::join_links(
|
||||
$this->Blog()->Link(),
|
||||
$this->getListUrlSegment(),
|
||||
$this->URLSegment
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canView($member = null)
|
||||
{
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if ($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return $this->Blog()->canView($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canCreate($member = null, $context = [])
|
||||
{
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if ($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
$permission = Blog::config()->grant_user_permission;
|
||||
|
||||
return Permission::checkMember($member, $permission);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canDelete($member = null)
|
||||
{
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if ($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return $this->Blog()->canDelete($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from the parent blog or can be overwritten using a DataExtension.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canEdit($member = null)
|
||||
{
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
|
||||
if ($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
return $this->Blog()->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
if ($this->exists() || empty($this->URLSegment)) {
|
||||
return $this->generateURLSegment();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a unique URLSegment from the title.
|
||||
*
|
||||
* @param int $increment
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function generateURLSegment($increment = 0)
|
||||
{
|
||||
$increment = (int) $increment;
|
||||
$filter = URLSegmentFilter::create();
|
||||
|
||||
// Setting this to on. Because of the UI flow, it would be quite a lot of work
|
||||
// to support turning this off. (ie. the add by title flow would not work).
|
||||
// If this becomes a problem we can approach it then.
|
||||
// @see https://github.com/silverstripe/silverstripe-blog/issues/376
|
||||
$filter->setAllowMultibyte(true);
|
||||
|
||||
$this->URLSegment = $filter->filter($this->Title);
|
||||
|
||||
if ($increment > 0) {
|
||||
$this->URLSegment .= '-' . $increment;
|
||||
}
|
||||
|
||||
if ($this->getDuplicatesByField('URLSegment')->count() > 0) {
|
||||
$this->generateURLSegment($increment + 1);
|
||||
}
|
||||
|
||||
return $this->URLSegment;
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks for objects o the same type and the same value by the given Field
|
||||
*
|
||||
* @param string $field E.g. URLSegment or Title
|
||||
* @return DataList
|
||||
*/
|
||||
protected function getDuplicatesByField($field)
|
||||
{
|
||||
$duplicates = DataList::create(self::class)
|
||||
->filter(
|
||||
[
|
||||
$field => $this->$field,
|
||||
'BlogID' => (int) $this->BlogID
|
||||
]
|
||||
);
|
||||
|
||||
if ($this->ID) {
|
||||
$duplicates = $duplicates->exclude('ID', $this->ID);
|
||||
}
|
||||
|
||||
return $duplicates;
|
||||
}
|
||||
|
||||
/**
|
||||
* This returns the url segment for the listing page.
|
||||
* eg. 'categories' in /my-blog/categories/category-url
|
||||
*
|
||||
* This is not editable at the moment, but a method is being used incase we want
|
||||
* to make it editable in the future. We can use this method to provide logic
|
||||
* without replacing multiple areas of the code base. We're also not being opinionated
|
||||
* about how the segment should be obtained at the moment and allowing for the
|
||||
* implementation to decide.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
abstract protected function getListUrlSegment();
|
||||
|
||||
/**
|
||||
* Returns an error message for this object when it tries to write a duplicate.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
abstract protected function getDuplicateError();
|
||||
}
|
@ -1,832 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use Page;
|
||||
use SilverStripe\AssetAdmin\Forms\UploadField;
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Forms\DatetimeField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||
use SilverStripe\Forms\ListboxField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\Forms\ToggleCompositeField;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\ORM\FieldType\DBHTMLText;
|
||||
use SilverStripe\ORM\ManyManyList;
|
||||
use SilverStripe\ORM\SS_List;
|
||||
use SilverStripe\ORM\UnsavedRelationList;
|
||||
use SilverStripe\Security\Group;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\Security\Permission;
|
||||
use SilverStripe\Security\Security;
|
||||
use SilverStripe\TagField\TagField;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
use SilverStripe\View\ArrayData;
|
||||
use SilverStripe\View\Requirements;
|
||||
|
||||
/**
|
||||
* An individual blog post.
|
||||
*
|
||||
* @method ManyManyList Categories()
|
||||
* @method ManyManyList Tags()
|
||||
* @method ManyManyList Authors()
|
||||
* @method Blog Parent()
|
||||
* @method Image FeaturedImage()
|
||||
*
|
||||
* @property string $PublishDate
|
||||
* @property string $AuthorNames
|
||||
* @property string $Summary
|
||||
* @property int $ParentID
|
||||
* @property int $FeaturedImageID
|
||||
*/
|
||||
class BlogPost extends Page
|
||||
{
|
||||
/**
|
||||
* Same as above, but for list of users that can be
|
||||
* given credit in the author field for blog posts
|
||||
* @var string|bool false or group code
|
||||
*/
|
||||
private static $restrict_authors_to_group = false;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'BlogPost';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $icon_class = 'font-icon-p-post';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'PublishDate' => 'Datetime',
|
||||
'AuthorNames' => 'Varchar(1024)',
|
||||
'Summary' => 'HTMLText'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $indexes = [
|
||||
'PublishDate' => true,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'FeaturedImage' => Image::class
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $owns = [
|
||||
'FeaturedImage',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $many_many = [
|
||||
'Categories' => BlogCategory::class,
|
||||
'Tags' => BlogTag::class,
|
||||
'Authors' => Member::class
|
||||
];
|
||||
|
||||
/**
|
||||
* The ProvideComments db column is defined in the silverstripe/comments module
|
||||
* The InheritSideBar db column is defined in the silverstripe/widgets module
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $defaults = [
|
||||
'ShowInMenus' => false,
|
||||
'InheritSideBar' => true,
|
||||
'ProvideComments' => true
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = [
|
||||
BlogPostFilter::class
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $searchable_fields = [
|
||||
'Title'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $summary_fields = [
|
||||
'Title'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $casting = [
|
||||
'Excerpt' => 'HTMLText',
|
||||
'Date' => 'DBDatetime'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $allowed_children = [];
|
||||
|
||||
/**
|
||||
* The default sorting lists BlogPosts with an empty PublishDate at the top.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private static $default_sort = '"PublishDate" IS NULL DESC, "PublishDate" DESC';
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $can_be_root = false;
|
||||
|
||||
/**
|
||||
* This will display or hide the current class from the SiteTree. This variable can be
|
||||
* configured using YAML.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
private static $show_in_sitetree = false;
|
||||
|
||||
/**
|
||||
* This helps estimate how long an article will take to read, if your target audience
|
||||
* is elderly then you should lower this value. See {@link getMinutesToRead()}
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private static $minutes_to_read_wpm = 200;
|
||||
|
||||
/**
|
||||
* Control whether the current member is added to list of authors when a post is created
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
private static $add_default_author = true;
|
||||
|
||||
/**
|
||||
* Sets the upload directory for featured images to help keep your files organised
|
||||
*
|
||||
* @config
|
||||
* @var string
|
||||
*/
|
||||
private static $featured_images_directory = null;
|
||||
|
||||
/**
|
||||
* Determine the role of the given member.
|
||||
*
|
||||
* Call be called via template to determine the current user.
|
||||
*
|
||||
* @example "Hello $RoleOf($CurrentMember.ID)"
|
||||
*
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function RoleOf($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if (!$member) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($this->isAuthor($member)) {
|
||||
return _t(__CLASS__ . '.AUTHOR', 'Author');
|
||||
}
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if ($parent instanceof Blog) {
|
||||
return $parent->RoleOf($member);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the given member is an author of this post.
|
||||
*
|
||||
* @param null|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isAuthor($member = null)
|
||||
{
|
||||
if (!$member || !$member->exists()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$list = $this->Authors();
|
||||
|
||||
if ($list instanceof UnsavedRelationList) {
|
||||
return in_array($member->ID, $list->getIDList() ?? []);
|
||||
}
|
||||
|
||||
return $list->byID($member->ID) !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
Requirements::css('silverstripe/blog:client/dist/styles/main.css');
|
||||
Requirements::javascript('silverstripe/blog:client/dist/js/main.bundle.js');
|
||||
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
$uploadField = UploadField::create('FeaturedImage', _t(__CLASS__ . '.FeaturedImage', 'Featured Image'));
|
||||
$uploadField->getValidator()->setAllowedExtensions(['jpg', 'jpeg', 'png', 'gif']);
|
||||
|
||||
$uploadDirectory = $this->config()->get('featured_images_directory');
|
||||
if ($uploadDirectory != '') {
|
||||
$uploadField->setFolderName($uploadDirectory);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->insertAfter('Content', $uploadField);
|
||||
|
||||
$summary = HtmlEditorField::create('Summary', false);
|
||||
$summary->setRows(5);
|
||||
$summary->setDescription(_t(
|
||||
__CLASS__ . '.SUMMARY_DESCRIPTION',
|
||||
'If no summary is specified the first 30 words will be used.'
|
||||
));
|
||||
|
||||
$summaryHolder = ToggleCompositeField::create(
|
||||
'CustomSummary',
|
||||
_t(__CLASS__ . '.CUSTOMSUMMARY', 'Add A Custom Summary'),
|
||||
[
|
||||
$summary,
|
||||
]
|
||||
);
|
||||
$summaryHolder->setHeadingLevel(4);
|
||||
$summaryHolder->addExtraClass('custom-summary');
|
||||
|
||||
if ($this->Summary) {
|
||||
$summaryHolder->setStartClosed(false);
|
||||
}
|
||||
|
||||
$fields->insertAfter('FeaturedImage', $summaryHolder);
|
||||
|
||||
$authorField = ListboxField::create(
|
||||
'Authors',
|
||||
_t(__CLASS__ . '.Authors', 'Authors'),
|
||||
$this->getCandidateAuthors()->map()->toArray()
|
||||
);
|
||||
|
||||
$authorNames = TextField::create(
|
||||
'AuthorNames',
|
||||
_t(__CLASS__ . '.AdditionalCredits', 'Additional Credits'),
|
||||
null,
|
||||
1024
|
||||
)->setDescription(
|
||||
_t(
|
||||
__CLASS__ . '.AdditionalCredits_Description',
|
||||
'If some authors of this post don\'t have CMS access, enter their name(s) here. '.
|
||||
'You can separate multiple names with a comma.'
|
||||
)
|
||||
);
|
||||
|
||||
if (!$this->canEditAuthors()) {
|
||||
$authorField = $authorField->performDisabledTransformation();
|
||||
$authorNames = $authorNames->performDisabledTransformation();
|
||||
}
|
||||
|
||||
$publishDate = DatetimeField::create('PublishDate', _t(__CLASS__ . '.PublishDate', 'Publish Date'));
|
||||
|
||||
if (!$this->PublishDate) {
|
||||
$publishDate->setDescription(
|
||||
_t(
|
||||
__CLASS__ . '.PublishDate_Description',
|
||||
'Will be set to "now" if published without a value.'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Get categories and tags
|
||||
$parent = $this->Parent();
|
||||
$categories = $parent instanceof Blog
|
||||
? $parent->Categories()
|
||||
: BlogCategory::get();
|
||||
$tags = $parent instanceof Blog
|
||||
? $parent->Tags()
|
||||
: BlogTag::get();
|
||||
|
||||
// @todo: Reimplement the sidebar
|
||||
// $options = BlogAdminSidebar::create(
|
||||
$fields->addFieldsToTab(
|
||||
'Root.PostOptions',
|
||||
[
|
||||
$publishDate,
|
||||
TagField::create(
|
||||
'Categories',
|
||||
_t(__CLASS__ . '.Categories', 'Categories'),
|
||||
$categories,
|
||||
$this->Categories()
|
||||
)
|
||||
->setCanCreate($this->canCreateCategories())
|
||||
->setShouldLazyLoad(true),
|
||||
TagField::create(
|
||||
'Tags',
|
||||
_t(__CLASS__ . '.Tags', 'Tags'),
|
||||
$tags,
|
||||
$this->Tags()
|
||||
)
|
||||
->setCanCreate($this->canCreateTags())
|
||||
->setShouldLazyLoad(true),
|
||||
$authorField,
|
||||
$authorNames
|
||||
]
|
||||
);
|
||||
// )->setTitle('Post Options');
|
||||
// $options->setName('blog-admin-sidebar');
|
||||
// $fields->insertBefore($options, 'Root');
|
||||
|
||||
$fields->fieldByName('Root.PostOptions')
|
||||
->setTitle(_t(__CLASS__ . '.PostOptions', 'Post Options'));
|
||||
});
|
||||
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->fieldByName('Root')->setTemplate('TabSet_holder');
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of author candidates to be assigned as authors of this blog post.
|
||||
*
|
||||
* @return SS_List
|
||||
*/
|
||||
public function getCandidateAuthors()
|
||||
{
|
||||
if ($this->config()->get('restrict_authors_to_group')) {
|
||||
return Group::get()->filter('Code', $this->config()->get('restrict_authors_to_group'))->first()->Members();
|
||||
}
|
||||
|
||||
$list = Member::get();
|
||||
$this->extend('updateCandidateAuthors', $list);
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if this user can edit the authors list.
|
||||
*
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canEditAuthors($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$extended = $this->extendedCan('canEditAuthors', $member);
|
||||
|
||||
if ($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if ($parent instanceof Blog && $parent->exists()) {
|
||||
if ($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($parent->isWriter($member) && $this->isAuthor($member)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, Blog::MANAGE_USERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return null|Member
|
||||
*/
|
||||
protected function getMember($member = null)
|
||||
{
|
||||
if (!$member) {
|
||||
$member = Security::getCurrentUser();
|
||||
}
|
||||
|
||||
if (is_numeric($member)) {
|
||||
$member = Member::get()->byID($member);
|
||||
}
|
||||
|
||||
return $member;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether user can create new categories.
|
||||
*
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreateCategories($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if (!$parent || !$parent->exists() || !($parent instanceof Blog)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, 'ADMIN');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether user can create new tags.
|
||||
*
|
||||
* @param null|int|Member $member
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreateTags($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if (!$parent || !$parent->exists() || !($parent instanceof Blog)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($parent->isWriter($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return Permission::checkMember($member, 'ADMIN');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* Update the PublishDate to now if the BlogPost would otherwise be published without a date.
|
||||
*/
|
||||
public function onBeforePublish()
|
||||
{
|
||||
/**
|
||||
* @var DBDatetime $publishDate
|
||||
*/
|
||||
$publishDate = $this->dbObject('PublishDate');
|
||||
|
||||
if (!$publishDate->getValue()) {
|
||||
$this->PublishDate = DBDatetime::now()->getValue();
|
||||
$this->write();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* Sets blog relationship on all categories and tags assigned to this post.
|
||||
*/
|
||||
public function onAfterWrite()
|
||||
{
|
||||
parent::onAfterWrite();
|
||||
|
||||
foreach ($this->Categories() as $category) {
|
||||
/**
|
||||
* @var BlogCategory $category
|
||||
*/
|
||||
$category->BlogID = $this->ParentID;
|
||||
$category->write();
|
||||
}
|
||||
|
||||
foreach ($this->Tags() as $tag) {
|
||||
/**
|
||||
* @var BlogTag $tag
|
||||
*/
|
||||
$tag->BlogID = $this->ParentID;
|
||||
$tag->write();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canView($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if (!parent::canView($member)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->canEdit($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If on draft stage, user has permission to view draft, so show it
|
||||
if (Versioned::get_stage() === Versioned::DRAFT) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @var DBDatetime $publishDate
|
||||
*/
|
||||
$publishDate = $this->dbObject('PublishDate');
|
||||
if (!$publishDate->exists()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !$publishDate->InFuture();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canPublish($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if (Permission::checkMember($member, 'ADMIN')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$extended = $this->extendedCan('canPublish', $member);
|
||||
|
||||
if ($extended !== null) {
|
||||
return $extended;
|
||||
}
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if ($parent instanceof Blog && $parent->exists()) {
|
||||
if ($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($parent->isWriter($member) && $this->isAuthor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($parent->isContributor($member)) {
|
||||
return parent::canEdit($member);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function canEdit($member = null)
|
||||
{
|
||||
$member = $this->getMember($member);
|
||||
|
||||
if (parent::canEdit($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$parent = $this->Parent();
|
||||
|
||||
if (!$parent || !$parent->exists() || !($parent instanceof Blog)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($parent->isEditor($member)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!$parent->isWriter($member) && !$parent->isContributor($member)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->isAuthor($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the post excerpt.
|
||||
*
|
||||
* @param int $wordsToDisplay
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function Excerpt($wordsToDisplay = 30)
|
||||
{
|
||||
/** @var DBHTMLText $content */
|
||||
$content = $this->dbObject('Content');
|
||||
|
||||
return $content->Summary($wordsToDisplay);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a monthly archive link for the current blog post.
|
||||
*
|
||||
* @param string $type
|
||||
* @return string
|
||||
*/
|
||||
public function getMonthlyArchiveLink($type = 'day')
|
||||
{
|
||||
/** @var DBDatetime $date */
|
||||
$date = $this->dbObject('PublishDate');
|
||||
|
||||
if ($type !== 'year') {
|
||||
if ($type === 'day') {
|
||||
return Controller::join_links(
|
||||
$this->Parent()->Link('archive'),
|
||||
$date->format('Y'),
|
||||
$date->format('M'),
|
||||
$date->format('d')
|
||||
);
|
||||
}
|
||||
|
||||
return Controller::join_links($this->Parent()->Link('archive'), $date->format('Y'), $date->format('M'));
|
||||
}
|
||||
|
||||
return Controller::join_links($this->Parent()->Link('archive'), $date->format('Y'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a yearly archive link for the current blog post.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getYearlyArchiveLink()
|
||||
{
|
||||
return $this->getMonthlyArchiveLink('year');
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves static and dynamic authors linked to this post.
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
public function getCredits()
|
||||
{
|
||||
$list = ArrayList::create();
|
||||
|
||||
$list->merge($this->getDynamicCredits());
|
||||
$list->merge($this->getStaticCredits());
|
||||
|
||||
return $list->sort('Name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves dynamic authors linked to this post.
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
protected function getDynamicCredits()
|
||||
{
|
||||
// Find best page to host user profiles
|
||||
$parent = $this->Parent();
|
||||
if (! ($parent instanceof Blog)) {
|
||||
$parent = Blog::get()->first();
|
||||
}
|
||||
|
||||
// If there is no parent blog, return list undecorated
|
||||
if (!$parent) {
|
||||
$items = $this->Authors()->toArray();
|
||||
return ArrayList::create($items);
|
||||
}
|
||||
|
||||
// Update all authors
|
||||
$items = ArrayList::create();
|
||||
foreach ($this->Authors() as $author) {
|
||||
// Add link for each author
|
||||
$author = $author->customise([
|
||||
'URL' => $parent->ProfileLink($author->URLSegment),
|
||||
]);
|
||||
$items->push($author);
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves static authors linked to this post.
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
protected function getStaticCredits()
|
||||
{
|
||||
$items = ArrayList::create();
|
||||
|
||||
$authors = array_filter(preg_split('/\s*,\s*/', $this->AuthorNames ?? '') ?? []);
|
||||
|
||||
foreach ($authors as $author) {
|
||||
$item = ArrayData::create([
|
||||
'Name' => $author,
|
||||
]);
|
||||
|
||||
$items->push($item);
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if User Profiles has been disabled via config
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getProfilesDisabled()
|
||||
{
|
||||
return Config::inst()->get(BlogController::class, 'disable_profiles');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the label for BlogPost.Title to 'Post Title' (Rather than 'Page name').
|
||||
*
|
||||
* @param bool $includeRelations
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function fieldLabels($includeRelations = true)
|
||||
{
|
||||
$labels = parent::fieldLabels($includeRelations);
|
||||
|
||||
$labels['Title'] = _t(__CLASS__ . '.PageTitleLabel', 'Post Title');
|
||||
|
||||
return $labels;
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for displaying the publish date in rss feeds.
|
||||
* @see https://github.com/silverstripe/silverstripe-blog/issues/394
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDate()
|
||||
{
|
||||
if ($this->hasDatabaseField('Date')) {
|
||||
return $this->getField('Date');
|
||||
}
|
||||
return !empty($this->PublishDate) ? $this->PublishDate : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a rough estimate of how long this post will take to read based on wikipedias answer to "How fast can a
|
||||
* human read" of 200wpm. Source https://en.wikipedia.org/wiki/Speed_reading
|
||||
*
|
||||
* @param null|integer $wpm
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function MinutesToRead($wpm = null)
|
||||
{
|
||||
$wpm = $wpm ?: $this->config()->get('minutes_to_read_wpm');
|
||||
|
||||
if (!is_numeric($wpm)) {
|
||||
throw new \InvalidArgumentException(sprintf("Expecting integer but got %s instead", gettype($wpm)));
|
||||
}
|
||||
|
||||
$wordCount = str_word_count(strip_tags($this->Content ?? ''));
|
||||
|
||||
if ($wordCount < $wpm) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return round($wordCount / $wpm, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
|
||||
if (!$this->exists() && $this->config()->get('add_default_author') && ($member = Security::getCurrentUser())) {
|
||||
$this->Authors()->add($member);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use PageController;
|
||||
|
||||
class BlogPostController extends PageController
|
||||
{
|
||||
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
|
||||
/**
|
||||
* Adds a checkbox field for featured blog posts widget.
|
||||
*/
|
||||
class BlogPostFeaturedExtension extends DataExtension
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'FeaturedInWidget' => 'Boolean',
|
||||
];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
// Add the checkbox in.
|
||||
$fields->addFieldToTab(
|
||||
'Root.PostOptions',
|
||||
CheckboxField::create('FeaturedInWidget', _t(__CLASS__ . '.FEATURED', 'Include Post in Feature Widget'))
|
||||
);
|
||||
}
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use SilverStripe\Admin\LeftAndMain;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\DataQuery;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\ORM\Queries\SQLSelect;
|
||||
use SilverStripe\Security\Permission;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
|
||||
/**
|
||||
* This is responsible for filtering only published posts to users who do not have permission to
|
||||
* view non-published posts.
|
||||
*
|
||||
*/
|
||||
class BlogPostFilter extends DataExtension
|
||||
{
|
||||
/**
|
||||
* Augment queries so that we don't fetch unpublished articles.
|
||||
*
|
||||
* @param SQLSelect $query
|
||||
* @param DataQuery $query
|
||||
*/
|
||||
public function augmentSQL(SQLSelect $query, DataQuery $dataQuery = null)
|
||||
{
|
||||
|
||||
if (Controller::has_curr() && Controller::curr() instanceof LeftAndMain) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (Versioned::get_stage() === Versioned::LIVE ||
|
||||
(
|
||||
Versioned::get_draft_site_secured() &&
|
||||
!Permission::check('VIEW_DRAFT_CONTENT')
|
||||
)
|
||||
) {
|
||||
$query->addWhere(sprintf(
|
||||
'"PublishDate" < \'%s\'',
|
||||
Convert::raw2sql(DBDatetime::now())
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* This is a fix so that when we try to fetch subclasses of BlogPost, lazy loading includes the
|
||||
* BlogPost table in its query. Leaving this table out means the default sort order column
|
||||
* PublishDate causes an error.
|
||||
*
|
||||
* @see https://github.com/silverstripe/silverstripe-framework/issues/1682
|
||||
*
|
||||
* @param SQLSelect $query
|
||||
* @param DataQuery $dataQuery
|
||||
* @param DataObject $dataObject
|
||||
*/
|
||||
public function augmentLoadLazyFields(SQLSelect &$query, DataQuery &$dataQuery = null, $dataObject)
|
||||
{
|
||||
$blogPostTable = DataObject::getSchema()->tableName(BlogPost::class);
|
||||
$dataQuery->innerJoin(
|
||||
$blogPostTable,
|
||||
'"SiteTree"."ID" = "' . $blogPostTable . '"."ID"'
|
||||
);
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use SilverStripe\Comments\Model\Comment;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\ORM\SS_List;
|
||||
use SilverStripe\Security\Member;
|
||||
|
||||
/**
|
||||
* Customise blog post to support comment notifications.
|
||||
*
|
||||
* Extends {@see BlogPost} with extensions to {@see CommentNotifiable}.
|
||||
*/
|
||||
class BlogPostNotifications extends DataExtension
|
||||
{
|
||||
/**
|
||||
* Configure whether to send notifications even for spam comments
|
||||
*
|
||||
* @config
|
||||
* @var boolean
|
||||
*/
|
||||
private static $notification_on_spam = true;
|
||||
|
||||
/**
|
||||
* Notify all authors of notifications.
|
||||
*
|
||||
* @param SS_List $list
|
||||
* @param mixed $comment
|
||||
*/
|
||||
public function updateNotificationRecipients(&$list, &$comment)
|
||||
{
|
||||
//default is notification is on regardless of spam status
|
||||
$list = $this->owner->Authors();
|
||||
|
||||
// If comment is spam and notification are set to not send on spam clear the recipient list
|
||||
if (Config::inst()->get(__CLASS__, 'notification_on_spam') == false && $comment->IsSpam) {
|
||||
$list = [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update comment to include the page title.
|
||||
*
|
||||
* @param string $subject
|
||||
* @param Comment $comment
|
||||
* @param Member|string $recipient
|
||||
*/
|
||||
public function updateNotificationSubject(&$subject, &$comment, &$recipient)
|
||||
{
|
||||
$subject = sprintf('A new comment has been posted on %s', $this->owner->Title);
|
||||
}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
use SilverStripe\ORM\DataObject;
|
||||
|
||||
/**
|
||||
* A blog tag for keyword descriptions of a blog post.
|
||||
*
|
||||
*
|
||||
* @method Blog Blog()
|
||||
*
|
||||
* @property string $Title
|
||||
* @property string $URLSegment
|
||||
* @property int $BlogID
|
||||
*/
|
||||
class BlogTag extends DataObject implements CategorisationObject
|
||||
{
|
||||
use BlogObject;
|
||||
|
||||
/**
|
||||
* Use an exception code so that attempted writes can continue on
|
||||
* duplicate errors.
|
||||
*
|
||||
* @const string
|
||||
* This must be a string because ValidationException has decided we can't use int
|
||||
*/
|
||||
const DUPLICATE_EXCEPTION = 'DUPLICATE';
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'BlogTag';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'Title' => 'Varchar(255)',
|
||||
'URLSegment' => 'Varchar(255)'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'Blog' => Blog::class
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $belongs_many_many = [
|
||||
'BlogPosts' => BlogPost::class
|
||||
];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function getListUrlSegment()
|
||||
{
|
||||
return 'tag';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function getDuplicateError()
|
||||
{
|
||||
return _t(__CLASS__ . '.Duplicate', 'A blog tag already exists with that name.');
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Model;
|
||||
|
||||
/**
|
||||
* @method ManyManyList BlogPosts
|
||||
*/
|
||||
interface CategorisationObject
|
||||
{
|
||||
|
||||
}
|
@ -1,159 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DB;
|
||||
use SilverStripe\ORM\FieldType\DBDate;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\ORM\FieldType\DBEnum;
|
||||
use SilverStripe\ORM\Queries\SQLSelect;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
use SilverStripe\View\ArrayData;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*
|
||||
* @property string $ArchiveType
|
||||
* @property int $NumberToDisplay
|
||||
*/
|
||||
class BlogArchiveWidget extends Widget
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Archive';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Archive';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays an archive list of posts.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'NumberToDisplay' => 'Int',
|
||||
'ArchiveType' => 'Enum(\'Monthly,Yearly\', \'Monthly\')',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $defaults = [
|
||||
'NumberOfMonths' => 12,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'Blog' => Blog::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'BlogArchiveWidget';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
/**
|
||||
* @var DBEnum $archiveType
|
||||
*/
|
||||
$archiveType = $this->dbObject('ArchiveType');
|
||||
|
||||
$type = $archiveType->enumValues();
|
||||
|
||||
foreach ($type as $k => $v) {
|
||||
$type[$k] = _t(__CLASS__ .'.' . ucfirst(strtolower($v ?? '')), $v);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->merge([
|
||||
DropdownField::create(
|
||||
'BlogID',
|
||||
_t(__CLASS__ . '.Blog', 'Blog'),
|
||||
Blog::get()->map()
|
||||
),
|
||||
DropdownField::create('ArchiveType', _t(__CLASS__ . '.ArchiveType', 'ArchiveType'), $type),
|
||||
NumericField::create('NumberToDisplay', _t(__CLASS__ . '.NumberToDisplay', 'No. to Display'))
|
||||
]);
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of months where blog posts are present.
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
public function getArchive()
|
||||
{
|
||||
$format = ($this->ArchiveType == 'Yearly') ? '%Y' : '%Y-%m';
|
||||
$publishDate = DB::get_conn()->formattedDatetimeClause('"PublishDate"', $format);
|
||||
$fields = [
|
||||
'PublishDate' => $publishDate,
|
||||
'Total' => "COUNT('\"PublishDate\"')"
|
||||
];
|
||||
|
||||
$stage = Versioned::get_stage();
|
||||
$suffix = ($stage === Versioned::LIVE) ? '_' . Versioned::LIVE : '';
|
||||
$query = SQLSelect::create($fields, '"BlogPost' . $suffix . '"')
|
||||
->addGroupBy($publishDate)
|
||||
->addOrderBy('"PublishDate" DESC')
|
||||
->addLeftJoin('SiteTree' . $suffix, '"SiteTree' . $suffix . '"."ID" = "BlogPost' . $suffix . '"."ID"')
|
||||
->addWhere([
|
||||
'"PublishDate" <= ?' => DBDatetime::now()->Format(DBDatetime::ISO_DATETIME),
|
||||
'"SiteTree' . $suffix . '"."ParentID"' => $this->BlogID,
|
||||
]);
|
||||
|
||||
$posts = $query->execute();
|
||||
$result = ArrayList::create();
|
||||
foreach ($posts as $post) {
|
||||
if ($this->ArchiveType == 'Yearly') {
|
||||
$year = $post['PublishDate'];
|
||||
$month = null;
|
||||
$title = $year;
|
||||
} else {
|
||||
$date = DBDate::create();
|
||||
$date->setValue(strtotime($post['PublishDate'] ?? ''));
|
||||
|
||||
$year = $date->Format('y');
|
||||
$month = $date->Format('MM');
|
||||
$title = $date->Format('MMMM y');
|
||||
}
|
||||
|
||||
$result->push(ArrayData::create([
|
||||
'Title' => $title,
|
||||
'Link' => Controller::join_links($this->Blog()->Link('archive'), $year, $month)
|
||||
]));
|
||||
}
|
||||
|
||||
$this->extend('updateGetArchive', $result);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Widgets\Model\WidgetController;
|
||||
|
||||
if (!class_exists(WidgetController::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class BlogArchiveWidgetController extends WidgetController
|
||||
{
|
||||
|
||||
}
|
@ -1,131 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\ORM\DataList;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*/
|
||||
class BlogCategoriesWidget extends Widget
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Categories';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Blog Categories';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays a list of blog categories.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'Limit' => 'Int',
|
||||
'Order' => 'Varchar',
|
||||
'Direction' => 'Varchar',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'Blog' => Blog::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'BlogCategoriesWidget';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$this->beforeUpdateCMSFields(function (FieldList $fields) {
|
||||
$fields[] = DropdownField::create(
|
||||
'BlogID',
|
||||
_t(__CLASS__ . '.Blog', 'Blog'),
|
||||
Blog::get()->map()
|
||||
);
|
||||
|
||||
$fields[] = NumericField::create(
|
||||
'Limit',
|
||||
_t(__CLASS__ . '.Limit', 'Limit'),
|
||||
0
|
||||
)
|
||||
->setDescription(
|
||||
_t(
|
||||
__CLASS__ . '.Limit_Description',
|
||||
'Limit the number of categories shown by this widget (set to 0 to show all categories).'
|
||||
)
|
||||
)
|
||||
->setMaxLength(3);
|
||||
|
||||
$fields[] = DropdownField::create(
|
||||
'Order',
|
||||
_t(__CLASS__ . '.Sort', 'Sort'),
|
||||
['Title' => 'Title', 'Created' => 'Created', 'LastEdited' => 'Updated']
|
||||
)
|
||||
->setDescription(
|
||||
_t(__CLASS__ . '.Sort_Description', 'Change the order of categories shown by this widget.')
|
||||
);
|
||||
|
||||
$fields[] = DropdownField::create(
|
||||
'Direction',
|
||||
_t(__CLASS__ . '.Direction', 'Direction'),
|
||||
['ASC' => 'Ascending', 'DESC' => 'Descending']
|
||||
)
|
||||
->setDescription(
|
||||
_t(
|
||||
__CLASS__ . '.Direction_Description',
|
||||
'Change the direction of ordering of categories shown by this widget.'
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return DataList
|
||||
*/
|
||||
public function getCategories()
|
||||
{
|
||||
$blog = $this->Blog();
|
||||
|
||||
if (!$blog) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$query = $blog->Categories();
|
||||
|
||||
if ($this->Limit) {
|
||||
$query = $query->limit(Convert::raw2sql($this->Limit));
|
||||
}
|
||||
|
||||
if ($this->Order && $this->Direction) {
|
||||
$query = $query->sort(Convert::raw2sql($this->Order), Convert::raw2sql($this->Direction));
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Widgets\Model\WidgetController;
|
||||
|
||||
if (!class_exists(WidgetController::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class BlogCategoriesWidgetController extends WidgetController
|
||||
{
|
||||
|
||||
}
|
@ -1,93 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\ORM\DataList;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*
|
||||
* @property int $NumberOfPosts
|
||||
*/
|
||||
class BlogFeaturedPostsWidget extends Widget
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Featured Posts';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Featured Posts';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays a list of featured blog posts.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'NumberOfPosts' => 'Int',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'Blog' => Blog::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'BlogFeaturedPostsWidget';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
/**
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->merge([
|
||||
DropdownField::create('BlogID', _t(__CLASS__ . '.Blog', 'Blog'), Blog::get()->map()),
|
||||
NumericField::create('NumberOfPosts', _t(__CLASS__ . '.NumberOfPosts', 'Number of Posts'))
|
||||
]);
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|DataList
|
||||
*/
|
||||
public function getPosts()
|
||||
{
|
||||
$blog = $this->Blog();
|
||||
|
||||
if ($blog) {
|
||||
return $blog->getBlogPosts()
|
||||
->filter('ID:not', Director::get_current_page()->ID)
|
||||
->filter('FeaturedInWidget', true)
|
||||
->sort('RAND()')
|
||||
->limit($this->NumberOfPosts);
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\ORM\DataList;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*
|
||||
* @property int $NumberOfPosts
|
||||
*/
|
||||
class BlogRecentPostsWidget extends Widget
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Recent Posts';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Recent Posts';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays a list of recent blog posts.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'NumberOfPosts' => 'Int',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'Blog' => Blog::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'BlogRecentPostsWidget';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
/**
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->merge([
|
||||
DropdownField::create('BlogID', _t(__CLASS__ . '.Blog', 'Blog'), Blog::get()->map()),
|
||||
NumericField::create('NumberOfPosts', _t(__CLASS__ . '.NumberOfPosts', 'Number of Posts'))
|
||||
]);
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|DataList
|
||||
*/
|
||||
public function getPosts()
|
||||
{
|
||||
$blog = $this->Blog();
|
||||
|
||||
if ($blog) {
|
||||
return $blog->getBlogPosts()
|
||||
->filter('ID:not', Director::get_current_page()->ID)
|
||||
->sort('"PublishDate" DESC')
|
||||
->limit($this->NumberOfPosts);
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Widgets\Model\WidgetController;
|
||||
|
||||
if (!class_exists(WidgetController::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class BlogRecentPostsWidgetController extends WidgetController
|
||||
{
|
||||
|
||||
}
|
@ -1,125 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\DB;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*/
|
||||
class BlogTagsCloudWidget extends Widget
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Tags Cloud';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Blog Tags Cloud';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays a tag cloud for this blog.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'Blog' => Blog::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'BlogTagsCloudWidget';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
/*
|
||||
* @var FieldList $fields
|
||||
*/
|
||||
$fields->push(
|
||||
DropdownField::create(
|
||||
'BlogID',
|
||||
_t(__CLASS__ . '.Blog', 'Blog'),
|
||||
Blog::get()->map()
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getTags()
|
||||
{
|
||||
if ($blog = $this->Blog()) {
|
||||
$escapedID = Convert::raw2sql($blog->ID);
|
||||
$sql = 'SELECT DISTINCT "BlogTag"."URLSegment","BlogTag"."Title",Count("BlogTagID") AS "TagCount"
|
||||
from "BlogPost_Tags"
|
||||
INNER JOIN "BlogPost"
|
||||
ON "BlogPost"."ID" = "BlogPost_Tags"."BlogPostID"
|
||||
INNER JOIN "BlogTag"
|
||||
ON "BlogTag"."ID" = "BlogPost_Tags"."BlogTagID"
|
||||
WHERE "BlogID" = ' . $escapedID
|
||||
. ' GROUP By "BlogTag"."URLSegment","BlogTag"."Title"
|
||||
ORDER BY "Title"';
|
||||
|
||||
$records = DB::query($sql);
|
||||
$bloglink = $blog->Link();
|
||||
$maxTagCount = 0;
|
||||
|
||||
// create DataObjects that can be used to render the tag cloud
|
||||
$tags = ArrayList::create();
|
||||
foreach ($records as $record) {
|
||||
$tag = DataObject::create();
|
||||
$tag->TagName = $record['Title'];
|
||||
$link = $bloglink.'tag/'.$record['URLSegment'];
|
||||
$tag->Link = $link;
|
||||
if ($record['TagCount'] > $maxTagCount) {
|
||||
$maxTagCount = $record['TagCount'];
|
||||
}
|
||||
$tag->TagCount = $record['TagCount'];
|
||||
$tags->push($tag);
|
||||
}
|
||||
|
||||
// normalize the tag counts from 1 to 10
|
||||
if ($maxTagCount) {
|
||||
$tagfactor = 10 / $maxTagCount;
|
||||
foreach ($tags->getIterator() as $tag) {
|
||||
$normalized = round($tagfactor * ($tag->TagCount));
|
||||
$tag->NormalizedTag = $normalized;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $tags;
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Widgets\Model\WidgetController;
|
||||
|
||||
if (!class_exists(WidgetController::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class BlogTagsCloudWidgetController extends WidgetController
|
||||
{
|
||||
}
|
@ -1,131 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\ORM\DataList;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method Blog Blog()
|
||||
*/
|
||||
class BlogTagsWidget extends Widget
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $title = 'Tags';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $cmsTitle = 'Blog Tags';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Displays a list of blog tags.';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $db = [
|
||||
'Limit' => 'Int',
|
||||
'Order' => 'Varchar',
|
||||
'Direction' => 'Varchar',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = [
|
||||
'Blog' => Blog::class
|
||||
];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $table_name = 'BlogTagsWidget';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$this->beforeUpdateCMSFields(function (Fieldlist $fields) {
|
||||
$fields[] = DropdownField::create(
|
||||
'BlogID',
|
||||
_t(__CLASS__ . '.Blog', 'Blog'),
|
||||
Blog::get()->map()
|
||||
);
|
||||
|
||||
$fields[] = NumericField::create(
|
||||
'Limit',
|
||||
_t(__CLASS__ . '.Limit', 'Limit'),
|
||||
0
|
||||
)
|
||||
->setDescription(
|
||||
_t(
|
||||
__CLASS__ . '.Limit_Description',
|
||||
'Limit the number of tags shown by this widget (set to 0 to show all tags).'
|
||||
)
|
||||
)
|
||||
->setMaxLength(3);
|
||||
|
||||
$fields[] = DropdownField::create(
|
||||
'Order',
|
||||
_t(__CLASS__ . '.Sort', 'Sort'),
|
||||
['Title' => 'Title', 'Created' => 'Created', 'LastEdited' => 'Updated']
|
||||
)
|
||||
->setDescription(
|
||||
_t(__CLASS__ . '.Sort_Description', 'Change the order of tags shown by this widget.')
|
||||
);
|
||||
|
||||
$fields[] = DropdownField::create(
|
||||
'Direction',
|
||||
_t(__CLASS__ . '.Direction', 'Direction'),
|
||||
['ASC' => 'Ascending', 'DESC' => 'Descending']
|
||||
)
|
||||
->setDescription(
|
||||
_t(
|
||||
__CLASS__ . '.Direction_Description',
|
||||
'Change the direction of ordering of tags shown by this widget.'
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return DataList
|
||||
*/
|
||||
public function getTags()
|
||||
{
|
||||
$blog = $this->Blog();
|
||||
|
||||
if (!$blog) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$query = $blog->Tags();
|
||||
|
||||
if ($this->Limit) {
|
||||
$query = $query->limit(Convert::raw2sql($this->Limit));
|
||||
}
|
||||
|
||||
if ($this->Order && $this->Direction) {
|
||||
$query = $query->sort(Convert::raw2sql($this->Order), Convert::raw2sql($this->Direction));
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Widgets;
|
||||
|
||||
use SilverStripe\Widgets\Model\WidgetController;
|
||||
|
||||
if (!class_exists(WidgetController::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class BlogTagsWidgetController extends WidgetController
|
||||
{
|
||||
|
||||
}
|
20
templates/BlogAdminSidebar_holder.ss
Normal file
@ -0,0 +1,20 @@
|
||||
<div class="cms-content-tools east cms-panel cms-panel-layout blog-admin-sidebar<% if $isOpen %> open<% end_if %>"
|
||||
data-expandOnClick="true"
|
||||
data-layout-type="border"
|
||||
id="blog-admin-sidebar">
|
||||
<div class="cms-panel-content center">
|
||||
<div class="cms-content-view cms-tree-view-sidebar" id="blog-admin-content">
|
||||
<h3 class="cms-panel-header">$Title</h3>
|
||||
<% loop $Children %>
|
||||
$FieldHolder
|
||||
<% end_loop %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cms-panel-content-collapsed">
|
||||
<h3 class="cms-panel-header">$Title</h3>
|
||||
</div>
|
||||
<div class="cms-panel-toggle south">
|
||||
<a class="toggle-expand" href="#"><span>«</span></a>
|
||||
<a class="toggle-collapse" href="#"><span>»</span></a>
|
||||
</div>
|
||||
</div>
|
5
templates/GridFieldAddByDBField.ss
Normal file
@ -0,0 +1,5 @@
|
||||
<div class="add-existing-autocompleter">
|
||||
<% loop $Fields %>
|
||||
<span>$Field</span>
|
||||
<% end_loop %>
|
||||
</div>
|
5
templates/Includes/BlogSideBar.ss
Normal file
@ -0,0 +1,5 @@
|
||||
<% if $SideBarView %>
|
||||
<div class="blog-sidebar typography unit size1of4 lastUnit">
|
||||
$SideBarView
|
||||
</div>
|
||||
<% end_if %>
|
31
templates/Includes/EntryMeta.ss
Normal file
@ -0,0 +1,31 @@
|
||||
<p class="blog-post-meta">
|
||||
<% if $Categories.exists %>
|
||||
<%t Blog.PostedIn "Posted in" %>
|
||||
<% loop $Categories %>
|
||||
<a href="$Link" title="$Title">$Title</a><% if not Last %>, <% else %>;<% end_if %>
|
||||
<% end_loop %>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Tags.exists %>
|
||||
<%t Blog.Tagged "Tagged" %>
|
||||
<% loop $Tags %>
|
||||
<a href="$Link" title="$Title">$Title</a><% if not Last %>, <% else %>;<% end_if %>
|
||||
<% end_loop %>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Comments.exists %>
|
||||
<a href="{$Link}#comments-holder">
|
||||
<%t Blog.Comments "Comments" %>
|
||||
$Comments.count
|
||||
</a>;
|
||||
<% end_if %>
|
||||
|
||||
<%t Blog.Posted "Posted" %>
|
||||
<a href="$MonthlyArchiveLink">$PublishDate.ago</a>
|
||||
|
||||
<% if $Credits %>
|
||||
<%t Blog.By "by" %>
|
||||
<% loop $Credits %><% if not $First && not $Last %>, <% end_if %><% if not $First && $Last %> and <% end_if %><% if $URLSegment %><a href="$URL">$Name.XML</a><% else %>$Name.XML<% end_if %><% end_loop %>
|
||||
<% end_if %>
|
||||
|
||||
</p>
|
13
templates/Includes/MemberDetails.ss
Normal file
@ -0,0 +1,13 @@
|
||||
<section>
|
||||
<h1>$CurrentProfile.FirstName $CurrentProfile.Surname</h1>
|
||||
<div>
|
||||
<% if $CurrentProfile.BlogProfileImage %>
|
||||
<div class="profile-image">
|
||||
$CurrentProfile.BlogProfileImage.setWidth(180)
|
||||
</div>
|
||||
<% end_if %>
|
||||
<div class="profile-summary">
|
||||
<p>$CurrentProfile.BlogProfileSummary</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
25
templates/Includes/Pagination.ss
Normal file
@ -0,0 +1,25 @@
|
||||
<%-- NOTE: Before including this, you will need to wrap the include in a with block --%>
|
||||
|
||||
<% if $MoreThanOnePage %>
|
||||
<p class="pagination">
|
||||
<% if $NotFirstPage %>
|
||||
<a class="prev" href="{$PrevLink}">←</a>
|
||||
<% end_if %>
|
||||
|
||||
<% loop $Pages %>
|
||||
<% if $CurrentBool %>
|
||||
<span>$PageNum</span>
|
||||
<% else %>
|
||||
<% if $Link %>
|
||||
<a href="$Link">$PageNum</a>
|
||||
<% else %>
|
||||
<span>...</span>
|
||||
<% end_if %>
|
||||
<% end_if %>
|
||||
<% end_loop %>
|
||||
|
||||
<% if $NotLastPage %>
|
||||
<a class="next" href="{$NextLink}">→</a>
|
||||
<% end_if %>
|
||||
</p>
|
||||
<% end_if %>
|
26
templates/Includes/PostSummary.ss
Normal file
@ -0,0 +1,26 @@
|
||||
<div class="post-summary">
|
||||
<h2>
|
||||
<a href="$Link" title="<%t Blog.ReadMoreAbout "Read more about '{title}'..." title=$Title %>">
|
||||
<% if $MenuTitle %>$MenuTitle
|
||||
<% else %>$Title<% end_if %>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
<p class="post-image">
|
||||
<a href="$Link" <%t Blog.ReadMoreAbout "Read more about '{title}'..." title=$Title %>>
|
||||
$FeaturedImage.setWidth(795)
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<% if $Summary %>
|
||||
<p>$Summary
|
||||
<% else %>
|
||||
<p>$Excerpt
|
||||
<% end_if %>
|
||||
<a href="$Link">
|
||||
<%t Blog.ReadMoreAbout "Read more about '{title}'..." title=$Title %>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<% include EntryMeta %>
|
||||
</div>
|
44
templates/Layout/Blog.ss
Normal file
@ -0,0 +1,44 @@
|
||||
<% require themedCSS('blog', 'blog') %>
|
||||
|
||||
<div class="blog-entry content-container <% if $SideBarView %>unit size3of4<% end_if %>">
|
||||
|
||||
<article>
|
||||
<h1>
|
||||
<% if $ArchiveYear %>
|
||||
<%t Blog.Archive "Archive" %>:
|
||||
<% if $ArchiveDay %>
|
||||
$ArchiveDate.Nice
|
||||
<% else_if $ArchiveMonth %>
|
||||
$ArchiveDate.format("F, Y")
|
||||
<% else %>
|
||||
$ArchiveDate.format("Y")
|
||||
<% end_if %>
|
||||
<% else_if $CurrentTag %>
|
||||
<%t Blog.Tag "Tag" %>: $CurrentTag.Title
|
||||
<% else_if $CurrentCategory %>
|
||||
<%t Blog.Category "Category" %>: $CurrentCategory.Title
|
||||
<% else %>
|
||||
$Title
|
||||
<% end_if %>
|
||||
</h1>
|
||||
|
||||
<div class="content">$Content</div>
|
||||
|
||||
<% if $PaginatedList.Exists %>
|
||||
<% loop $PaginatedList %>
|
||||
<% include PostSummary %>
|
||||
<% end_loop %>
|
||||
<% else %>
|
||||
<p><%t Blog.NoPosts "There are no posts" %></p>
|
||||
<% end_if %>
|
||||
</article>
|
||||
|
||||
$Form
|
||||
$CommentsForm
|
||||
|
||||
<% with $PaginatedList %>
|
||||
<% include Pagination %>
|
||||
<% end_with %>
|
||||
</div>
|
||||
|
||||
<% include BlogSideBar %>
|
20
templates/Layout/BlogPost.ss
Normal file
@ -0,0 +1,20 @@
|
||||
<% require themedCSS('blog', 'blog') %>
|
||||
|
||||
<div class="blog-entry content-container <% if $SideBarView %>unit size3of4<% end_if %>">
|
||||
<article>
|
||||
<h1>$Title</h1>
|
||||
|
||||
<% if $FeaturedImage %>
|
||||
<p class="post-image">$FeaturedImage.setWidth(795)</p>
|
||||
<% end_if %>
|
||||
|
||||
<div class="content">$Content</div>
|
||||
|
||||
<% include EntryMeta %>
|
||||
</article>
|
||||
|
||||
$Form
|
||||
$CommentsForm
|
||||
</div>
|
||||
|
||||
<% include BlogSideBar %>
|
23
templates/Layout/Blog_profile.ss
Normal file
@ -0,0 +1,23 @@
|
||||
<% require themedCSS('blog', 'blog') %>
|
||||
|
||||
<div class="blog-entry content-container <% if $SideBarView %>unit size3of4<% end_if %>">
|
||||
|
||||
<% include MemberDetails %>
|
||||
|
||||
<% if $PaginatedList.Exists %>
|
||||
<h2>Posts by $CurrentProfile.FirstName $CurrentProfile.Surname for $Title:</h2>
|
||||
<% loop $PaginatedList %>
|
||||
<% include PostSummary %>
|
||||
<% end_loop %>
|
||||
<% end_if %>
|
||||
|
||||
$Form
|
||||
$CommentsForm
|
||||
|
||||
<% with $PaginatedList %>
|
||||
<% include Pagination %>
|
||||
<% end_with %>
|
||||
|
||||
</div>
|
||||
|
||||
<% include BlogSideBar %>
|
@ -1,20 +0,0 @@
|
||||
<div class="cms-content-tools east cms-panel cms-panel-layout blog-admin-sidebar<% if $isOpen %> open<% end_if %>"
|
||||
data-expandOnClick="true"
|
||||
data-layout-type="border"
|
||||
id="blog-admin-sidebar">
|
||||
<div class="cms-panel-content center">
|
||||
<div class="cms-content-view cms-tree-view-sidebar" id="blog-admin-content">
|
||||
<h3 class="cms-panel-header">$Title</h3>
|
||||
<% loop $Children %>
|
||||
$FieldHolder
|
||||
<% end_loop %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cms-panel-content-collapsed">
|
||||
<h3 class="cms-panel-header">$Title</h3>
|
||||
</div>
|
||||
<div class="cms-panel-toggle south">
|
||||
<a class="toggle-expand" href="#"><span>«</span></a>
|
||||
<a class="toggle-collapse" href="#"><span>»</span></a>
|
||||
</div>
|
||||
</div>
|
@ -1,13 +0,0 @@
|
||||
<div class="add-existing-autocompleter">
|
||||
<div class="input-group">
|
||||
<% loop $Fields %>
|
||||
<% if $Type == 'action' %>
|
||||
<div class="input-group-append">
|
||||
$Field
|
||||
</div>
|
||||
<% else %>
|
||||
$Field
|
||||
<% end_if %>
|
||||
<% end_loop %>
|
||||
</div>
|
||||
</div>
|
@ -1,5 +0,0 @@
|
||||
<% if $SideBarView %>
|
||||
<div class="blog-sidebar typography unit size1of4 lastUnit">
|
||||
$SideBarView
|
||||
</div>
|
||||
<% end_if %>
|
@ -1,45 +0,0 @@
|
||||
<p class="blog-post-meta">
|
||||
<% if $Categories.exists %>
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.PostedIn "Posted in" %>
|
||||
<% loop $Categories %>
|
||||
<a href="$Link" title="$Title">$Title</a><% if not $IsLast %>, <% else %>;<% end_if %>
|
||||
<% end_loop %>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Tags.exists %>
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.Tagged "Tagged" %>
|
||||
<% loop $Tags %>
|
||||
<a href="$Link" title="$Title">$Title</a><% if not $IsLast %>, <% else %>;<% end_if %>
|
||||
<% end_loop %>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Comments.exists %>
|
||||
<a href="{$Link}#comments-holder">
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.Comments "Comments" %>
|
||||
$Comments.count
|
||||
</a>;
|
||||
<% end_if %>
|
||||
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.Posted "Posted" %>
|
||||
<a href="$MonthlyArchiveLink">$PublishDate.ago</a>
|
||||
|
||||
<% if $Credits %>
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.By "by" %>
|
||||
|
||||
<% loop $Credits %>
|
||||
<% if not $IsFirst && not $IsLast %>, <% end_if %>
|
||||
<% if not $IsFirst && $IsLast %> <%t SilverStripe\\Blog\\Model\\Blog.AND "and" %> <% end_if %>
|
||||
<% if $URLSegment && not $Up.ProfilesDisabled %>
|
||||
<a href="$URL">$Name.XML</a>
|
||||
<% else %>
|
||||
$Name.XML
|
||||
<% end_if %>
|
||||
<% end_loop %>
|
||||
<% end_if %>
|
||||
|
||||
<% if $MinutesToRead < 1 %>
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.LessThanAMinuteToRead "Less than a minute to read" %>
|
||||
<% else %>
|
||||
$MinutesToRead <%t SilverStripe\\Blog\\Model\\Blog.MinutesToRead "Minute(s) to read" %>
|
||||
<% end_if %>
|
||||
</p>
|
@ -1,13 +0,0 @@
|
||||
<section>
|
||||
<h1>$CurrentProfile.FirstName $CurrentProfile.Surname</h1>
|
||||
<div>
|
||||
<% if $CurrentProfile.BlogProfileImage %>
|
||||
<div class="profile-image">
|
||||
$CurrentProfile.BlogProfileImage.ScaleWidth(180)
|
||||
</div>
|
||||
<% end_if %>
|
||||
<div class="profile-summary">
|
||||
<p>$CurrentProfile.BlogProfileSummary</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@ -1,25 +0,0 @@
|
||||
<%-- NOTE: Before including this, you will need to wrap the include in a with block --%>
|
||||
|
||||
<% if $MoreThanOnePage %>
|
||||
<p class="pagination">
|
||||
<% if $NotFirstPage %>
|
||||
<a class="prev" href="{$PrevLink}">←</a>
|
||||
<% end_if %>
|
||||
|
||||
<% loop $PaginationSummary(4) %>
|
||||
<% if $CurrentBool %>
|
||||
<span>$PageNum</span>
|
||||
<% else %>
|
||||
<% if $Link %>
|
||||
<a href="$Link">$PageNum</a>
|
||||
<% else %>
|
||||
<span>...</span>
|
||||
<% end_if %>
|
||||
<% end_if %>
|
||||
<% end_loop %>
|
||||
|
||||
<% if $NotLastPage %>
|
||||
<a class="next" href="{$NextLink}">→</a>
|
||||
<% end_if %>
|
||||
</p>
|
||||
<% end_if %>
|
@ -1,27 +0,0 @@
|
||||
<div class="post-summary">
|
||||
<h2>
|
||||
<a href="$Link" title="<%t SilverStripe\\Blog\\Model\\Blog.ReadMoreAbout "Read more about '{title}'..." title=$Title %>">
|
||||
<% if $MenuTitle %>$MenuTitle
|
||||
<% else %>$Title<% end_if %>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
<p class="post-image">
|
||||
<a href="$Link" title="<%t SilverStripe\\Blog\\Model\\Blog.ReadMoreAbout "Read more about '{title}'..." title=$Title %>">
|
||||
$FeaturedImage.ScaleWidth(795)
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<% if $Summary %>
|
||||
$Summary
|
||||
<% else %>
|
||||
<p>$Excerpt</p>
|
||||
<% end_if %>
|
||||
<p>
|
||||
<a href="$Link">
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.ReadMoreAbout "Read more about '{title}'..." title=$Title %>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<% include SilverStripe\\Blog\\EntryMeta %>
|
||||
</div>
|
@ -1,44 +0,0 @@
|
||||
<% require css('silverstripe/blog: client/dist/styles/main.css') %>
|
||||
|
||||
<div class="blog-entry content-container <% if $SideBarView %>unit size3of4<% end_if %>">
|
||||
|
||||
<article>
|
||||
<h1>
|
||||
<% if $ArchiveYear %>
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.Archive 'Archive' %>:
|
||||
<% if $ArchiveDay %>
|
||||
$ArchiveDate.Nice
|
||||
<% else_if $ArchiveMonth %>
|
||||
$ArchiveDate.format('MMMM, y')
|
||||
<% else %>
|
||||
$ArchiveDate.format('y')
|
||||
<% end_if %>
|
||||
<% else_if $CurrentTag %>
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.Tag 'Tag' %>: $CurrentTag.Title
|
||||
<% else_if $CurrentCategory %>
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.Category 'Category' %>: $CurrentCategory.Title
|
||||
<% else %>
|
||||
$Title
|
||||
<% end_if %>
|
||||
</h1>
|
||||
|
||||
<div class="content">$Content</div>
|
||||
|
||||
<% if $PaginatedList.Exists %>
|
||||
<% loop $PaginatedList %>
|
||||
<% include SilverStripe\\Blog\\PostSummary %>
|
||||
<% end_loop %>
|
||||
<% else %>
|
||||
<p><%t SilverStripe\\Blog\\Model\\Blog.NoPosts 'There are no posts' %></p>
|
||||
<% end_if %>
|
||||
</article>
|
||||
|
||||
$Form
|
||||
$CommentsForm
|
||||
|
||||
<% with $PaginatedList %>
|
||||
<% include SilverStripe\\Blog\\Pagination %>
|
||||
<% end_with %>
|
||||
</div>
|
||||
|
||||
<% include SilverStripe\\Blog\\BlogSideBar %>
|
@ -1,20 +0,0 @@
|
||||
<% require css('silverstripe/blog: client/dist/styles/main.css') %>
|
||||
|
||||
<div class="blog-entry content-container <% if $SideBarView %>unit size3of4<% end_if %>">
|
||||
<article>
|
||||
<h1>$Title</h1>
|
||||
|
||||
<% if $FeaturedImage %>
|
||||
<p class="post-image">$FeaturedImage.ScaleWidth(795)</p>
|
||||
<% end_if %>
|
||||
|
||||
<div class="content">$Content</div>
|
||||
|
||||
<% include SilverStripe\\Blog\\EntryMeta %>
|
||||
</article>
|
||||
|
||||
$Form
|
||||
$CommentsForm
|
||||
</div>
|
||||
|
||||
<% include SilverStripe\\Blog\\BlogSideBar %>
|
@ -1,23 +0,0 @@
|
||||
<% require css('silverstripe/blog: client/dist/styles/main.css') %>
|
||||
|
||||
<div class="blog-entry content-container <% if $SideBarView %>unit size3of4<% end_if %>">
|
||||
|
||||
<% include SilverStripe\\Blog\\MemberDetails %>
|
||||
|
||||
<% if $PaginatedList.Exists %>
|
||||
<h2><%t SilverStripe\\Blog\\Model\\Blog.PostsByUser 'Posts by {firstname} {surname} for {title}' firstname=$CurrentProfile.FirstName surname=$CurrentProfile.Surname title=$Title %></h2>
|
||||
<% loop $PaginatedList %>
|
||||
<% include SilverStripe\\Blog\\PostSummary %>
|
||||
<% end_loop %>
|
||||
<% end_if %>
|
||||
|
||||
$Form
|
||||
$CommentsForm
|
||||
|
||||
<% with $PaginatedList %>
|
||||
<% include SilverStripe\\Blog\\Pagination %>
|
||||
<% end_with %>
|
||||
|
||||
</div>
|
||||
|
||||
<% include SilverStripe\\Blog\\BlogSideBar %>
|
@ -1,12 +0,0 @@
|
||||
<% if $Posts %>
|
||||
<ul>
|
||||
<% loop $Posts %>
|
||||
<li>
|
||||
<a href="$Link" title="$Title">
|
||||
<span class="arrow">→</span>
|
||||
<span class="text">$Title</span>
|
||||
</a>
|
||||
</li>
|
||||
<% end_loop %>
|
||||
</ul>
|
||||
<% end_if %>
|
@ -1,12 +0,0 @@
|
||||
<% if $Tags %>
|
||||
<ul class="blogTagCloud">
|
||||
<% loop $Tags %>
|
||||
<li>
|
||||
<a href="$Link" title="$TagName">
|
||||
<span class="text tagCount{$NormalizedTag}">$TagName</span>
|
||||
</a>
|
||||
</li>
|
||||
<% end_loop %>
|
||||
</ul>
|
||||
<div style="clear: both;"></div>
|
||||
<% end_if %>
|
@ -1,4 +1,4 @@
|
||||
<nav class="secondary">
|
||||
<% if $Title %><h3>$Title</h3><% end_if %>
|
||||
$Content
|
||||
<h3>$Title</h3>
|
||||
$Content
|
||||
</nav>
|
118
tests/BlogCategoryTest.php
Executable file
@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @mixin PHPUnit_Framework_TestCase
|
||||
*/
|
||||
class BlogCategoryTest extends FunctionalTest {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
static $fixture_file = 'blog.yml';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
SS_Datetime::set_mock_now('2013-10-10 20:00:00');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function tearDown() {
|
||||
SS_Datetime::clear_mock_now();
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that any blog posts returned from $category->BlogPosts() many_many are published,
|
||||
* both by normal 'save & publish' functionality and by publish date.
|
||||
*/
|
||||
public function testBlogPosts() {
|
||||
$member = Member::currentUser();
|
||||
|
||||
if($member) {
|
||||
$member->logout();
|
||||
}
|
||||
|
||||
$this->objFromFixture('BlogPost', 'FirstBlogPost');
|
||||
|
||||
/**
|
||||
* @var BlogCategory $category
|
||||
*/
|
||||
$category = $this->objFromFixture('BlogCategory', 'FirstCategory');
|
||||
|
||||
$this->assertEquals(1, $category->BlogPosts()->count(), 'Category blog post count');
|
||||
}
|
||||
|
||||
public function testCanView() {
|
||||
$this->useDraftSite();
|
||||
|
||||
$this->objFromFixture('Member', 'Admin');
|
||||
|
||||
$editor = $this->objFromFixture('Member', 'Editor');
|
||||
$category = $this->objFromFixture('BlogCategory', 'SecondCategory');
|
||||
|
||||
$this->assertFalse($category->canView($editor), 'Editor should not be able to view category.');
|
||||
}
|
||||
|
||||
/**
|
||||
* The first blog can be viewed by anybody.
|
||||
*/
|
||||
public function testCanEdit() {
|
||||
$this->useDraftSite();
|
||||
|
||||
$admin = $this->objFromFixture('Member', 'Admin');
|
||||
$editor = $this->objFromFixture('Member', 'Editor');
|
||||
|
||||
$category = $this->objFromFixture('BlogCategory', 'FirstCategory');
|
||||
|
||||
$this->assertTrue($category->canEdit($admin), 'Admin should be able to edit category.');
|
||||
$this->assertTrue($category->canEdit($editor), 'Editor should be able to edit category.');
|
||||
|
||||
$category = $this->objFromFixture('BlogCategory', 'SecondCategory');
|
||||
|
||||
$this->assertTrue($category->canEdit($admin), 'Admin should be able to edit category.');
|
||||
$this->assertFalse($category->canEdit($editor), 'Editor should not be able to edit category.');
|
||||
|
||||
$category = $this->objFromFixture('BlogCategory', 'ThirdCategory');
|
||||
|
||||
$this->assertTrue($category->canEdit($admin), 'Admin should always be able to edit category.');
|
||||
$this->assertTrue($category->canEdit($editor), 'Editor should be able to edit category.');
|
||||
}
|
||||
|
||||
public function testCanCreate() {
|
||||
$this->useDraftSite();
|
||||
|
||||
$admin = $this->objFromFixture('Member', 'Admin');
|
||||
$editor = $this->objFromFixture('Member', 'Editor');
|
||||
|
||||
$category = singleton('BlogCategory');
|
||||
|
||||
$this->assertTrue($category->canCreate($admin), 'Admin should be able to create category.');
|
||||
$this->assertTrue($category->canCreate($editor), 'Editor should be able to create category.');
|
||||
}
|
||||
|
||||
public function testCanDelete() {
|
||||
$this->useDraftSite();
|
||||
|
||||
$admin = $this->objFromFixture('Member', 'Admin');
|
||||
$editor = $this->objFromFixture('Member', 'Editor');
|
||||
|
||||
$category = $this->objFromFixture('BlogCategory', 'FirstCategory');
|
||||
|
||||
$this->assertTrue($category->canDelete($admin), 'Admin should be able to delete category.');
|
||||
$this->assertTrue($category->canDelete($editor), 'Editor should be able to category category.');
|
||||
|
||||
$category = $this->objFromFixture('BlogCategory', 'SecondCategory');
|
||||
$this->assertTrue($category->canDelete($admin), 'Admin should be able to delete category.');
|
||||
$this->assertFalse($category->canDelete($editor), 'Editor should not be able to delete category.');
|
||||
|
||||
$category = $this->objFromFixture('BlogCategory', 'ThirdCategory');
|
||||
$this->assertTrue($category->canDelete($admin), 'Admin should always be able to delete category.');
|
||||
$this->assertTrue($category->canDelete($editor), 'Editor should be able to delete category.');
|
||||
}
|
||||
}
|
42
tests/BlogPostFilterTest.php
Executable file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @mixin PHPUnit_Framework_TestCase
|
||||
*/
|
||||
class BlogPostFilterTest extends SapphireTest {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
static $fixture_file = 'blog.yml';
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
SS_Datetime::set_mock_now('2013-10-10 20:00:00');
|
||||
}
|
||||
|
||||
public function tearDown() {
|
||||
SS_Datetime::clear_mock_now();
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
public function testFilter() {
|
||||
$member = Member::currentUser();
|
||||
|
||||
if($member) {
|
||||
$member->logout();
|
||||
}
|
||||
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture('Blog', 'FirstBlog');
|
||||
|
||||
$this->assertEquals(3, $blog->AllChildren()->Count(), 'Filtered blog posts');
|
||||
|
||||
SS_Datetime::set_mock_now('2020-01-01 00:00:00');
|
||||
|
||||
$this->assertEquals(5, $blog->AllChildren()->Count(), 'Unfiltered blog posts');
|
||||
}
|
||||
}
|
66
tests/BlogPostTest.php
Normal file
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
class BlogPostTest extends SapphireTest {
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
static $fixture_file = 'blog.yml';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function tearDown() {
|
||||
SS_Datetime::clear_mock_now();
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider canViewProvider
|
||||
*/
|
||||
public function testCanView($date, $user, $page, $canView) {
|
||||
$userRecord = $this->objFromFixture('Member', $user);
|
||||
$pageRecord = $this->objFromFixture('BlogPost', $page);
|
||||
SS_Datetime::set_mock_now($date);
|
||||
$this->assertEquals($canView, $pageRecord->canView($userRecord));
|
||||
}
|
||||
|
||||
public function canViewProvider() {
|
||||
$someFutureDate = '2013-10-10 20:00:00';
|
||||
$somePastDate = '2009-10-10 20:00:00';
|
||||
return array(
|
||||
// Check this post given the date has passed
|
||||
array($someFutureDate, 'Editor', 'PostA', true),
|
||||
array($someFutureDate, 'Contributor', 'PostA', true),
|
||||
array($someFutureDate, 'BlogEditor', 'PostA', true),
|
||||
array($someFutureDate, 'Writer', 'PostA', true),
|
||||
|
||||
// Check unpublished pages
|
||||
array($somePastDate, 'Editor', 'PostA', true),
|
||||
array($somePastDate, 'Contributor', 'PostA', true),
|
||||
array($somePastDate, 'BlogEditor', 'PostA', true),
|
||||
array($somePastDate, 'Writer', 'PostA', true),
|
||||
|
||||
// Test a page that was authored by another user
|
||||
|
||||
// Check this post given the date has passed
|
||||
array($someFutureDate, 'Editor', 'FirstBlogPost', true),
|
||||
array($someFutureDate, 'Contributor', 'FirstBlogPost', true),
|
||||
array($someFutureDate, 'BlogEditor', 'FirstBlogPost', true),
|
||||
array($someFutureDate, 'Writer', 'FirstBlogPost', true),
|
||||
|
||||
// Check future pages - non-editors shouldn't be able to see this
|
||||
array($somePastDate, 'Editor', 'FirstBlogPost', true),
|
||||
array($somePastDate, 'Contributor', 'FirstBlogPost', false),
|
||||
array($somePastDate, 'BlogEditor', 'FirstBlogPost', false),
|
||||
array($somePastDate, 'Writer', 'FirstBlogPost', false),
|
||||
);
|
||||
}
|
||||
}
|
126
tests/BlogTagTest.php
Executable file
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @mixin PHPUnit_Framework_TestCase
|
||||
*/
|
||||
class BlogTagTest extends FunctionalTest {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
static $fixture_file = 'blog.yml';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
SS_Datetime::set_mock_now('2013-10-10 20:00:00');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function tearDown() {
|
||||
SS_Datetime::clear_mock_now();
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that any blog posts returned from $tag->BlogPosts() many_many are published, both by
|
||||
* normal 'save & publish' functionality and by publish date.
|
||||
*/
|
||||
public function testBlogPosts() {
|
||||
$member = Member::currentUser();
|
||||
|
||||
if($member) {
|
||||
$member->logout();
|
||||
}
|
||||
|
||||
$this->objFromFixture('BlogPost', 'FirstBlogPost');
|
||||
|
||||
/**
|
||||
* @var BlogTag $tag
|
||||
*/
|
||||
$tag = $this->objFromFixture('BlogTag', 'FirstTag');
|
||||
|
||||
$this->assertEquals(1, $tag->BlogPosts()->count(), 'Tag blog post count');
|
||||
}
|
||||
|
||||
/**
|
||||
* The first blog can be viewed by anybody.
|
||||
*/
|
||||
public function testCanView() {
|
||||
$this->useDraftSite();
|
||||
|
||||
$admin = $this->objFromFixture('Member', 'Admin');
|
||||
$editor = $this->objFromFixture('Member', 'Editor');
|
||||
|
||||
$tag = $this->objFromFixture('BlogTag', 'FirstTag');
|
||||
|
||||
$this->assertTrue($tag->canView($admin), 'Admin should be able to view tag.');
|
||||
$this->assertTrue($tag->canView($editor), 'Editor should be able to view tag.');
|
||||
|
||||
$tag = $this->objFromFixture('BlogTag', 'SecondTag');
|
||||
|
||||
$this->assertTrue($tag->canView($admin), 'Admin should be able to view tag.');
|
||||
$this->assertFalse($tag->canView($editor), 'Editor should not be able to view tag.');
|
||||
}
|
||||
|
||||
public function testCanEdit() {
|
||||
$this->useDraftSite();
|
||||
|
||||
$admin = $this->objFromFixture('Member', 'Admin');
|
||||
$editor = $this->objFromFixture('Member', 'Editor');
|
||||
|
||||
$tag = $this->objFromFixture('BlogTag', 'FirstTag');
|
||||
|
||||
$this->assertTrue($tag->canEdit($admin), 'Admin should be able to edit tag.');
|
||||
$this->assertTrue($tag->canEdit($editor), 'Editor should be able to edit tag.');
|
||||
|
||||
$tag = $this->objFromFixture('BlogTag', 'SecondTag');
|
||||
|
||||
$this->assertTrue($tag->canEdit($admin), 'Admin should be able to edit tag.');
|
||||
$this->assertFalse($tag->canEdit($editor), 'Editor should not be able to edit tag.');
|
||||
|
||||
$tag = $this->objFromFixture('BlogTag', 'ThirdTag');
|
||||
|
||||
$this->assertTrue($tag->canEdit($admin), 'Admin should always be able to edit tags.');
|
||||
$this->assertTrue($tag->canEdit($editor), 'Editor should be able to edit tag.');
|
||||
}
|
||||
|
||||
public function testCanCreate() {
|
||||
$this->useDraftSite();
|
||||
|
||||
$admin = $this->objFromFixture('Member', 'Admin');
|
||||
$editor = $this->objFromFixture('Member', 'Editor');
|
||||
|
||||
$tag = singleton('BlogTag');
|
||||
|
||||
$this->assertTrue($tag->canCreate($admin), 'Admin should be able to create tag.');
|
||||
$this->assertTrue($tag->canCreate($editor), 'Editor should be able to create tag.');
|
||||
}
|
||||
|
||||
public function testCanDelete() {
|
||||
$this->useDraftSite();
|
||||
|
||||
$admin = $this->objFromFixture('Member', 'Admin');
|
||||
$editor = $this->objFromFixture('Member', 'Editor');
|
||||
|
||||
$tag = $this->objFromFixture('BlogTag', 'FirstTag');
|
||||
|
||||
$this->assertTrue($tag->canDelete($admin), 'Admin should be able to delete tag.');
|
||||
$this->assertTrue($tag->canDelete($editor), 'Editor should be able to delete tag.');
|
||||
|
||||
$tag = $this->objFromFixture('BlogTag', 'SecondTag');
|
||||
|
||||
$this->assertTrue($tag->canDelete($admin), 'Admin should be able to delete tag.');
|
||||
$this->assertFalse($tag->canDelete($editor), 'Editor should not be able to delete tag.');
|
||||
|
||||
$tag = $this->objFromFixture('BlogTag', 'ThirdTag');
|
||||
|
||||
$this->assertTrue($tag->canDelete($admin), 'Admin should always be able to delete tags.');
|
||||
$this->assertTrue($tag->canDelete($editor), 'Editor should be able to delete tag.');
|
||||
}
|
||||
}
|
256
tests/BlogTest.php
Executable file
@ -0,0 +1,256 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @mixin PHPUnit_Framework_TestCase
|
||||
*/
|
||||
class BlogTest extends SapphireTest {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
static $fixture_file = 'blog.yml';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
Config::nest();
|
||||
SS_Datetime::set_mock_now('2013-10-10 20:00:00');
|
||||
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture('Blog', 'FirstBlog');
|
||||
|
||||
$blog->publish('Stage', 'Live');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function tearDown() {
|
||||
SS_Datetime::clear_mock_now();
|
||||
Config::unnest();
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
public function testGetExcludedSiteTreeClassNames() {
|
||||
$member = Member::currentUser();
|
||||
|
||||
if($member) {
|
||||
$member->logout();
|
||||
}
|
||||
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture('Blog', 'FirstBlog');
|
||||
|
||||
Config::inst()->update('BlogPost', 'show_in_sitetree', true);
|
||||
$classes = $blog->getExcludedSiteTreeClassNames();
|
||||
|
||||
$this->assertNotContains('BlogPost', $classes, 'BlogPost class should be hidden.');
|
||||
|
||||
Config::inst()->update('BlogPost', 'show_in_sitetree', false);
|
||||
$classes = $blog->getExcludedSiteTreeClassNames();
|
||||
|
||||
$this->assertContains('BlogPost', $classes, 'BlogPost class should be hidden.');
|
||||
}
|
||||
|
||||
public function testGetArchivedBlogPosts() {
|
||||
$member = Member::currentUser();
|
||||
|
||||
if($member) {
|
||||
$member->logout();
|
||||
}
|
||||
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture('Blog', 'FirstBlog');
|
||||
|
||||
$archive = $blog->getArchivedBlogPosts(2013);
|
||||
|
||||
$this->assertEquals(2, $archive->count(), 'Incorrect Yearly Archive count for 2013');
|
||||
$this->assertEquals('First Post', $archive->first()->Title, 'Incorrect First Blog post');
|
||||
$this->assertEquals('Second Post', $archive->last()->Title, 'Incorrect Last Blog post');
|
||||
|
||||
$archive = $blog->getArchivedBlogPosts(2013, 10);
|
||||
|
||||
$this->assertEquals(1, $archive->count(), 'Incorrect monthly archive count.');
|
||||
|
||||
$archive = $blog->getArchivedBlogPosts(2013, 10, 01);
|
||||
|
||||
$this->assertEquals(1, $archive->count(), 'Incorrect daily archive count.');
|
||||
}
|
||||
|
||||
public function testArchiveLinks() {
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture('Blog', 'FirstBlog');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013', '10', '01');
|
||||
|
||||
$this->assertEquals(200, $this->getStatusOf($link), 'HTTP Status should be 200');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013', '10');
|
||||
|
||||
$this->assertEquals(200, $this->getStatusOf($link), 'HTTP Status should be 200');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013');
|
||||
|
||||
$this->assertEquals(200, $this->getStatusOf($link), 'HTTP Status should be 200');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2011', '10', '01');
|
||||
|
||||
$this->assertEquals(200, $this->getStatusOf($link), 'HTTP Status should be 200');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'));
|
||||
|
||||
$this->assertEquals(404, $this->getStatusOf($link), 'HTTP Status should be 404');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), 'invalid-year');
|
||||
|
||||
$this->assertEquals(404, $this->getStatusOf($link), 'HTTP Status should be 404');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013', '99');
|
||||
|
||||
$this->assertEquals(404, $this->getStatusOf($link), 'HTTP Status should be 404');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013', '10', '99');
|
||||
|
||||
$this->assertEquals(404, $this->getStatusOf($link), 'HTTP Status should be 404');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $link
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
protected function getStatusOf($link) {
|
||||
return Director::test($link)->getStatusCode();
|
||||
}
|
||||
|
||||
public function testRoles() {
|
||||
/**
|
||||
* @var Blog $firstBlog
|
||||
*/
|
||||
$firstBlog = $this->objFromFixture('Blog', 'FirstBlog');
|
||||
|
||||
/**
|
||||
* @var Blog $fourthBlog
|
||||
*/
|
||||
$fourthBlog = $this->objFromFixture('Blog', 'FourthBlog');
|
||||
|
||||
/**
|
||||
* @var BlogPost $postA
|
||||
*/
|
||||
$postA = $this->objFromFixture('BlogPost', 'PostA');
|
||||
|
||||
/**
|
||||
* @var BlogPost $postB
|
||||
*/
|
||||
$postB = $this->objFromFixture('BlogPost', 'PostB');
|
||||
|
||||
/**
|
||||
* @var BlogPost $postC
|
||||
*/
|
||||
$postC = $this->objFromFixture('BlogPost', 'PostC');
|
||||
|
||||
/**
|
||||
* @var Member $editor
|
||||
*/
|
||||
$editor = $this->objFromFixture('Member', 'BlogEditor');
|
||||
|
||||
/**
|
||||
* @var Member $writer
|
||||
*/
|
||||
$writer = $this->objFromFixture('Member', 'Writer');
|
||||
|
||||
/**
|
||||
* @var Member $contributor
|
||||
*/
|
||||
$contributor = $this->objFromFixture('Member', 'Contributor');
|
||||
|
||||
/**
|
||||
* @var Member $visitor
|
||||
*/
|
||||
$visitor = $this->objFromFixture('Member', 'Visitor');
|
||||
|
||||
$this->assertEquals('Editor', $fourthBlog->RoleOf($editor));
|
||||
$this->assertEquals('Contributor', $fourthBlog->RoleOf($contributor));
|
||||
$this->assertEquals('Writer', $fourthBlog->RoleOf($writer));
|
||||
$this->assertEmpty($fourthBlog->RoleOf($visitor));
|
||||
$this->assertEquals('Author', $postA->RoleOf($writer));
|
||||
$this->assertEquals('Author', $postA->RoleOf($contributor));
|
||||
$this->assertEquals('Editor', $postA->RoleOf($editor));
|
||||
$this->assertEmpty($postA->RoleOf($visitor));
|
||||
|
||||
// Test RoleOf with string values given
|
||||
$this->assertEquals('Editor', $fourthBlog->RoleOf((string)(int)$editor->ID));
|
||||
$this->assertEquals('Contributor', $fourthBlog->RoleOf((string)(int)$contributor->ID));
|
||||
$this->assertEquals('Writer', $fourthBlog->RoleOf((string)(int)$writer->ID));
|
||||
$this->assertEmpty($fourthBlog->RoleOf((string)(int)$visitor->ID));
|
||||
$this->assertEquals('Author', $postA->RoleOf((string)(int)$writer->ID));
|
||||
$this->assertEquals('Author', $postA->RoleOf((string)(int)$contributor->ID));
|
||||
$this->assertEquals('Editor', $postA->RoleOf((string)(int)$editor->ID));
|
||||
$this->assertEmpty($postA->RoleOf((string)(int)$visitor->ID));
|
||||
|
||||
// Test RoleOf with int values given
|
||||
$this->assertEquals('Editor', $fourthBlog->RoleOf((int)$editor->ID));
|
||||
$this->assertEquals('Contributor', $fourthBlog->RoleOf((int)$contributor->ID));
|
||||
$this->assertEquals('Writer', $fourthBlog->RoleOf((int)$writer->ID));
|
||||
$this->assertEmpty($fourthBlog->RoleOf((int)$visitor->ID));
|
||||
$this->assertEquals('Author', $postA->RoleOf((int)$writer->ID));
|
||||
$this->assertEquals('Author', $postA->RoleOf((int)$contributor->ID));
|
||||
$this->assertEquals('Editor', $postA->RoleOf((int)$editor->ID));
|
||||
$this->assertEmpty($postA->RoleOf((int)$visitor->ID));
|
||||
|
||||
$this->assertTrue($fourthBlog->canEdit($editor));
|
||||
$this->assertFalse($firstBlog->canEdit($editor));
|
||||
$this->assertTrue($fourthBlog->canAddChildren($editor));
|
||||
$this->assertFalse($firstBlog->canAddChildren($editor));
|
||||
$this->assertTrue($postA->canEdit($editor));
|
||||
$this->assertTrue($postB->canEdit($editor));
|
||||
$this->assertTrue($postC->canEdit($editor));
|
||||
$this->assertTrue($postA->canPublish($editor));
|
||||
$this->assertTrue($postB->canPublish($editor));
|
||||
$this->assertTrue($postC->canPublish($editor));
|
||||
|
||||
$this->assertFalse($fourthBlog->canEdit($writer));
|
||||
$this->assertFalse($firstBlog->canEdit($writer));
|
||||
$this->assertTrue($fourthBlog->canAddChildren($writer));
|
||||
$this->assertFalse($firstBlog->canAddChildren($writer));
|
||||
$this->assertTrue($postA->canEdit($writer));
|
||||
$this->assertFalse($postB->canEdit($writer));
|
||||
$this->assertTrue($postC->canEdit($writer));
|
||||
$this->assertTrue($postA->canPublish($writer));
|
||||
$this->assertFalse($postB->canPublish($writer));
|
||||
$this->assertTrue($postC->canPublish($writer));
|
||||
|
||||
$this->assertFalse($fourthBlog->canEdit($contributor));
|
||||
$this->assertFalse($firstBlog->canEdit($contributor));
|
||||
$this->assertTrue($fourthBlog->canAddChildren($contributor));
|
||||
$this->assertFalse($firstBlog->canAddChildren($contributor));
|
||||
$this->assertTrue($postA->canEdit($contributor));
|
||||
$this->assertFalse($postB->canEdit($contributor));
|
||||
$this->assertTrue($postC->canEdit($contributor));
|
||||
$this->assertFalse($postA->canPublish($contributor));
|
||||
$this->assertFalse($postB->canPublish($contributor));
|
||||
$this->assertFalse($postC->canPublish($contributor));
|
||||
|
||||
$this->assertFalse($fourthBlog->canEdit($visitor));
|
||||
$this->assertFalse($firstBlog->canEdit($visitor));
|
||||
$this->assertFalse($fourthBlog->canAddChildren($visitor));
|
||||
$this->assertFalse($firstBlog->canAddChildren($visitor));
|
||||
$this->assertFalse($postA->canEdit($visitor));
|
||||
$this->assertFalse($postB->canEdit($visitor));
|
||||
$this->assertFalse($postC->canEdit($visitor));
|
||||
$this->assertFalse($postA->canPublish($visitor));
|
||||
$this->assertFalse($postB->canPublish($visitor));
|
||||
$this->assertFalse($postC->canPublish($visitor));
|
||||
}
|
||||
}
|
@ -1,126 +0,0 @@
|
||||
Feature: Create a blog
|
||||
As a website user
|
||||
I want to create a blog
|
||||
|
||||
Background:
|
||||
Given the "group" "EDITOR" has permissions "CMS_ACCESS_CMSMain"
|
||||
And I add an extension "SilverStripe\Widgets\Extensions\WidgetPageExtension" to the "Page" class
|
||||
And I add an extension "SilverStripe\Comments\Extensions\CommentsExtension" to the "Page" class
|
||||
|
||||
And an "image" "Uploads/file1.jpg"
|
||||
And I am logged in as a member of "EDITOR" group
|
||||
|
||||
# Create a new blog called "New Blog"
|
||||
When I go to "/admin/pages"
|
||||
And I press the "Add new" button
|
||||
And I select the "Blog" radio button
|
||||
And I press the "Create" button
|
||||
|
||||
# Add widgets
|
||||
And I click the "Widgets" CMS tab
|
||||
And I uncheck "Inherit Sidebar From Parent"
|
||||
And I add the "Content" widget
|
||||
And I add the "Archive" widget
|
||||
And I add the "Blog Tags" widget
|
||||
And I fill in the "Content" widget field "Title" with "My content widget title"
|
||||
And I fill in the "Content" widget HTML field "Content" with "<p>Content widget content</p>"
|
||||
And I fill in the "Archive" widget field "Title" with "My archive widget title"
|
||||
And I fill in the "Blog Tags" widget field "Title" with "My blog tags widget title"
|
||||
And I press the "Save" button
|
||||
|
||||
# Logout
|
||||
And I go to "/Security/login"
|
||||
And I press the "Log in as someone else" button
|
||||
And I am logged in with "ADMIN" permissions
|
||||
|
||||
# Add EDITOR as an Editor
|
||||
When I go to "/admin/pages"
|
||||
And I follow "New Blog"
|
||||
And I click the "Settings" CMS tab
|
||||
And I click the "Users" CMS tab
|
||||
And I wait for 3 seconds
|
||||
And I select "EDITOR" from "Editors"
|
||||
And I press the "Publish" button
|
||||
|
||||
# Logout
|
||||
And I go to "/Security/login"
|
||||
And I press the "Log in as someone else" button
|
||||
|
||||
Scenario: Create a blog post
|
||||
|
||||
Given I am logged in as a member of "EDITOR" group
|
||||
# Create a new blog post called "New Post"
|
||||
When I go to "/admin/pages"
|
||||
And I follow "New Blog"
|
||||
And I click the "Blog Posts" CMS tab
|
||||
And I press the "Add new Blog Post" button
|
||||
And I fill in "Post Title" with "New Post"
|
||||
|
||||
# Add a "Featured image"
|
||||
And I press the "Choose existing" button
|
||||
|
||||
# Select file1.jpg - asset-admin FeatureContext is not available here so use css selector
|
||||
And I click on the ".gallery__files .gallery-item" element
|
||||
And I press the "Insert" button
|
||||
|
||||
# Add categories and tags
|
||||
And I click the "Post Options" CMS tab
|
||||
And I add "My Category" to the "Categories" tag field
|
||||
And I add "My Tag" to the "Tags" tag field
|
||||
|
||||
# Publish the blog post and logout
|
||||
And I press the "Publish" button
|
||||
And I go to "/Security/login"
|
||||
And I press the "Log in as someone else" button
|
||||
|
||||
# Test the frontend
|
||||
When I go to "/new-blog"
|
||||
Then I should see "New Blog"
|
||||
And I should see "New Post"
|
||||
|
||||
# Widgets
|
||||
And I should see "My content widget title"
|
||||
And the rendered HTML should contain "<p>Content widget content</p>"
|
||||
And I should see "My blog tags widget title"
|
||||
|
||||
# Hyperlink to "New Post"
|
||||
Then the rendered HTML should contain "href=\"/new-blog/new-post"
|
||||
|
||||
# Category
|
||||
And the rendered HTML should contain "href=\"/new-blog/category/my-category\""
|
||||
|
||||
# Tag
|
||||
And the rendered HTML should contain "href=\"/new-blog/tag/my-tag\""
|
||||
|
||||
# Test that blog post shows in category view
|
||||
When I go to "/new-blog/category/my-category"
|
||||
Then I should see "New Post"
|
||||
|
||||
# Test that blog post shows in tag view
|
||||
When I go to "/new-blog/tag/my-tag"
|
||||
Then I should see "New Post"
|
||||
|
||||
# Commenting
|
||||
When I click "New Post" in the ".post-summary" element
|
||||
Then I should see "New Post"
|
||||
When I fill in "Your name" with "My Name"
|
||||
And I fill in "Email" with "hello@example.com"
|
||||
And I fill in "Comments" with "My comments"
|
||||
When I press the "Post" button
|
||||
Then I should see "New Post"
|
||||
|
||||
# Commenting is bizarly not working in behat, even though it works during manual testing on my local
|
||||
# Moderation
|
||||
# When I am logged in as a member of "EDITOR" group
|
||||
# When I go to "/admin/pages"
|
||||
# And I follow "New Blog"
|
||||
# And I click the "Blog Posts" CMS tab
|
||||
# And I click on the ".ss-gridfield-item" element
|
||||
# And I click the "Comments" CMS tab
|
||||
# Then I should see "New (1)"
|
||||
# When I click the "New (1)" CMS tab
|
||||
# Then I should see "hello@example.com"
|
||||
# When I click on the ".action-menu__toggle" element
|
||||
# And I press the "Spam" button
|
||||
# And I wait for 2 seconds
|
||||
# Then I should not see "hello@example.com"
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,105 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests\Behat\Context;
|
||||
|
||||
use SilverStripe\BehatExtension\Context\SilverStripeContext;
|
||||
use Behat\Mink\Element\NodeElement;
|
||||
use PHPUnit\Framework\Assert;
|
||||
|
||||
class FeatureContext extends SilverStripeContext
|
||||
{
|
||||
/**
|
||||
* Adds a widget to the blog
|
||||
*
|
||||
* @Then /^I add the "([^"]+)" widget$/
|
||||
* @param $widgetTitle e.g. "Content"
|
||||
*/
|
||||
public function iAddTheWidget($widgetTitle)
|
||||
{
|
||||
$page = $this->getSession()->getPage();
|
||||
$h3s = $page->findAll('css', '.availableWidgetsHolder h3');
|
||||
$found = false;
|
||||
foreach ($h3s as $h3) {
|
||||
if ($h3->getText() !== $widgetTitle) {
|
||||
continue;
|
||||
}
|
||||
$found = true;
|
||||
$h3->click();
|
||||
}
|
||||
Assert::assertTrue($found, "Widget {$widgetTitle} was not found");
|
||||
}
|
||||
|
||||
/**
|
||||
* Fills in a field within a widget
|
||||
*
|
||||
* @Then /^I fill in the "([^"]+)" widget field "([^"]+)" with "([^"]+)"$/
|
||||
* @param $widgetTitle e.g. "Content"
|
||||
* @param $htmlFragment e.g. "Title"
|
||||
* @param $value e.g. "Lorem ipsum"
|
||||
*/
|
||||
public function iFillInTheWidgetField($widgetTitle, $fieldTitle, $value)
|
||||
{
|
||||
$page = $this->getSession()->getPage();
|
||||
$widget = $this->getWidget($widgetTitle);
|
||||
$field = $widget->findField($fieldTitle);
|
||||
Assert::assertNotNull($field, "Widget field {$fieldTitle} was not found");
|
||||
$field->setValue($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adapated from framework CmsFormsContext stepIFillInTheHtmlFieldWith
|
||||
*
|
||||
* @When /^I fill in the "([^"]+)" widget HTML field "([^"]+)" with "([^"]+)"$/
|
||||
*/
|
||||
public function stepIFillInTheHtmlFieldWith($widgetTitle, $fieldTitle, $value)
|
||||
{
|
||||
$widget = $this->getWidget($widgetTitle);
|
||||
$field = $this->getDescendantHtmlField($widget, $fieldTitle);
|
||||
$this->getSession()->evaluateScript(sprintf(
|
||||
"jQuery('#%s').entwine('ss').getEditor().setContent('%s')",
|
||||
$field->getAttribute('id'),
|
||||
addcslashes($value ?? '', "'")
|
||||
));
|
||||
$this->getSession()->evaluateScript(sprintf(
|
||||
"jQuery('#%s').entwine('ss').getEditor().save()",
|
||||
$field->getAttribute('id')
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return NodeElement|null
|
||||
*/
|
||||
private function getWidget($widgetTitle)
|
||||
{
|
||||
$ret = null;
|
||||
$widgets = $this->getSession()->getPage()->findAll('css', '.usedWidgets .Widget');
|
||||
foreach ($widgets as $widget) {
|
||||
$h3 = $widget->find('css', 'h3');
|
||||
if (!$h3 || $h3->getText() !== $widgetTitle) {
|
||||
continue;
|
||||
}
|
||||
$ret = $widget;
|
||||
break;
|
||||
}
|
||||
Assert::assertNotNull($ret, "Widget edit form for {$widgetTitle} was not found");
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param NodeElement $ancestor
|
||||
* @param string $locator
|
||||
* @return NodeElement|null
|
||||
*/
|
||||
private function getDescendantHtmlField($element, $locator)
|
||||
{
|
||||
$textarea = $element->find('css', "textarea.htmleditor[name='{$locator}']");
|
||||
if (is_null($textarea)) {
|
||||
$labels = $element->findAll('xpath', "//label[contains(text(), '{$locator}')]");
|
||||
Assert::assertCount(1, $labels, "Found more than one html field label containing the phrase '{$locator}}'");
|
||||
$label = array_shift($labels);
|
||||
$textarea = $element->find('css', '#' . $label->getAttribute('for'));
|
||||
}
|
||||
Assert::assertNotNull($textarea, "HTML field {$locator} not found");
|
||||
return $textarea;
|
||||
}
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests\Behat\Context;
|
||||
|
||||
use SilverStripe\BehatExtension\Context\FixtureContext as BaseFixtureContext;
|
||||
|
||||
class FixtureContext extends BaseFixtureContext
|
||||
{
|
||||
}
|
148
tests/blog.yml
Executable file
@ -0,0 +1,148 @@
|
||||
# Mock date is set to 2013-10-01 20:00:00
|
||||
|
||||
Group:
|
||||
Administrators:
|
||||
Title: Administrators
|
||||
Editors:
|
||||
Title: Editors
|
||||
BlogUsers:
|
||||
Title: Blog Users
|
||||
Code: BlogUsers
|
||||
|
||||
Permission:
|
||||
Administrators:
|
||||
Code: ADMIN
|
||||
Group: =>Group.Administrators
|
||||
Editors:
|
||||
Code: CMS_ACCESS_CMSMain
|
||||
Group: =>Group.Editors
|
||||
BlogUsers:
|
||||
Code: CMS_ACCESS_CMSMain
|
||||
Group: =>Group.BlogUsers
|
||||
|
||||
SiteConfig:
|
||||
Default:
|
||||
CanEditType: 'OnlyTheseUsers'
|
||||
CanCreateTopLevelType: 'OnlyTheseUsers'
|
||||
EditorGroups: =>Group.Administrators,=>Group.Editors
|
||||
CreateTopLevelGroups: =>Group.Administrators,=>Group.Editors
|
||||
|
||||
Member:
|
||||
Admin:
|
||||
FirstName: Test
|
||||
Surname: Administrator
|
||||
Groups: =>Group.Administrators
|
||||
Editor:
|
||||
FirstName: Test
|
||||
Surname: Editor
|
||||
Groups: =>Group.Editors
|
||||
BlogEditor:
|
||||
FirstName: Blog
|
||||
Surname: Editor
|
||||
Groups: =>Group.BlogUsers
|
||||
Writer:
|
||||
FirstName: Blog
|
||||
Surname: Writer
|
||||
Groups: =>Group.BlogUsers
|
||||
Contributor:
|
||||
FirstName: Blog
|
||||
Surname: Contributor
|
||||
Groups: =>Group.BlogUsers
|
||||
Visitor:
|
||||
FirstName: Blog
|
||||
Surname: Visitor
|
||||
|
||||
Blog:
|
||||
FirstBlog:
|
||||
Title: 'First Blog'
|
||||
SecondBlog:
|
||||
Title: 'Second Blog'
|
||||
CanViewType: 'OnlyTheseUsers'
|
||||
CanEditType: 'OnlyTheseUsers'
|
||||
ViewerGroups: =>Group.Administrators
|
||||
EditorGroups: =>Group.Administrators
|
||||
ThirdBlog:
|
||||
Title: 'Third Blog'
|
||||
CanEditType: 'OnlyTheseUsers'
|
||||
EditorGroups: =>Group.Editors
|
||||
FourthBlog:
|
||||
Title: 'Fourth Blog'
|
||||
Editors: =>Member.BlogEditor
|
||||
Writers: =>Member.Writer
|
||||
Contributors: =>Member.Contributor
|
||||
|
||||
BlogTag:
|
||||
FirstTag:
|
||||
Title: 'First Tag'
|
||||
URLSegment: 'first-tag'
|
||||
Blog: =>Blog.FirstBlog
|
||||
SecondTag:
|
||||
Title: 'Second Tag'
|
||||
URLSegment: 'second-tag'
|
||||
Blog: =>Blog.SecondBlog
|
||||
ThirdTag:
|
||||
Title: 'Third Tag'
|
||||
URLSegment: 'third-tag'
|
||||
Blog: =>Blog.ThirdBlog
|
||||
|
||||
BlogCategory:
|
||||
FirstCategory:
|
||||
Title: 'First Category'
|
||||
URLSegment: 'first-category'
|
||||
Blog: =>Blog.FirstBlog
|
||||
SecondCategory:
|
||||
Title: 'Second Category'
|
||||
URLSegment: 'second-category'
|
||||
Blog: =>Blog.SecondBlog
|
||||
ThirdCategory:
|
||||
Title: 'Third Category'
|
||||
URLSegment: 'third-category'
|
||||
Blog: =>Blog.ThirdBlog
|
||||
|
||||
BlogPost:
|
||||
FirstBlogPost:
|
||||
Title: 'First Post'
|
||||
URLSegment: first-post
|
||||
PublishDate: '2013-10-01 15:00:00'
|
||||
Parent: =>Blog.FirstBlog
|
||||
Tags: =>BlogTag.FirstTag
|
||||
Categories: =>BlogCategory.FirstCategory
|
||||
SecondBlogPost:
|
||||
Title: 'Second Post'
|
||||
URLSegment: second-post
|
||||
PublishDate: '2013-09-01 15:00:00'
|
||||
Parent: =>Blog.FirstBlog
|
||||
ThirdBlogPost:
|
||||
Title: 'Old Post'
|
||||
URLSegment: old-post
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
Parent: =>Blog.FirstBlog
|
||||
FirstFutureBlogPost:
|
||||
Title: 'Future Post'
|
||||
URLSegment: future-post
|
||||
PublishDate: '2015-01-01 00:00:00'
|
||||
Tags: =>BlogTag.FirstTag
|
||||
Categories: =>BlogCategory.FirstCategory
|
||||
Parent: =>Blog.FirstBlog
|
||||
SecondFutureBlogPost:
|
||||
Title: 'Future Post 2'
|
||||
URLSegment: future-post-2
|
||||
PublishDate: '2013-11-01 00:00:00'
|
||||
Tags: =>BlogTag.FirstTag
|
||||
Categories: =>BlogCategory.FirstCategory
|
||||
Parent: =>Blog.FirstBlog
|
||||
PostA:
|
||||
Title: 'One Post'
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
Parent: =>Blog.FourthBlog
|
||||
Authors: =>Member.Writer,=>Member.Contributor
|
||||
PostB:
|
||||
Title: 'Second Post'
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
Parent: =>Blog.FourthBlog
|
||||
Authors: =>Member.BlogEditor
|
||||
PostC:
|
||||
Title: 'Third Post'
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
Parent: =>Blog.FourthBlog
|
||||
Authors: =>Member.BlogEditor,=>Member.Writer,=>Member.Contributor
|
@ -1,170 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Blog\Model\BlogCategory;
|
||||
use SilverStripe\Blog\Model\BlogPost;
|
||||
use SilverStripe\Blog\Model\BlogTag;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Dev\FunctionalTest;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\ORM\ValidationException;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\Security\Security;
|
||||
|
||||
class BlogCategoryTest extends FunctionalTest
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected static $fixture_file = 'blog.yml';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
DBDatetime::set_mock_now('2013-10-10 20:00:00');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function tearDown(): void
|
||||
{
|
||||
DBDatetime::clear_mock_now();
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that any blog posts returned from $category->BlogPosts() many_many are published,
|
||||
* both by normal 'save & publish' functionality and by publish date.
|
||||
*/
|
||||
public function testBlogPosts()
|
||||
{
|
||||
$member = Security::getCurrentUser();
|
||||
|
||||
if ($member) {
|
||||
Security::setCurrentUser(null);
|
||||
}
|
||||
|
||||
$this->objFromFixture(BlogPost::class, 'FirstBlogPost');
|
||||
|
||||
/**
|
||||
* @var BlogCategory $category
|
||||
*/
|
||||
$category = $this->objFromFixture(BlogCategory::class, 'FirstCategory');
|
||||
|
||||
$this->assertEquals(5, $category->BlogPosts()->count(), 'Category blog post count');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://github.com/silverstripe/silverstripe-blog/issues/376
|
||||
*/
|
||||
public function testAllowMultibyteUrlSegment()
|
||||
{
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
$cat = new BlogCategory();
|
||||
$cat->BlogID = $blog->ID;
|
||||
$cat->Title = 'تست';
|
||||
$cat->write();
|
||||
// urlencoded
|
||||
$this->assertEquals('%D8%AA%D8%B3%D8%AA', $cat->URLSegment);
|
||||
$link = Controller::join_links($cat->Blog()->Link(), 'category', '%D8%AA%D8%B3%D8%AA');
|
||||
$this->assertEquals($link, $cat->getLink());
|
||||
}
|
||||
|
||||
public function testCanView()
|
||||
{
|
||||
$this->objFromFixture(Member::class, 'Admin');
|
||||
|
||||
$editor = $this->objFromFixture(Member::class, 'Editor');
|
||||
$category = $this->objFromFixture(BlogCategory::class, 'SecondCategory');
|
||||
|
||||
$this->assertFalse($category->canView($editor), 'Editor should not be able to view category.');
|
||||
}
|
||||
|
||||
/**
|
||||
* The first blog can be viewed by anybody.
|
||||
*/
|
||||
public function testCanEdit()
|
||||
{
|
||||
$admin = $this->objFromFixture(Member::class, 'Admin');
|
||||
$editor = $this->objFromFixture(Member::class, 'Editor');
|
||||
|
||||
$category = $this->objFromFixture(BlogCategory::class, 'FirstCategory');
|
||||
|
||||
$this->assertTrue($category->canEdit($admin), 'Admin should be able to edit category.');
|
||||
$this->assertTrue($category->canEdit($editor), 'Editor should be able to edit category.');
|
||||
|
||||
$category = $this->objFromFixture(BlogCategory::class, 'SecondCategory');
|
||||
|
||||
$this->assertTrue($category->canEdit($admin), 'Admin should be able to edit category.');
|
||||
$this->assertFalse($category->canEdit($editor), 'Editor should not be able to edit category.');
|
||||
|
||||
$category = $this->objFromFixture(BlogCategory::class, 'ThirdCategory');
|
||||
|
||||
$this->assertTrue($category->canEdit($admin), 'Admin should always be able to edit category.');
|
||||
$this->assertTrue($category->canEdit($editor), 'Editor should be able to edit category.');
|
||||
}
|
||||
|
||||
public function testCanCreate()
|
||||
{
|
||||
$admin = $this->objFromFixture(Member::class, 'Admin');
|
||||
$editor = $this->objFromFixture(Member::class, 'Editor');
|
||||
|
||||
$category = singleton(BlogCategory::class);
|
||||
|
||||
$this->assertTrue($category->canCreate($admin), 'Admin should be able to create category.');
|
||||
$this->assertTrue($category->canCreate($editor), 'Editor should be able to create category.');
|
||||
}
|
||||
|
||||
public function testCanDelete()
|
||||
{
|
||||
$admin = $this->objFromFixture(Member::class, 'Admin');
|
||||
$editor = $this->objFromFixture(Member::class, 'Editor');
|
||||
|
||||
$category = $this->objFromFixture(BlogCategory::class, 'FirstCategory');
|
||||
|
||||
$this->assertTrue($category->canDelete($admin), 'Admin should be able to delete category.');
|
||||
$this->assertTrue($category->canDelete($editor), 'Editor should be able to category category.');
|
||||
|
||||
$category = $this->objFromFixture(BlogCategory::class, 'SecondCategory');
|
||||
$this->assertTrue($category->canDelete($admin), 'Admin should be able to delete category.');
|
||||
$this->assertFalse($category->canDelete($editor), 'Editor should not be able to delete category.');
|
||||
|
||||
$category = $this->objFromFixture(BlogCategory::class, 'ThirdCategory');
|
||||
$this->assertTrue($category->canDelete($admin), 'Admin should always be able to delete category.');
|
||||
$this->assertTrue($category->canDelete($editor), 'Editor should be able to delete category.');
|
||||
}
|
||||
|
||||
public function testDuplicateCategories()
|
||||
{
|
||||
$blog = new Blog();
|
||||
$blog->Title = 'Testing for duplicate categories';
|
||||
$blog->write();
|
||||
|
||||
$category = new BlogCategory();
|
||||
$category->Title = 'Test';
|
||||
$category->BlogID = $blog->ID;
|
||||
$category->URLSegment = 'test';
|
||||
$category->write();
|
||||
|
||||
$category = new BlogCategory();
|
||||
$category->Title = 'Test';
|
||||
$category->URLSegment = 'test';
|
||||
$category->BlogID = $blog->ID;
|
||||
try {
|
||||
$category->write();
|
||||
$this->fail('Duplicate BlogCategory written');
|
||||
} catch (ValidationException $e) {
|
||||
$messages = $e->getResult()->getMessages();
|
||||
$this->assertCount(1, $messages);
|
||||
$this->assertEquals(BlogTag::DUPLICATE_EXCEPTION, $messages[0]['messageType']);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests;
|
||||
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Dev\FunctionalTest;
|
||||
use SilverStripe\i18n\i18n;
|
||||
use SilverStripe\View\Parsers\URLSegmentFilter;
|
||||
|
||||
class BlogFunctionalTest extends FunctionalTest
|
||||
{
|
||||
protected static $fixture_file = 'BlogFunctionalTest.yml';
|
||||
|
||||
protected static $use_draft_site = true;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
Config::modify()->set(URLSegmentFilter::class, 'default_allow_multibyte', true);
|
||||
i18n::set_locale('fa_IR');
|
||||
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
public function testBlogWithMultibyteUrl()
|
||||
{
|
||||
$result = $this->get(rawurlencode('آبید'));
|
||||
|
||||
$this->assertEquals(200, $result->getStatusCode());
|
||||
}
|
||||
|
||||
public function testMemberProfileWithMultibyteUrlAndName()
|
||||
{
|
||||
$result = $this->get(rawurlencode('آبید') . '/profile/' . rawurlencode('عبّاس-آبان'));
|
||||
|
||||
$this->assertEquals(200, $result->getStatusCode());
|
||||
$this->assertStringContainsString('My Blog Post', $result->getBody());
|
||||
}
|
||||
|
||||
public function testMemberProfileWithMultibyteUrlAndEnglishName()
|
||||
{
|
||||
$result = $this->get(rawurlencode('آبید') . '/profile/bob-jones');
|
||||
|
||||
$this->assertEquals(200, $result->getStatusCode());
|
||||
$this->assertStringContainsString('My Blog Post', $result->getBody());
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
SilverStripe\Security\Member:
|
||||
member_a:
|
||||
FirstName: عبّاس
|
||||
Surname: آبان
|
||||
Email: foo@example.com
|
||||
member_b:
|
||||
FirstName: Bob
|
||||
Surname: Jones
|
||||
Email: bobjones@example.com
|
||||
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
blog_a:
|
||||
URLSegment: آبید
|
||||
Title: My Blog
|
||||
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
blogpost_a:
|
||||
Title: My Blog Post
|
||||
URLSegment: آبیدآبید
|
||||
PublishDate: 2017-08-01 00:00:00
|
||||
Parent: =>SilverStripe\Blog\Model\Blog.blog_a
|
||||
Authors:
|
||||
- =>SilverStripe\Security\Member.member_a
|
||||
- =>SilverStripe\Security\Member.member_b
|
@ -1,57 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\Security\Security;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \SilverStripe\Blog\Model\BlogPostFilter
|
||||
*/
|
||||
class BlogPostFilterTest extends SapphireTest
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected static $fixture_file = 'blog.yml';
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
DBDatetime::set_mock_now('2013-10-10 20:00:00');
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
DBDatetime::clear_mock_now();
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that unpublished articles are not returned
|
||||
* @covers ::augmentSQL
|
||||
*/
|
||||
public function testFilter()
|
||||
{
|
||||
$member = Security::getCurrentUser();
|
||||
|
||||
if ($member) {
|
||||
Security::setCurrentUser(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
|
||||
$this->assertEquals(3, $blog->AllChildren()->Count(), 'Filtered blog posts');
|
||||
|
||||
DBDatetime::set_mock_now('2020-01-01 00:00:00');
|
||||
|
||||
$this->assertEquals(5, $blog->AllChildren()->Count(), 'Unfiltered blog posts');
|
||||
}
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests;
|
||||
|
||||
use SilverStripe\Blog\Model\BlogPost;
|
||||
use SilverStripe\CommentNotifications\Extensions\CommentNotifier;
|
||||
use SilverStripe\Comments\Model\Comment;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
|
||||
class BlogPostNotificationsTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'blog.yml';
|
||||
|
||||
public function testUpdateNotificationRecipients()
|
||||
{
|
||||
if (!class_exists(CommentNotifier::class)) {
|
||||
$this->markTestSkipped('Comments Notification module is not installed');
|
||||
}
|
||||
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'PostC');
|
||||
$comment = new Comment();
|
||||
$comment->Comment = 'This is a comment';
|
||||
$comment->write();
|
||||
$recipients = $blogPost->notificationRecipients(
|
||||
$comment
|
||||
)->toArray();
|
||||
|
||||
$segments = [];
|
||||
foreach ($recipients as $recipient) {
|
||||
array_push($segments, $recipient->URLSegment);
|
||||
}
|
||||
|
||||
sort($segments);
|
||||
$this->assertEquals(
|
||||
['blog-contributor', 'blog-editor', 'blog-writer'],
|
||||
$segments
|
||||
);
|
||||
}
|
||||
|
||||
public function testUpdateNotificationSubject()
|
||||
{
|
||||
if (!class_exists(CommentNotifier::class)) {
|
||||
$this->markTestSkipped('Comments Notification module is not installed');
|
||||
}
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'PostC');
|
||||
$comment = new Comment();
|
||||
$comment->Comment = 'This is a comment';
|
||||
$comment->write();
|
||||
$recipients = $blogPost->notificationRecipients(
|
||||
$comment
|
||||
)->toArray();
|
||||
$subject = $blogPost->notificationSubject($comment, $recipients[0]);
|
||||
$this->assertEquals(
|
||||
'A new comment has been posted on Third Post',
|
||||
$subject
|
||||
);
|
||||
}
|
||||
}
|
@ -1,208 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests;
|
||||
|
||||
use SilverStripe\Blog\Model\BlogPost;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\Security\Security;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
|
||||
class BlogPostTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'blog.yml';
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
DBDatetime::clear_mock_now();
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider canViewProvider
|
||||
*/
|
||||
public function testCanView($date, $user, $page, $canView, $stage)
|
||||
{
|
||||
$userRecord = $this->objFromFixture(Member::class, $user);
|
||||
$pageRecord = $this->objFromFixture(BlogPost::class, $page);
|
||||
DBDatetime::set_mock_now($date);
|
||||
if ($stage === 'Live') {
|
||||
$pageRecord->publishSingle();
|
||||
}
|
||||
|
||||
Versioned::set_stage($stage);
|
||||
$this->assertEquals($canView, $pageRecord->canView($userRecord));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array Format:
|
||||
* - mock now date
|
||||
* - user role (see fixture)
|
||||
* - blog post fixture ID
|
||||
* - expected result
|
||||
* - versioned stage
|
||||
*/
|
||||
public function canViewProvider()
|
||||
{
|
||||
$someFutureDate = '2013-10-10 20:00:00';
|
||||
$somePastDate = '2009-10-10 20:00:00';
|
||||
return [
|
||||
// Check this post given the date has passed
|
||||
[$someFutureDate, 'Editor', 'PostA', true, 'Stage'],
|
||||
[$someFutureDate, 'Contributor', 'PostA', true, 'Stage'],
|
||||
[$someFutureDate, 'BlogEditor', 'PostA', true, 'Stage'],
|
||||
[$someFutureDate, 'Writer', 'PostA', true, 'Stage'],
|
||||
|
||||
// Check unpublished pages
|
||||
[$somePastDate, 'Editor', 'PostA', true, 'Stage'],
|
||||
[$somePastDate, 'Contributor', 'PostA', true, 'Stage'],
|
||||
[$somePastDate, 'BlogEditor', 'PostA', true, 'Stage'],
|
||||
[$somePastDate, 'Writer', 'PostA', true, 'Stage'],
|
||||
|
||||
|
||||
// Test a page that was authored by another user
|
||||
|
||||
// Check this post given the date has passed
|
||||
[$someFutureDate, 'Editor', 'FirstBlogPost', true, 'Stage'],
|
||||
[$someFutureDate, 'Contributor', 'FirstBlogPost', true, 'Stage'],
|
||||
[$someFutureDate, 'BlogEditor', 'FirstBlogPost', true, 'Stage'],
|
||||
[$someFutureDate, 'Writer', 'FirstBlogPost', true, 'Stage'],
|
||||
|
||||
// Check future pages in draft stage - users with "view draft pages" permission should
|
||||
// be able to see this, but visitors should not
|
||||
[$somePastDate, 'Editor', 'FirstBlogPost', true, 'Stage'],
|
||||
[$somePastDate, 'Contributor', 'FirstBlogPost', true, 'Stage'],
|
||||
[$somePastDate, 'BlogEditor', 'FirstBlogPost', true, 'Stage'],
|
||||
[$somePastDate, 'Writer', 'FirstBlogPost', true, 'Stage'],
|
||||
[$somePastDate, 'Visitor', 'FirstBlogPost', false, 'Stage'],
|
||||
|
||||
// No future pages in live stage should be visible, even to users that can edit them (in draft)
|
||||
[$somePastDate, 'Editor', 'FirstBlogPost', false, 'Live'],
|
||||
[$somePastDate, 'Contributor', 'FirstBlogPost', false, 'Live'],
|
||||
[$somePastDate, 'BlogEditor', 'FirstBlogPost', false, 'Live'],
|
||||
[$somePastDate, 'Writer', 'FirstBlogPost', false, 'Live'],
|
||||
[$somePastDate, 'Visitor', 'FirstBlogPost', false, 'Live'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testCandidateAuthors()
|
||||
{
|
||||
$blogpost = $this->objFromFixture(BlogPost::class, 'PostC');
|
||||
|
||||
$this->assertEquals(7, $blogpost->getCandidateAuthors()->count());
|
||||
|
||||
//Set the group to draw Members from
|
||||
Config::inst()->set(BlogPost::class, 'restrict_authors_to_group', 'blogusers');
|
||||
|
||||
$this->assertEquals(3, $blogpost->getCandidateAuthors()->count());
|
||||
|
||||
// Test cms field is generated
|
||||
$fields = $blogpost->getCMSFields();
|
||||
$this->assertNotEmpty($fields->dataFieldByName('Authors'));
|
||||
}
|
||||
|
||||
public function testCanViewFuturePost()
|
||||
{
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'NullPublishDate');
|
||||
|
||||
$editor = $this->objFromFixture(Member::class, 'BlogEditor');
|
||||
$this->assertTrue($blogPost->canView($editor));
|
||||
|
||||
$visitor = $this->objFromFixture(Member::class, 'Visitor');
|
||||
$this->assertFalse($blogPost->canView($visitor));
|
||||
}
|
||||
|
||||
/**
|
||||
* The purpose of getDate() is to act as a proxy for PublishDate in the default RSS
|
||||
* template, rather than copying the entire template.
|
||||
*/
|
||||
public function testGetDate()
|
||||
{
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'NullPublishDate');
|
||||
$this->assertNull($blogPost->getDate());
|
||||
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'PostA');
|
||||
$this->assertEquals('2012-01-09 15:00:00', $blogPost->getDate());
|
||||
}
|
||||
|
||||
public function testMinutesToRead()
|
||||
{
|
||||
/** @var BlogPost $blogPost */
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'FirstBlogPost');
|
||||
|
||||
// over 400 words, should take slightly longer than 2 minutes
|
||||
$this->assertEquals(2, $blogPost->MinutesToRead());
|
||||
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'SecondBlogPost');
|
||||
|
||||
// over 200 words, should take slighter longer than 1 minute
|
||||
$this->assertEquals(1, $blogPost->MinutesToRead());
|
||||
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'ThirdBlogPost');
|
||||
// less than 200 words, should take less than a minute thus return an integer of 0 (zero)
|
||||
$this->assertEquals(0, $blogPost->MinutesToRead());
|
||||
|
||||
$this->expectException(\InvalidArgumentException::class);
|
||||
$blogPost->MinutesToRead('not-a-number');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @param string $expected
|
||||
* @dataProvider monthlyArchiveLinkProvider
|
||||
* @group wip
|
||||
*/
|
||||
public function testGetMonthlyArchiveLink($type, $expected)
|
||||
{
|
||||
/** @var BlogPost $blogPost */
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'FirstBlogPost');
|
||||
|
||||
$archiveLink = $blogPost->getMonthlyArchiveLink($type);
|
||||
$this->assertStringContainsString('archive/', $archiveLink);
|
||||
$this->assertStringEndsWith($expected, $archiveLink);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
*/
|
||||
public function monthlyArchiveLinkProvider()
|
||||
{
|
||||
return [
|
||||
['day', '/2013/10/1'],
|
||||
['month', '/2013/10'],
|
||||
['year', '/2013'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testGetYearlyArchiveLink()
|
||||
{
|
||||
/** @var BlogPost $blogPost */
|
||||
$blogPost = $this->objFromFixture(BlogPost::class, 'FirstBlogPost');
|
||||
|
||||
$archiveLink = $blogPost->getYearlyArchiveLink();
|
||||
$this->assertStringContainsString('archive/', $archiveLink);
|
||||
$this->assertStringEndsWith('/2013', $archiveLink);
|
||||
}
|
||||
|
||||
public function testAddDefaultAuthor()
|
||||
{
|
||||
$member = Security::getCurrentUser();
|
||||
$rootPage = SiteTree::create();
|
||||
$rootPage->write();
|
||||
|
||||
$blogPost = BlogPost::create(['ParentID' => $rootPage->ID]);
|
||||
$this->assertSame(0, $blogPost->Authors()->count());
|
||||
$blogPost->write();
|
||||
$this->assertSame(1, $blogPost->Authors()->count());
|
||||
$this->assertSame($member->ID, $blogPost->Authors()->first()->ID);
|
||||
|
||||
BlogPost::config()->set('add_default_author', false);
|
||||
$blogPost2 = BlogPost::create(['ParentID' => $rootPage->ID]);
|
||||
$this->assertSame(0, $blogPost2->Authors()->count());
|
||||
$blogPost2->write();
|
||||
$this->assertSame(0, $blogPost2->Authors()->count());
|
||||
}
|
||||
}
|
@ -1,198 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Blog\Model\BlogPost;
|
||||
use SilverStripe\Blog\Model\BlogTag;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Dev\FunctionalTest;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\ORM\ValidationException;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\Security\Security;
|
||||
|
||||
class BlogTagTest extends FunctionalTest
|
||||
{
|
||||
protected static $fixture_file = 'blog.yml';
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
DBDatetime::set_mock_now('2013-10-10 20:00:00');
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
DBDatetime::clear_mock_now();
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that any blog posts returned from $tag->BlogPosts() many_many are published, both by
|
||||
* normal 'save & publish' functionality and by publish date.
|
||||
*/
|
||||
public function testBlogPosts()
|
||||
{
|
||||
$member = Security::getCurrentUser();
|
||||
|
||||
if ($member) {
|
||||
Security::setCurrentUser(null);
|
||||
}
|
||||
|
||||
$this->objFromFixture(BlogPost::class, 'FirstBlogPost');
|
||||
|
||||
/**
|
||||
* @var BlogTag $tag
|
||||
*/
|
||||
$tag = $this->objFromFixture(BlogTag::class, 'FirstTag');
|
||||
|
||||
$this->assertEquals(1, $tag->BlogPosts()->count(), 'Tag blog post count');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://github.com/silverstripe/silverstripe-blog/issues/376
|
||||
*/
|
||||
public function testAllowMultibyteUrlSegment()
|
||||
{
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
$tag = new BlogTag();
|
||||
$tag->BlogID = $blog->ID;
|
||||
$tag->Title = 'تست';
|
||||
$tag->write();
|
||||
// urlencoded
|
||||
$this->assertEquals('%D8%AA%D8%B3%D8%AA', $tag->URLSegment);
|
||||
$link = Controller::join_links($tag->Blog()->Link(), 'tag', '%D8%AA%D8%B3%D8%AA');
|
||||
$this->assertEquals($link, $tag->getLink());
|
||||
}
|
||||
|
||||
/**
|
||||
* The first blog can be viewed by anybody.
|
||||
*/
|
||||
public function testCanView()
|
||||
{
|
||||
$admin = $this->objFromFixture(Member::class, 'Admin');
|
||||
$editor = $this->objFromFixture(Member::class, 'Editor');
|
||||
|
||||
$tag = $this->objFromFixture(BlogTag::class, 'FirstTag');
|
||||
|
||||
$this->assertTrue($tag->canView($admin), 'Admin should be able to view tag.');
|
||||
$this->assertTrue($tag->canView($editor), 'Editor should be able to view tag.');
|
||||
|
||||
$tag = $this->objFromFixture(BlogTag::class, 'SecondTag');
|
||||
|
||||
$this->assertTrue($tag->canView($admin), 'Admin should be able to view tag.');
|
||||
$this->assertFalse($tag->canView($editor), 'Editor should not be able to view tag.');
|
||||
}
|
||||
|
||||
public function testCanEdit()
|
||||
{
|
||||
$admin = $this->objFromFixture(Member::class, 'Admin');
|
||||
$editor = $this->objFromFixture(Member::class, 'Editor');
|
||||
|
||||
$tag = $this->objFromFixture(BlogTag::class, 'FirstTag');
|
||||
|
||||
$this->assertTrue($tag->canEdit($admin), 'Admin should be able to edit tag.');
|
||||
$this->assertTrue($tag->canEdit($editor), 'Editor should be able to edit tag.');
|
||||
|
||||
$tag = $this->objFromFixture(BlogTag::class, 'SecondTag');
|
||||
|
||||
$this->assertTrue($tag->canEdit($admin), 'Admin should be able to edit tag.');
|
||||
$this->assertFalse($tag->canEdit($editor), 'Editor should not be able to edit tag.');
|
||||
|
||||
$tag = $this->objFromFixture(BlogTag::class, 'ThirdTag');
|
||||
|
||||
$this->assertTrue($tag->canEdit($admin), 'Admin should always be able to edit tags.');
|
||||
$this->assertTrue($tag->canEdit($editor), 'Editor should be able to edit tag.');
|
||||
}
|
||||
|
||||
public function testCanCreate()
|
||||
{
|
||||
$admin = $this->objFromFixture(Member::class, 'Admin');
|
||||
$editor = $this->objFromFixture(Member::class, 'Editor');
|
||||
|
||||
$tag = singleton(BlogTag::class);
|
||||
|
||||
$this->assertTrue($tag->canCreate($admin), 'Admin should be able to create tag.');
|
||||
$this->assertTrue($tag->canCreate($editor), 'Editor should be able to create tag.');
|
||||
}
|
||||
|
||||
public function testCanDelete()
|
||||
{
|
||||
$admin = $this->objFromFixture(Member::class, 'Admin');
|
||||
$editor = $this->objFromFixture(Member::class, 'Editor');
|
||||
|
||||
$tag = $this->objFromFixture(BlogTag::class, 'FirstTag');
|
||||
|
||||
$this->assertTrue($tag->canDelete($admin), 'Admin should be able to delete tag.');
|
||||
$this->assertTrue($tag->canDelete($editor), 'Editor should be able to delete tag.');
|
||||
|
||||
$tag = $this->objFromFixture(BlogTag::class, 'SecondTag');
|
||||
|
||||
$this->assertTrue($tag->canDelete($admin), 'Admin should be able to delete tag.');
|
||||
$this->assertFalse($tag->canDelete($editor), 'Editor should not be able to delete tag.');
|
||||
|
||||
$tag = $this->objFromFixture(BlogTag::class, 'ThirdTag');
|
||||
|
||||
$this->assertTrue($tag->canDelete($admin), 'Admin should always be able to delete tags.');
|
||||
$this->assertTrue($tag->canDelete($editor), 'Editor should be able to delete tag.');
|
||||
}
|
||||
|
||||
public function testDuplicateTagsForURLSegment()
|
||||
{
|
||||
$blog = new Blog();
|
||||
$blog->Title = 'Testing for duplicates blog';
|
||||
$blog->write();
|
||||
$tag1 = new BlogTag();
|
||||
$tag1->Title = 'cat-test';
|
||||
$tag1->BlogID = $blog->ID;
|
||||
$tag1->write();
|
||||
$this->assertEquals('cat-test', $tag1->URLSegment);
|
||||
|
||||
$tag2 = new BlogTag();
|
||||
$tag2->Title = 'cat test';
|
||||
$tag2->BlogID = $blog->ID;
|
||||
$tag2->write();
|
||||
$this->assertEquals('cat-test-1', $tag2->URLSegment);
|
||||
}
|
||||
|
||||
public function testDuplicateTags()
|
||||
{
|
||||
$blog = new Blog();
|
||||
$blog->Title = 'Testing for duplicate tags';
|
||||
$blog->write();
|
||||
|
||||
$tag = new BlogTag();
|
||||
$tag->Title = 'Test';
|
||||
$tag->BlogID = $blog->ID;
|
||||
$tag->URLSegment = 'test';
|
||||
$tag->write();
|
||||
|
||||
$tag = new BlogTag();
|
||||
$tag->Title = 'Test';
|
||||
$tag->URLSegment = 'test';
|
||||
$tag->BlogID = $blog->ID;
|
||||
try {
|
||||
$tag->write();
|
||||
$this->fail('Duplicate BlogTag written');
|
||||
} catch (ValidationException $e) {
|
||||
$messages = $e->getResult()->getMessages();
|
||||
$this->assertCount(1, $messages);
|
||||
$this->assertEquals(BlogTag::DUPLICATE_EXCEPTION, $messages[0]['messageType']);
|
||||
}
|
||||
}
|
||||
|
||||
public function testBlogTagUrlSegmentsAreAutomaticallyUpdated()
|
||||
{
|
||||
$tag = new BlogTag;
|
||||
$tag->Title = "a test";
|
||||
$tag->write();
|
||||
$this->assertEquals($tag->URLSegment, "a-test");
|
||||
|
||||
$tag->Title = "another test";
|
||||
$tag->write();
|
||||
$this->assertEquals($tag->URLSegment, "another-test");
|
||||
}
|
||||
}
|
@ -1,71 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Blog\Widgets\BlogTagsCloudWidget;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
class BlogTagsCloudWidgetTest extends SapphireTest
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected static $fixture_file = 'blog.yml';
|
||||
|
||||
public function testGetCMSFields()
|
||||
{
|
||||
if (!class_exists(Widget::class)) {
|
||||
$this->markTestSkipped('Widgets module not installed');
|
||||
}
|
||||
|
||||
$widget = new BlogTagsCloudWidget();
|
||||
$fields = $widget->getCMSFields();
|
||||
$names = [];
|
||||
foreach ($fields as $field) {
|
||||
array_push($names, $field->getName());
|
||||
}
|
||||
|
||||
$expected = ['Title', 'Enabled', 'BlogID'];
|
||||
$this->assertEquals($expected, $names);
|
||||
}
|
||||
|
||||
public function testGetTags()
|
||||
{
|
||||
if (!class_exists(Widget::class)) {
|
||||
$this->markTestSkipped('Widgets module not installed');
|
||||
}
|
||||
$widget = new BlogTagsCloudWidget();
|
||||
$blog = $this->objFromFixture(Blog::class, 'FourthBlog');
|
||||
$widget->BlogID = $blog->ID;
|
||||
$widget->write();
|
||||
$tags = $widget->getTags()->toArray();
|
||||
|
||||
$tag = $tags[0];
|
||||
$this->assertEquals('Cat', $tag->TagName);
|
||||
$this->assertEquals(Controller::join_links(Director::baseURL(), 'fourth-blog/tag/cat'), $tag->Link);
|
||||
$this->assertEquals(2, $tag->TagCount);
|
||||
$this->assertEquals(5, $tag->NormalizedTag);
|
||||
|
||||
$tag = $tags[1];
|
||||
$this->assertEquals('Cool', $tag->TagName);
|
||||
$this->assertEquals(Controller::join_links(Director::baseURL(), 'fourth-blog/tag/cool'), $tag->Link);
|
||||
$this->assertEquals(3, $tag->TagCount);
|
||||
$this->assertEquals(8, $tag->NormalizedTag);
|
||||
|
||||
$tag = $tags[2];
|
||||
$this->assertEquals('Kiwi', $tag->TagName);
|
||||
$this->assertEquals(Controller::join_links(Director::baseURL(), 'fourth-blog/tag/kiwi'), $tag->Link);
|
||||
$this->assertEquals(1, $tag->TagCount);
|
||||
$this->assertEquals(3, $tag->NormalizedTag);
|
||||
|
||||
$tag = $tags[3];
|
||||
$this->assertEquals('Popular', $tag->TagName);
|
||||
$this->assertEquals(Controller::join_links(Director::baseURL(), 'fourth-blog/tag/popular'), $tag->Link);
|
||||
$this->assertEquals(4, $tag->TagCount);
|
||||
$this->assertEquals(10, $tag->NormalizedTag);
|
||||
}
|
||||
}
|
@ -1,376 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests;
|
||||
|
||||
use SilverStripe\Control\HTTPResponse_Exception;
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Blog\Model\BlogController;
|
||||
use SilverStripe\Blog\Model\BlogPost;
|
||||
use SilverStripe\CMS\Controllers\ContentController;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
use SilverStripe\Control\Session;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\ORM\SS_List;
|
||||
use SilverStripe\Security\Member;
|
||||
|
||||
class BlogTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'blog.yml';
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
DBDatetime::set_mock_now('2013-10-10 20:00:00');
|
||||
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
$blog->publishRecursive();
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
DBDatetime::clear_mock_now();
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
public function testGetExcludedSiteTreeClassNames()
|
||||
{
|
||||
$this->logOut();
|
||||
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
|
||||
Config::inst()->set(BlogPost::class, 'show_in_sitetree', true);
|
||||
$classes = $blog->getExcludedSiteTreeClassNames();
|
||||
|
||||
$this->assertNotContains(BlogPost::class, $classes, 'BlogPost class should be hidden.');
|
||||
|
||||
Config::inst()->set(BlogPost::class, 'show_in_sitetree', false);
|
||||
$classes = $blog->getExcludedSiteTreeClassNames();
|
||||
|
||||
$this->assertContains(BlogPost::class, $classes, 'BlogPost class should be hidden.');
|
||||
}
|
||||
|
||||
public function testGetArchivedBlogPosts()
|
||||
{
|
||||
$this->logOut();
|
||||
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
|
||||
$archive = $blog->getArchivedBlogPosts(2013);
|
||||
|
||||
$this->assertEquals(2, $archive->count(), 'Incorrect Yearly Archive count for 2013');
|
||||
$this->assertEquals('First Post', $archive->first()->Title, 'Incorrect First Blog post');
|
||||
$this->assertEquals('Second Post', $archive->last()->Title, 'Incorrect Last Blog post');
|
||||
|
||||
$archive = $blog->getArchivedBlogPosts(2013, 10);
|
||||
|
||||
$this->assertEquals(1, $archive->count(), 'Incorrect monthly archive count.');
|
||||
|
||||
$archive = $blog->getArchivedBlogPosts(2013, 10, 01);
|
||||
|
||||
$this->assertEquals(1, $archive->count(), 'Incorrect daily archive count.');
|
||||
}
|
||||
|
||||
public function testArchiveLinks()
|
||||
{
|
||||
/**
|
||||
* @var Blog $blog
|
||||
*/
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013', '10', '01');
|
||||
|
||||
$this->assertEquals(200, $this->getStatusOf($link), 'HTTP Status should be 200');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013', '10');
|
||||
|
||||
$this->assertEquals(200, $this->getStatusOf($link), 'HTTP Status should be 200');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013');
|
||||
|
||||
$this->assertEquals(200, $this->getStatusOf($link), 'HTTP Status should be 200');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2011', '10', '01');
|
||||
|
||||
$this->assertEquals(200, $this->getStatusOf($link), 'HTTP Status should be 200');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'));
|
||||
$this->assertEquals(200, $this->getStatusOf($link), 'HTTP Status should be 200');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), 'invalid-year');
|
||||
|
||||
$this->assertEquals(404, $this->getStatusOf($link), 'HTTP Status should be 404');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013', '99');
|
||||
|
||||
$this->assertEquals(404, $this->getStatusOf($link), 'HTTP Status should be 404');
|
||||
|
||||
$link = Controller::join_links($blog->Link('archive'), '2013', '10', '99');
|
||||
|
||||
$this->assertEquals(404, $this->getStatusOf($link), 'HTTP Status should be 404');
|
||||
}
|
||||
|
||||
/*
|
||||
* Test archive year
|
||||
*/
|
||||
public function testArchiveYear()
|
||||
{
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
$controller = new BlogController($blog);
|
||||
$this->requestURL($controller, 'first-post/archive/');
|
||||
$this->assertEquals(2013, $controller->getArchiveYear(), 'getArchiveYear should return 2013');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $link
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
protected function getStatusOf($link)
|
||||
{
|
||||
return Director::test($link)->getStatusCode();
|
||||
}
|
||||
|
||||
public function testRoles()
|
||||
{
|
||||
/**
|
||||
* @var Blog $firstBlog
|
||||
*/
|
||||
$firstBlog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
|
||||
/**
|
||||
* @var Blog $fourthBlog
|
||||
*/
|
||||
$fourthBlog = $this->objFromFixture(Blog::class, 'FourthBlog');
|
||||
|
||||
/**
|
||||
* @var BlogPost $postA
|
||||
*/
|
||||
$postA = $this->objFromFixture(BlogPost::class, 'PostA');
|
||||
|
||||
/**
|
||||
* @var BlogPost $postB
|
||||
*/
|
||||
$postB = $this->objFromFixture(BlogPost::class, 'PostB');
|
||||
|
||||
/**
|
||||
* @var BlogPost $postC
|
||||
*/
|
||||
$postC = $this->objFromFixture(BlogPost::class, 'PostC');
|
||||
|
||||
/**
|
||||
* @var Member $editor
|
||||
*/
|
||||
$editor = $this->objFromFixture(Member::class, 'BlogEditor');
|
||||
|
||||
/**
|
||||
* @var Member $writer
|
||||
*/
|
||||
$writer = $this->objFromFixture(Member::class, 'Writer');
|
||||
|
||||
/**
|
||||
* @var Member $contributor
|
||||
*/
|
||||
$contributor = $this->objFromFixture(Member::class, 'Contributor');
|
||||
|
||||
/**
|
||||
* @var Member $visitor
|
||||
*/
|
||||
$visitor = $this->objFromFixture(Member::class, 'Visitor');
|
||||
|
||||
$this->assertEquals('Editor', $fourthBlog->RoleOf($editor));
|
||||
$this->assertEquals('Contributor', $fourthBlog->RoleOf($contributor));
|
||||
$this->assertEquals('Writer', $fourthBlog->RoleOf($writer));
|
||||
$this->assertEmpty($fourthBlog->RoleOf($visitor));
|
||||
$this->assertEquals('Author', $postA->RoleOf($writer));
|
||||
$this->assertEquals('Author', $postA->RoleOf($contributor));
|
||||
$this->assertEquals('Editor', $postA->RoleOf($editor));
|
||||
$this->assertEmpty($postA->RoleOf($visitor));
|
||||
|
||||
// Test RoleOf with string values given
|
||||
$this->assertEquals('Editor', $fourthBlog->RoleOf((string)(int)$editor->ID));
|
||||
$this->assertEquals('Contributor', $fourthBlog->RoleOf((string)(int)$contributor->ID));
|
||||
$this->assertEquals('Writer', $fourthBlog->RoleOf((string)(int)$writer->ID));
|
||||
$this->assertEmpty($fourthBlog->RoleOf((string)(int)$visitor->ID));
|
||||
$this->assertEquals('Author', $postA->RoleOf((string)(int)$writer->ID));
|
||||
$this->assertEquals('Author', $postA->RoleOf((string)(int)$contributor->ID));
|
||||
$this->assertEquals('Editor', $postA->RoleOf((string)(int)$editor->ID));
|
||||
$this->assertEmpty($postA->RoleOf((string)(int)$visitor->ID));
|
||||
|
||||
// Test RoleOf with int values given
|
||||
$this->assertEquals('Editor', $fourthBlog->RoleOf((int)$editor->ID));
|
||||
$this->assertEquals('Contributor', $fourthBlog->RoleOf((int)$contributor->ID));
|
||||
$this->assertEquals('Writer', $fourthBlog->RoleOf((int)$writer->ID));
|
||||
$this->assertEmpty($fourthBlog->RoleOf((int)$visitor->ID));
|
||||
$this->assertEquals('Author', $postA->RoleOf((int)$writer->ID));
|
||||
$this->assertEquals('Author', $postA->RoleOf((int)$contributor->ID));
|
||||
$this->assertEquals('Editor', $postA->RoleOf((int)$editor->ID));
|
||||
$this->assertEmpty($postA->RoleOf((int)$visitor->ID));
|
||||
|
||||
$this->assertTrue($fourthBlog->canEdit($editor));
|
||||
$this->assertFalse($firstBlog->canEdit($editor));
|
||||
$this->assertTrue($fourthBlog->canAddChildren($editor));
|
||||
$this->assertFalse($firstBlog->canAddChildren($editor));
|
||||
$this->assertTrue($postA->canEdit($editor));
|
||||
$this->assertTrue($postB->canEdit($editor));
|
||||
$this->assertTrue($postC->canEdit($editor));
|
||||
$this->assertTrue($postA->canPublish($editor));
|
||||
$this->assertTrue($postB->canPublish($editor));
|
||||
$this->assertTrue($postC->canPublish($editor));
|
||||
|
||||
$this->assertFalse($fourthBlog->canEdit($writer));
|
||||
$this->assertFalse($firstBlog->canEdit($writer));
|
||||
$this->assertTrue($fourthBlog->canAddChildren($writer));
|
||||
$this->assertFalse($firstBlog->canAddChildren($writer));
|
||||
$this->assertTrue($postA->canEdit($writer));
|
||||
$this->assertFalse($postB->canEdit($writer));
|
||||
$this->assertTrue($postC->canEdit($writer));
|
||||
$this->assertTrue($postA->canPublish($writer));
|
||||
$this->assertFalse($postB->canPublish($writer));
|
||||
$this->assertTrue($postC->canPublish($writer));
|
||||
|
||||
$this->assertFalse($fourthBlog->canEdit($contributor));
|
||||
$this->assertFalse($firstBlog->canEdit($contributor));
|
||||
$this->assertTrue($fourthBlog->canAddChildren($contributor));
|
||||
$this->assertFalse($firstBlog->canAddChildren($contributor));
|
||||
$this->assertTrue($postA->canEdit($contributor));
|
||||
$this->assertFalse($postB->canEdit($contributor));
|
||||
$this->assertTrue($postC->canEdit($contributor));
|
||||
$this->assertFalse($postA->canPublish($contributor));
|
||||
$this->assertFalse($postB->canPublish($contributor));
|
||||
$this->assertFalse($postC->canPublish($contributor));
|
||||
|
||||
$this->assertFalse($fourthBlog->canEdit($visitor));
|
||||
$this->assertFalse($firstBlog->canEdit($visitor));
|
||||
$this->assertFalse($fourthBlog->canAddChildren($visitor));
|
||||
$this->assertFalse($firstBlog->canAddChildren($visitor));
|
||||
$this->assertFalse($postA->canEdit($visitor));
|
||||
$this->assertFalse($postB->canEdit($visitor));
|
||||
$this->assertFalse($postC->canEdit($visitor));
|
||||
$this->assertFalse($postA->canPublish($visitor));
|
||||
$this->assertFalse($postB->canPublish($visitor));
|
||||
$this->assertFalse($postC->canPublish($visitor));
|
||||
}
|
||||
|
||||
public function testFilteredCategoriesRoot()
|
||||
{
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
$controller = new BlogController($blog);
|
||||
$this->requestURL($controller, 'first-post');
|
||||
$this->assertIDsEquals(
|
||||
$blog->AllChildren()->column('ID'),
|
||||
$controller->PaginatedList()->column('ID')
|
||||
);
|
||||
}
|
||||
|
||||
public function testFilteredCategoriesRSS()
|
||||
{
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
$controller = new BlogController($blog);
|
||||
$this->requestURL($controller, 'first-post/rss');
|
||||
$this->assertIDsEquals(
|
||||
$blog->AllChildren()->column('ID'),
|
||||
$controller->PaginatedList()->column('ID')
|
||||
);
|
||||
}
|
||||
|
||||
public function testFilteredCategoriesTags()
|
||||
{
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
$controller = new BlogController($blog);
|
||||
|
||||
// Posts
|
||||
$firstPostID = $this->idFromFixture(BlogPost::class, 'FirstBlogPost');
|
||||
$firstFuturePostID = $this->idFromFixture(BlogPost::class, 'FirstFutureBlogPost');
|
||||
$secondFuturePostID = $this->idFromFixture(BlogPost::class, 'SecondFutureBlogPost');
|
||||
|
||||
// Request first tag
|
||||
$this->requestURL($controller, 'first-post/tag/first-tag');
|
||||
$this->assertIDsEquals(
|
||||
[$firstPostID, $firstFuturePostID, $secondFuturePostID],
|
||||
$controller->PaginatedList()
|
||||
);
|
||||
}
|
||||
|
||||
public function testFilteredCategoriesArchive()
|
||||
{
|
||||
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
|
||||
$controller = new BlogController($blog);
|
||||
|
||||
// Posts
|
||||
$firstPostID = $this->idFromFixture(BlogPost::class, 'FirstBlogPost');
|
||||
$secondPostID = $this->idFromFixture(BlogPost::class, 'SecondBlogPost');
|
||||
$secondFuturePostID = $this->idFromFixture(BlogPost::class, 'SecondFutureBlogPost');
|
||||
|
||||
// Request 2013 posts
|
||||
$this->requestURL($controller, 'first-post/archive/2013');
|
||||
$this->assertIDsEquals(
|
||||
[$firstPostID, $secondPostID, $secondFuturePostID],
|
||||
$controller->PaginatedList()
|
||||
);
|
||||
}
|
||||
|
||||
public function testDisabledProfiles()
|
||||
{
|
||||
$this->expectException(HTTPResponse_Exception::class);
|
||||
$this->expectExceptionCode(404);
|
||||
Config::modify()->set(BlogController::class, 'disable_profiles', true);
|
||||
|
||||
$controller = BlogController::create();
|
||||
$controller->setRequest(Controller::curr()->getRequest());
|
||||
$controller->profile();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock a request against a given controller
|
||||
*
|
||||
* @param ContentController $controller
|
||||
* @param string $url
|
||||
*/
|
||||
protected function requestURL(ContentController $controller, $url)
|
||||
{
|
||||
$request = new HTTPRequest('get', $url);
|
||||
$request->match('$URLSegment//$Action/$ID/$OtherID');
|
||||
$request->shift();
|
||||
$session = new Session(null);
|
||||
$session->start($request);
|
||||
$request->setSession($session);
|
||||
$controller->doInit();
|
||||
$controller->handleRequest($request);
|
||||
$session->clearAll();
|
||||
$session->destroy();
|
||||
}
|
||||
|
||||
/**
|
||||
* Assert these id lists match
|
||||
*
|
||||
* @param array|SS_List $left
|
||||
* @param array|SS_List $right
|
||||
*/
|
||||
protected function assertIDsEquals($left, $right)
|
||||
{
|
||||
if ($left instanceof SS_List) {
|
||||
$left = $left->column('ID');
|
||||
}
|
||||
if ($right instanceof SS_List) {
|
||||
$right = $right->column('ID');
|
||||
}
|
||||
asort($left);
|
||||
asort($right);
|
||||
$this->assertEquals(array_values($left ?? []), array_values($right ?? []));
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests\Model;
|
||||
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Dev\FunctionalTest;
|
||||
use SilverStripe\i18n\i18n;
|
||||
use SilverStripe\View\Parsers\URLSegmentFilter;
|
||||
|
||||
class BlogControllerFunctionalTest extends FunctionalTest
|
||||
{
|
||||
protected static $fixture_file = 'BlogControllerFunctionalTest.yml';
|
||||
|
||||
protected static $use_draft_site = true;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
Config::modify()->set(URLSegmentFilter::class, 'default_allow_multibyte', true);
|
||||
i18n::set_locale('fa_IR');
|
||||
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
public function testGetCategoriesWithMultibyteUrl()
|
||||
{
|
||||
$result = $this->get('my-blog/category/' . rawurlencode('آبید'));
|
||||
|
||||
$this->assertEquals(200, $result->getStatusCode());
|
||||
$this->assertStringContainsString('آبید', $result->getBody());
|
||||
}
|
||||
|
||||
public function testGetTagsWithMultibyteUrl()
|
||||
{
|
||||
$result = $this->get('my-blog/tag/' . rawurlencode('برتراند'));
|
||||
|
||||
$this->assertEquals(200, $result->getStatusCode());
|
||||
$this->assertStringContainsString('برتراند', $result->getBody());
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
category_a:
|
||||
Title: آبید
|
||||
URLSegment: آبید
|
||||
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
tag_a:
|
||||
Title: برتراند
|
||||
URLSegment: برتراند
|
||||
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
blog_a:
|
||||
URLSegment: my-blog
|
||||
Title: My Blog
|
||||
Categories:
|
||||
- =>SilverStripe\Blog\Model\BlogCategory.category_a
|
||||
Tags:
|
||||
- =>SilverStripe\Blog\Model\BlogTag.tag_a
|
||||
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
blogpost_a:
|
||||
Title: My Blog Post
|
||||
URLSegment: آبیدآبید
|
||||
PublishDate: 2017-08-01 00:00:00
|
||||
Parent: =>SilverStripe\Blog\Model\Blog.blog_a
|
||||
Categories:
|
||||
- =>SilverStripe\Blog\Model\BlogCategory.category_a
|
||||
Tags:
|
||||
- =>SilverStripe\Blog\Model\BlogTag.tag_a
|
@ -1,131 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Blog\Tests;
|
||||
|
||||
use SilverStripe\Blog\Model\Blog;
|
||||
use SilverStripe\Blog\Model\BlogPost;
|
||||
use SilverStripe\Blog\Widgets\BlogArchiveWidget;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\ORM\SS_List;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
class BlogArchiveWidgetTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'BlogArchiveWidgetTest.yml';
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
if (!class_exists(Widget::class)) {
|
||||
self::$fixture_file = null;
|
||||
parent::setUp();
|
||||
$this->markTestSkipped('Test requires silverstripe/widgets to be installed.');
|
||||
}
|
||||
|
||||
DBDatetime::set_mock_now('2017-09-20 12:00:00');
|
||||
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
parent::tearDown();
|
||||
|
||||
DBDatetime::clear_mock_now();
|
||||
}
|
||||
|
||||
public function testArchiveMonthlyFromStage()
|
||||
{
|
||||
$widgetA = $this->objFromFixture(BlogArchiveWidget::class, 'archive-monthly-a');
|
||||
$archiveA = $widgetA->getArchive();
|
||||
|
||||
$this->assertInstanceOf(SS_List::class, $archiveA);
|
||||
$this->assertCount(3, $archiveA);
|
||||
$this->assertListContains([
|
||||
['Title' => 'August 2017'],
|
||||
['Title' => 'September 2017'],
|
||||
['Title' => 'May 2015'],
|
||||
], $archiveA);
|
||||
|
||||
$widgetB = $this->objFromFixture(BlogArchiveWidget::class, 'archive-monthly-b');
|
||||
$archiveB = $widgetB->getArchive();
|
||||
|
||||
$this->assertInstanceOf(SS_List::class, $archiveB);
|
||||
$this->assertCount(2, $archiveB);
|
||||
$this->assertListContains([
|
||||
['Title' => 'March 2016'],
|
||||
['Title' => 'June 2016'],
|
||||
], $archiveB);
|
||||
}
|
||||
|
||||
public function testArchiveMonthlyFromLive()
|
||||
{
|
||||
$original = Versioned::get_stage();
|
||||
|
||||
$this->objFromFixture(BlogPost::class, 'post-b')->publishRecursive();
|
||||
$this->objFromFixture(BlogArchiveWidget::class, 'archive-monthly-a')->publishRecursive();
|
||||
Versioned::set_stage(Versioned::LIVE);
|
||||
|
||||
$widget = $this->objFromFixture(BlogArchiveWidget::class, 'archive-monthly-a');
|
||||
$archive = $widget->getArchive();
|
||||
|
||||
$this->assertCount(1, $archive);
|
||||
$this->assertListContains([
|
||||
['Title' => 'August 2017'],
|
||||
], $archive);
|
||||
|
||||
if ($original) {
|
||||
Versioned::set_stage($original);
|
||||
}
|
||||
}
|
||||
|
||||
public function testArchiveYearly()
|
||||
{
|
||||
$widgetA = $this->objFromFixture(BlogArchiveWidget::class, 'archive-yearly-a');
|
||||
$archiveA = $widgetA->getArchive();
|
||||
|
||||
$this->assertInstanceOf(SS_List::class, $archiveA);
|
||||
$this->assertCount(2, $archiveA);
|
||||
$this->assertListContains([
|
||||
['Title' => '2017'],
|
||||
['Title' => '2015'],
|
||||
], $archiveA);
|
||||
|
||||
$widgetB = $this->objFromFixture(BlogArchiveWidget::class, 'archive-yearly-b');
|
||||
$archiveB = $widgetB->getArchive();
|
||||
|
||||
$this->assertInstanceOf(SS_List::class, $archiveB);
|
||||
$this->assertCount(1, $archiveB);
|
||||
$this->assertListContains([
|
||||
['Title' => '2016'],
|
||||
], $archiveB);
|
||||
}
|
||||
|
||||
public function testArchiveMonthlyWithNewPostsAdded()
|
||||
{
|
||||
$original = Versioned::get_stage();
|
||||
Versioned::set_stage('Stage');
|
||||
|
||||
$widget = $this->objFromFixture(BlogArchiveWidget::class, 'archive-monthly-a');
|
||||
$archive = $widget->getArchive();
|
||||
|
||||
$this->assertCount(3, $archive, 'Three months are shown in the blog archive list from fixtures');
|
||||
|
||||
DBDatetime::set_mock_now('2018-01-01 12:00:00');
|
||||
|
||||
$newPost = new BlogPost;
|
||||
$newPost->ParentID = $this->objFromFixture(Blog::class, 'blog-a')->ID;
|
||||
$newPost->Title = 'My new blog post';
|
||||
$newPost->PublishDate = '2018-01-01 08:00:00'; // Same day as the mocked now, but slightly earlier
|
||||
$newPost->write();
|
||||
|
||||
$archive = $widget->getArchive();
|
||||
|
||||
$this->assertCount(4, $archive, 'Four months are shown in the blog archive list after new post added');
|
||||
|
||||
if ($original) {
|
||||
Versioned::set_stage($original);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
blog-a:
|
||||
Title: Blog A
|
||||
blog-b:
|
||||
Title: Blog B
|
||||
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
post-a:
|
||||
Title: September Digest
|
||||
PublishDate: 2017-09-01 00:00:00
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.blog-a
|
||||
post-b:
|
||||
Title: August is Awesome
|
||||
PublishDate: 2017-08-01 00:00:00
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.blog-a
|
||||
post-c:
|
||||
Title: 2015 is so two years ago
|
||||
PublishDate: 2015-05-02 00:01:02
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.blog-a
|
||||
post-d:
|
||||
Title: Blog post on Blog B
|
||||
PublishDate: 2016-03-13 21:05:36
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.blog-b
|
||||
post-e:
|
||||
Title: Blog post 2 on Blog B
|
||||
PublishDate: 2016-06-15 10:00:00
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.blog-b
|
||||
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
archive-monthly-a:
|
||||
NumberToDisplay: 5
|
||||
ArchiveType: Monthly
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.blog-a
|
||||
archive-monthly-b:
|
||||
NumberToDisplay: 5
|
||||
ArchiveType: Monthly
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.blog-b
|
||||
archive-yearly-a:
|
||||
NumberToDisplay: 5
|
||||
ArchiveType: Yearly
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.blog-a
|
||||
archive-yearly-b:
|
||||
NumberToDisplay: 5
|
||||
ArchiveType: Yearly
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.blog-b
|
@ -1,245 +0,0 @@
|
||||
# Mock date is set to 2013-10-01 20:00:00
|
||||
# Write to tables rather than dataobjects for performance
|
||||
SilverStripe\Security\Member:
|
||||
Admin:
|
||||
FirstName: Test
|
||||
Surname: Administrator
|
||||
Editor:
|
||||
FirstName: Test
|
||||
Surname: Editor
|
||||
BlogEditor:
|
||||
FirstName: Blog
|
||||
Surname: Editor
|
||||
Writer:
|
||||
FirstName: Blog
|
||||
Surname: Writer
|
||||
Contributor:
|
||||
FirstName: Blog
|
||||
Surname: Contributor
|
||||
Visitor:
|
||||
FirstName: Blog
|
||||
Surname: Visitor
|
||||
|
||||
SilverStripe\Security\Group:
|
||||
Administrators:
|
||||
Title: Administrators
|
||||
Members:
|
||||
- =>SilverStripe\Security\Member.Admin
|
||||
Editors:
|
||||
Title: Editors
|
||||
Members:
|
||||
- =>SilverStripe\Security\Member.Editor
|
||||
BlogUsers:
|
||||
Title: Blog Users
|
||||
Code: blogusers
|
||||
Members:
|
||||
- =>SilverStripe\Security\Member.BlogEditor
|
||||
- =>SilverStripe\Security\Member.Writer
|
||||
- =>SilverStripe\Security\Member.Contributor
|
||||
|
||||
SilverStripe\Security\Permission:
|
||||
Administrators:
|
||||
Code: ADMIN
|
||||
Group: =>SilverStripe\Security\Group.Administrators
|
||||
Editors:
|
||||
Code: CMS_ACCESS_CMSMain
|
||||
Group: =>SilverStripe\Security\Group.Editors
|
||||
BlogUsers:
|
||||
Code: CMS_ACCESS_CMSMain
|
||||
Group: =>SilverStripe\Security\Group.BlogUsers
|
||||
|
||||
SilverStripe\SiteConfig\SiteConfig:
|
||||
Default:
|
||||
CanEditType: 'OnlyTheseUsers'
|
||||
CanCreateTopLevelType: 'OnlyTheseUsers'
|
||||
EditorGroups:
|
||||
- =>SilverStripe\Security\Group.Administrators
|
||||
- =>SilverStripe\Security\Group.Editors
|
||||
CreateTopLevelGroups:
|
||||
- =>SilverStripe\Security\Group.Administrators
|
||||
- =>SilverStripe\Security\Group.Editors
|
||||
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
FirstBlog:
|
||||
ClassName: SilverStripe\Blog\Model\Blog
|
||||
Title: 'First Blog'
|
||||
URLSegment: 'first-blog'
|
||||
SecondBlog:
|
||||
ClassName: SilverStripe\Blog\Model\Blog
|
||||
Title: 'Second Blog'
|
||||
CanViewType: 'OnlyTheseUsers'
|
||||
CanEditType: 'OnlyTheseUsers'
|
||||
URLSegment: 'second-blog'
|
||||
ViewerGroups:
|
||||
- =>SilverStripe\Security\Group.Administrators
|
||||
EditorGroups:
|
||||
- =>SilverStripe\Security\Group.Administrators
|
||||
ThirdBlog:
|
||||
ClassName: SilverStripe\Blog\Model\Blog
|
||||
Title: 'Third Blog'
|
||||
CanEditType: 'OnlyTheseUsers'
|
||||
URLSegment: 'third-blog'
|
||||
EditorGroups:
|
||||
- =>SilverStripe\Security\Group.Editors
|
||||
FourthBlog:
|
||||
ClassName: SilverStripe\Blog\Model\Blog
|
||||
Title: 'Fourth Blog'
|
||||
URLSegment: 'fourth-blog'
|
||||
Editors: =>SilverStripe\Security\Member.BlogEditor
|
||||
Writers: =>SilverStripe\Security\Member.Writer
|
||||
Contributors: =>SilverStripe\Security\Member.Contributor
|
||||
|
||||
SilverStripe\Blog\Model\BlogCategory:
|
||||
FirstCategory:
|
||||
Title: 'First Category'
|
||||
URLSegment: 'first-category'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.FirstBlog
|
||||
SecondCategory:
|
||||
Title: 'Second Category'
|
||||
URLSegment: 'second-category'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.SecondBlog
|
||||
ThirdCategory:
|
||||
Title: 'Third Category'
|
||||
URLSegment: 'third-category'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.ThirdBlog
|
||||
|
||||
SilverStripe\Blog\Model\BlogTag:
|
||||
FirstTag:
|
||||
Title: 'First Tag'
|
||||
URLSegment: 'first-tag'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.FirstBlog
|
||||
SecondTag:
|
||||
Title: 'Second Tag'
|
||||
URLSegment: 'second-tag'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.SecondBlog
|
||||
ThirdTag:
|
||||
Title: 'Third Tag'
|
||||
URLSegment: 'third-tag'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.ThirdBlog
|
||||
|
||||
#Tags for Tag Cloud widget
|
||||
PopularTag:
|
||||
Title: 'Popular'
|
||||
URLSegment: 'popular'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
CoolTag:
|
||||
Title: 'Cool'
|
||||
URLSegment: 'cool'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
CatTag:
|
||||
Title: 'Cat'
|
||||
URLSegment: 'cat'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
KiwiTag:
|
||||
Title: 'Kiwi'
|
||||
URLSegment: 'kiwi'
|
||||
BlogID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
FirstBlogPost:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'First Post'
|
||||
URLSegment: first-post
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FirstBlog
|
||||
PublishDate: '2013-10-01 15:00:00'
|
||||
Tags: =>SilverStripe\Blog\Model\BlogTag.FirstTag
|
||||
Categories: =>SilverStripe\Blog\Model\BlogCategory.FirstCategory
|
||||
Content: >
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent commodo tristique ipsum. Vestibulum ut sagittis elit. Curabitur accumsan dui ac iaculis fermentum. Suspendisse consectetur sapien a dignissim porta. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam mollis, est quis mollis posuere, purus diam interdum magna, vel tempus libero nibh a nunc. Duis enim lectus, consectetur dapibus interdum quis, dignissim at neque. Maecenas efficitur nibh et ipsum mattis molestie. Sed id euismod risus, a efficitur nibh. Nullam erat nibh, aliquam non ante quis, euismod facilisis dui. Fusce eget tellus nec mi accumsan iaculis vitae id neque. Ut rhoncus, felis id venenatis porttitor, ex nibh varius turpis, in pulvinar sem ligula at odio. Suspendisse molestie eros et elit sagittis, nec condimentum quam scelerisque. Donec maximus ligula nec nunc mattis imperdiet. Vestibulum maximus mauris quis pulvinar iaculis.</p>
|
||||
<p>Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi non sapien eget elit venenatis tristique. Nunc mollis ante eu metus iaculis tempus. Nulla at nibh nisl. Phasellus a lacus urna. Fusce vulputate elit eu aliquet fringilla. Donec vitae efficitur ex, et rutrum nunc. Quisque sed sem at dui congue venenatis vel sit amet lectus.</p>
|
||||
<p>Fusce fermentum sapien massa, in vehicula massa faucibus ultrices. In tempor nunc at sodales pellentesque. Proin nunc elit, faucibus non vestibulum sed, varius a felis. Maecenas in justo ut ante mollis mattis. Nam placerat mi nec justo semper blandit. Ut pretium nibh justo, sit amet molestie lorem tempus vitae. Integer vehicula eget purus sed mattis. Nam sit amet lobortis quam. Vestibulum nisl diam, commodo eget maximus at, interdum non quam. Praesent et lorem consequat, ornare nulla id, ultricies odio. Ut porta dapibus metus ut fringilla. Vivamus sit amet elit eu dolor varius blandit. Morbi pharetra a odio id tempus.</p>
|
||||
<p>Phasellus at ipsum faucibus, auctor nisi eu, vestibulum diam. Cras viverra ut massa eleifend volutpat. Ut vel sapien et mi pharetra tempor. Nam at scelerisque orci. Pellentesque pulvinar in dui ut scelerisque. Sed ultrices mauris nec commodo faucibus. Sed urna erat, faucibus quis sem non, auctor tincidunt mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac tellus orci. Vivamus tincidunt turpis a sem ullamcorper, eu porttitor mauris condimentum. Aliquam auctor nisl quis massa sodales, nec venenatis metus facilisis. Duis posuere, ante at tristique tristique, sapien ligula sollicitudin purus, ut vehicula tellus mi sed mi. Fusce tortor mi, imperdiet non sollicitudin.</p>
|
||||
<p>Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi non sapien eget elit venenatis tristique. Nunc mollis ante eu metus iaculis tempus. Nulla at nibh nisl. Phasellus a lacus urna. Fusce vulputate elit eu aliquet fringilla. Donec vitae efficitur ex, et rutrum nunc. Quisque sed sem at dui congue venenatis vel sit amet lectus.</p>
|
||||
SecondBlogPost:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Second Post'
|
||||
URLSegment: second-post
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FirstBlog
|
||||
PublishDate: '2013-09-01 15:00:00'
|
||||
Content: >
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas nec accumsan dolor, at viverra nibh. Vivamus lectus magna, interdum sit amet libero non, fermentum semper nunc. Nunc eu arcu euismod mauris auctor venenatis. Integer sem lorem, varius iaculis congue et, blandit eget nisi. Quisque ullamcorper laoreet sagittis. Nulla enim metus, viverra ut commodo ut, imperdiet et velit. Sed tincidunt mi condimentum, sodales lectus id, dictum neque. Suspendisse placerat, nibh at mattis volutpat, mauris augue congue dui, lobortis tempor diam magna vitae ligula. Proin sed turpis quis enim maximus sodales sit amet id diam. Proin sollicitudin elementum suscipit.</p>
|
||||
<p>Nullam at odio eget orci porttitor pharetra. Proin scelerisque mauris quam, non laoreet lectus tempor sed. Curabitur eleifend vel augue et vulputate. In porta magna vitae felis rutrum, et sodales elit ultricies. Proin ac justo nec sem maximus ultrices. Praesent nibh turpis, congue non malesuada id, tincidunt id augue. Aenean vulputate ullamcorper dapibus. Maecenas tincidunt sapien in dolor feugiat porta. Aenean venenatis nibh nunc, ut lacinia dolor luctus at. Integer viverra velit nec tincidunt venenatis. Duis congue blandit ante et convallis. Donec id convallis lorem. Vestibulum vel pellentesque nisl. Nunc accumsan non nisi vitae ultricies. Nam tempus elit at ornare volutpat. Nullam et.</p>
|
||||
ThirdBlogPost:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Old Post'
|
||||
URLSegment: old-post
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FirstBlog
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
Content: >
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas nec accumsan dolor, at viverra nibh. Vivamus lectus magna, interdum sit amet libero non, fermentum semper nunc. Nunc eu arcu euismod mauris auctor venenatis. Integer sem lorem, varius iaculis congue et, blandit eget nisi. Quisque ullamcorper laoreet sagittis. Nulla enim metus, viverra ut commodo ut, imperdiet et velit. Sed tincidunt mi condimentum, sodales lectus id, dictum neque. Suspendisse placerat, nibh at mattis volutpat, mauris augue congue dui, lobortis tempor diam magna vitae ligula. Proin sed turpis quis enim maximus sodales sit amet id diam. Proin sollicitudin elementum suscipit.</p>
|
||||
FirstFutureBlogPost:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Future Post'
|
||||
URLSegment: future-post
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FirstBlog
|
||||
PublishDate: '2015-01-01 00:00:00'
|
||||
Tags: =>SilverStripe\Blog\Model\BlogTag.FirstTag
|
||||
Categories: =>SilverStripe\Blog\Model\BlogCategory.FirstCategory
|
||||
SecondFutureBlogPost:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Future Post 2'
|
||||
URLSegment: future-post-2
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FirstBlog
|
||||
PublishDate: '2013-11-01 00:00:00'
|
||||
Tags: =>SilverStripe\Blog\Model\BlogTag.FirstTag
|
||||
Categories: =>SilverStripe\Blog\Model\BlogCategory.FirstCategory
|
||||
PostA:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'One Post'
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
Authors: =>SilverStripe\Security\Member.Writer,=>SilverStripe\Security\Member.Contributor
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
PostB:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Second Post'
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
Authors: =>SilverStripe\Security\Member.BlogEditor
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
PostC:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Third Post'
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
Authors: =>SilverStripe\Security\Member.Writer,=>SilverStripe\Security\Member.Contributor,=>SilverStripe\Security\Member.BlogEditor
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
NullPublishDate:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'No publish date'
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
Authors: =>SilverStripe\Security\Member.Writer,=>SilverStripe\Security\Member.Contributor,=>SilverStripe\Security\Member.BlogEditor
|
||||
PublishDate: null
|
||||
|
||||
#Posts for the tag cloud widget test
|
||||
TaggedPost1:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Tagged Post 1'
|
||||
URLSegment: tagged-post-1
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
Tags: =>SilverStripe\Blog\Model\BlogTag.PopularTag,=>SilverStripe\Blog\Model\BlogTag.CoolTag
|
||||
Categories: =>SilverStripe\Blog\Model\BlogCategory.FirstCategory
|
||||
TaggedPost2:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Tagged Post 2'
|
||||
URLSegment: tagged-post-2
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
PublishDate: '2012-01-09 15:00:00'
|
||||
Tags: =>SilverStripe\Blog\Model\BlogTag.PopularTag,=>SilverStripe\Blog\Model\BlogTag.CoolTag,=>SilverStripe\Blog\Model\BlogTag.CatTag
|
||||
Categories: =>SilverStripe\Blog\Model\BlogCategory.FirstCategory
|
||||
TaggedPost3:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Tagged Post 3'
|
||||
URLSegment: tagged-post-3
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
PublishDate: '2012-01-09 17:20:00'
|
||||
Tags: =>SilverStripe\Blog\Model\BlogTag.PopularTag,=>SilverStripe\Blog\Model\BlogTag.CoolTag,=>SilverStripe\Blog\Model\BlogTag.CatTag,=>SilverStripe\Blog\Model\BlogTag.KiwiTag
|
||||
Categories: =>SilverStripe\Blog\Model\BlogCategory.FirstCategory
|
||||
TaggedPost4:
|
||||
ClassName: SilverStripe\Blog\Model\BlogPost
|
||||
Title: 'Tagged Post 4'
|
||||
URLSegment: tagged-post-4
|
||||
ParentID: =>SilverStripe\Blog\Model\Blog.FourthBlog
|
||||
PublishDate: '2012-04-09 15:00:00'
|
||||
Tags: =>SilverStripe\Blog\Model\BlogTag.PopularTag
|
||||
Categories: =>SilverStripe\Blog\Model\BlogCategory.FirstCategory
|
||||
|
||||
|
@ -1,55 +0,0 @@
|
||||
const Path = require('path');
|
||||
const webpack = require('webpack');
|
||||
// Import the core config
|
||||
const webpackConfig = require('@silverstripe/webpack-config');
|
||||
const {
|
||||
resolveJS,
|
||||
externalJS,
|
||||
moduleJS,
|
||||
pluginJS,
|
||||
moduleCSS,
|
||||
pluginCSS,
|
||||
} = webpackConfig;
|
||||
|
||||
const ENV = process.env.NODE_ENV;
|
||||
const PATHS = {
|
||||
ROOT: Path.resolve(),
|
||||
MODULES: 'node_modules',
|
||||
FILES_PATH: '../',
|
||||
THIRDPARTY: 'thirdparty',
|
||||
SRC: Path.resolve('client/src'),
|
||||
DIST: Path.resolve('client/dist'),
|
||||
};
|
||||
|
||||
const config = [
|
||||
{
|
||||
name: 'bundle',
|
||||
entry: {
|
||||
main: `${PATHS.SRC}/main.js`
|
||||
},
|
||||
output: {
|
||||
path: PATHS.DIST,
|
||||
filename: 'js/[name].bundle.js',
|
||||
},
|
||||
devtool: (ENV !== 'production') ? 'source-map' : '',
|
||||
resolve: resolveJS(ENV, PATHS),
|
||||
externals: externalJS(ENV, PATHS),
|
||||
module: moduleJS(ENV, PATHS),
|
||||
plugins: pluginJS(ENV, PATHS),
|
||||
},
|
||||
{
|
||||
name: 'bundle',
|
||||
entry: {
|
||||
main: `${PATHS.SRC}/main.scss`
|
||||
},
|
||||
output: {
|
||||
path: PATHS.DIST,
|
||||
filename: 'styles/[name].css'
|
||||
},
|
||||
devtool: (ENV !== 'production') ? 'source-map' : '',
|
||||
module: moduleCSS(ENV, PATHS),
|
||||
plugins: pluginCSS(ENV, PATHS),
|
||||
},
|
||||
];
|
||||
|
||||
module.exports = config;
|
9021
yarn.lock
@ -1,9021 +0,0 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@iarna/cli@^1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641"
|
||||
integrity sha512-ukITQAqVs2n9HGmn3car/Ir7d3ta650iXhrG7pjr3EWdFmJuuOVWgYsu7ftsSe5VifEFFhjxVuX9+8F7L8hwcA==
|
||||
dependencies:
|
||||
signal-exit "^3.0.2"
|
||||
update-notifier "^2.2.0"
|
||||
yargs "^8.0.2"
|
||||
|
||||
"@silverstripe/eslint-config@^0.0.5":
|
||||
version "0.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@silverstripe/eslint-config/-/eslint-config-0.0.5.tgz#ab94d58e6f328d4efbcc1910572fdff5d85fc4ec"
|
||||
integrity sha512-3wpbmrK3trKpTaJhEZuh5mEKkP7fBtQ5D61nJ1BvoNUZ2CFM16pXgKHe9NQM+ct/sQxL1Ag7dANq3jjnn6OM+w==
|
||||
dependencies:
|
||||
eslint "^4.6.1"
|
||||
eslint-config-airbnb "^15.1.0"
|
||||
eslint-config-airbnb-base "^12.0.0"
|
||||
eslint-loader "^1.7.1"
|
||||
eslint-plugin-import "^2.7.0"
|
||||
eslint-plugin-jsx-a11y "^5.1.1"
|
||||
eslint-plugin-react "^7.3.0"
|
||||
|
||||
"@silverstripe/webpack-config@^1.3":
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@silverstripe/webpack-config/-/webpack-config-1.7.0.tgz#1fed0775d95c9120e4fc2031a611c50dc6c4b3f0"
|
||||
integrity sha512-lwtiEW+4oRQzNL24fKRnTffIPE5FCKJCCL2IuOIDdrIDoxxm381fzkcwWuWfhK7Oxbjz9A49UIDfzkUQ1/oW5g==
|
||||
dependencies:
|
||||
autoprefixer "^6.4.0"
|
||||
babel-core "^6.24.1"
|
||||
babel-loader "^7.0.0"
|
||||
babel-plugin-transform-object-rest-spread "^6.26.0"
|
||||
babel-preset-env "^1.6.0"
|
||||
babel-preset-react "^6.24.1"
|
||||
css-loader "^0.28.1"
|
||||
expose-loader "^0.7.3"
|
||||
extract-text-webpack-plugin "^2.1.0"
|
||||
file-loader "^0.11.1"
|
||||
imports-loader "^0.6.5"
|
||||
json-loader "^0.5.4"
|
||||
modernizr "^3.6.0"
|
||||
modernizr-loader "^1.0.1"
|
||||
node-sass "^4.5.3"
|
||||
npm "^6.0.0"
|
||||
postcss-custom-properties "^8.0.10"
|
||||
postcss-load-config "^1.2.0"
|
||||
postcss-loader "^2.0.5"
|
||||
resolve-url-loader "^2.0.2"
|
||||
sass-lint "^1.11.1"
|
||||
sass-loader "^6.0.5"
|
||||
script-loader "^0.7.0"
|
||||
url-loader "^0.6.2"
|
||||
webpack "^2.6.1"
|
||||
webpack-bundle-analyzer "^3.6.0"
|
||||
|
||||
"@types/json5@^0.0.29":
|
||||
version "0.0.29"
|
||||
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
||||
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
|
||||
|
||||
JSONStream@^1.3.4, JSONStream@^1.3.5:
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
|
||||
integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
|
||||
dependencies:
|
||||
jsonparse "^1.2.0"
|
||||
through ">=2.2.7 <3"
|
||||
|
||||
abbrev@1, abbrev@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
||||
|
||||
accepts@~1.3.8:
|
||||
version "1.3.8"
|
||||
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
|
||||
integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
|
||||
dependencies:
|
||||
mime-types "~2.1.34"
|
||||
negotiator "0.6.3"
|
||||
|
||||
acorn-dynamic-import@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
|
||||
integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=
|
||||
dependencies:
|
||||
acorn "^4.0.3"
|
||||
|
||||
acorn-jsx@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
|
||||
integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
|
||||
dependencies:
|
||||
acorn "^3.0.4"
|
||||
|
||||
acorn-walk@^7.1.1:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
|
||||
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
|
||||
|
||||
acorn@^3.0.4:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
|
||||
integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
|
||||
|
||||
acorn@^4.0.3:
|
||||
version "4.0.13"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
|
||||
integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=
|
||||
|
||||
acorn@^5.0.0, acorn@^5.5.0:
|
||||
version "5.7.4"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
|
||||
integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
|
||||
|
||||
acorn@^7.1.1:
|
||||
version "7.4.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
|
||||
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
|
||||
|
||||
adjust-sourcemap-loader@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz#e33fde95e50db9f2a802e3647e311d2fc5000c69"
|
||||
integrity sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ==
|
||||
dependencies:
|
||||
assert "^1.3.0"
|
||||
camelcase "^1.2.1"
|
||||
loader-utils "^1.1.0"
|
||||
lodash.assign "^4.0.1"
|
||||
lodash.defaults "^3.1.2"
|
||||
object-path "^0.9.2"
|
||||
regex-parser "^2.2.9"
|
||||
|
||||
agent-base@4, agent-base@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
|
||||
integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
|
||||
dependencies:
|
||||
es6-promisify "^5.0.0"
|
||||
|
||||
agent-base@~4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
|
||||
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
|
||||
dependencies:
|
||||
es6-promisify "^5.0.0"
|
||||
|
||||
agentkeepalive@^3.4.1:
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67"
|
||||
integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==
|
||||
dependencies:
|
||||
humanize-ms "^1.2.1"
|
||||
|
||||
ajv-keywords@^1.0.0, ajv-keywords@^1.1.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
|
||||
integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw=
|
||||
|
||||
ajv-keywords@^2.1.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
|
||||
integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
|
||||
|
||||
ajv-keywords@^3.1.0:
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
|
||||
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
|
||||
|
||||
ajv@^4.7.0:
|
||||
version "4.11.8"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
|
||||
integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=
|
||||
dependencies:
|
||||
co "^4.6.0"
|
||||
json-stable-stringify "^1.0.1"
|
||||
|
||||
ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0:
|
||||
version "5.5.2"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
|
||||
integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
|
||||
dependencies:
|
||||
co "^4.6.0"
|
||||
fast-deep-equal "^1.0.0"
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
json-schema-traverse "^0.3.0"
|
||||
|
||||
ajv@^6.1.0, ajv@^6.12.3:
|
||||
version "6.12.6"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||
dependencies:
|
||||
fast-deep-equal "^3.1.1"
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
json-schema-traverse "^0.4.1"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
align-text@^0.1.1, align-text@^0.1.3:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
|
||||
integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
|
||||
dependencies:
|
||||
kind-of "^3.0.2"
|
||||
longest "^1.0.1"
|
||||
repeat-string "^1.5.2"
|
||||
|
||||
alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
|
||||
integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
|
||||
|
||||
amdefine@>=0.0.4:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
|
||||
integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
|
||||
|
||||
ansi-align@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
|
||||
integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=
|
||||
dependencies:
|
||||
string-width "^2.0.0"
|
||||
|
||||
ansi-escapes@^1.1.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
|
||||
integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
|
||||
|
||||
ansi-escapes@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
|
||||
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
|
||||
|
||||
ansi-regex@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
|
||||
|
||||
ansi-regex@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1"
|
||||
integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==
|
||||
|
||||
ansi-regex@^4.1.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
|
||||
integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
|
||||
|
||||
ansi-regex@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
|
||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||
|
||||
ansi-styles@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
||||
integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
|
||||
|
||||
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
|
||||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
ansi-styles@^4.0.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
|
||||
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
|
||||
dependencies:
|
||||
color-convert "^2.0.1"
|
||||
|
||||
ansicolors@~0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
|
||||
integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=
|
||||
|
||||
ansistyles@~0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539"
|
||||
integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=
|
||||
|
||||
anymatch@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
|
||||
integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
|
||||
dependencies:
|
||||
micromatch "^3.1.4"
|
||||
normalize-path "^2.1.1"
|
||||
|
||||
anymatch@~3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
|
||||
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
|
||||
dependencies:
|
||||
normalize-path "^3.0.0"
|
||||
picomatch "^2.0.4"
|
||||
|
||||
aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
||||
|
||||
"aproba@^1.1.2 || 2", aproba@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
|
||||
integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
|
||||
|
||||
archy@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
|
||||
integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=
|
||||
|
||||
are-we-there-yet@~1.1.2:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146"
|
||||
integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==
|
||||
dependencies:
|
||||
delegates "^1.0.0"
|
||||
readable-stream "^2.0.6"
|
||||
|
||||
argparse@^1.0.7:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
|
||||
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
|
||||
dependencies:
|
||||
sprintf-js "~1.0.2"
|
||||
|
||||
argparse@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
|
||||
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
|
||||
|
||||
aria-query@^0.7.0:
|
||||
version "0.7.1"
|
||||
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e"
|
||||
integrity sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4=
|
||||
dependencies:
|
||||
ast-types-flow "0.0.7"
|
||||
commander "^2.11.0"
|
||||
|
||||
arr-diff@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
|
||||
integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
|
||||
|
||||
arr-flatten@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
|
||||
integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
|
||||
|
||||
arr-union@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
|
||||
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
|
||||
|
||||
array-find-index@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
|
||||
integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
|
||||
|
||||
array-flatten@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
|
||||
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
|
||||
|
||||
array-includes@^3.0.3, array-includes@^3.1.4:
|
||||
version "3.1.4"
|
||||
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
|
||||
integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.1"
|
||||
get-intrinsic "^1.1.1"
|
||||
is-string "^1.0.7"
|
||||
|
||||
array-unique@^0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
|
||||
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
|
||||
|
||||
array.prototype.flat@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13"
|
||||
integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.0"
|
||||
|
||||
array.prototype.flatmap@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446"
|
||||
integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.0"
|
||||
|
||||
asap@^2.0.0:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
|
||||
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
|
||||
|
||||
asn1.js@^5.2.0:
|
||||
version "5.4.1"
|
||||
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
|
||||
integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
|
||||
dependencies:
|
||||
bn.js "^4.0.0"
|
||||
inherits "^2.0.1"
|
||||
minimalistic-assert "^1.0.0"
|
||||
safer-buffer "^2.1.0"
|
||||
|
||||
asn1@~0.2.3:
|
||||
version "0.2.6"
|
||||
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
|
||||
integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
|
||||
dependencies:
|
||||
safer-buffer "~2.1.0"
|
||||
|
||||
assert-plus@1.0.0, assert-plus@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
||||
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
|
||||
|
||||
assert@^1.1.1, assert@^1.3.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
|
||||
integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
|
||||
dependencies:
|
||||
object-assign "^4.1.1"
|
||||
util "0.10.3"
|
||||
|
||||
assign-symbols@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
|
||||
integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
|
||||
|
||||
ast-types-flow@0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
|
||||
integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
|
||||
|
||||
async-each@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
|
||||
integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
|
||||
|
||||
async-foreach@^0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
|
||||
integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=
|
||||
|
||||
async-limiter@~1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
|
||||
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
|
||||
|
||||
async@^2.1.2:
|
||||
version "2.6.4"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
|
||||
integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
|
||||
dependencies:
|
||||
lodash "^4.17.14"
|
||||
|
||||
asynckit@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
||||
|
||||
atob@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
||||
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
||||
|
||||
autoprefixer@^6.3.1, autoprefixer@^6.4.0:
|
||||
version "6.7.7"
|
||||
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
|
||||
integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=
|
||||
dependencies:
|
||||
browserslist "^1.7.6"
|
||||
caniuse-db "^1.0.30000634"
|
||||
normalize-range "^0.1.2"
|
||||
num2fraction "^1.2.2"
|
||||
postcss "^5.2.16"
|
||||
postcss-value-parser "^3.2.3"
|
||||
|
||||
aws-sign2@~0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
||||
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
|
||||
|
||||
aws4@^1.8.0:
|
||||
version "1.11.0"
|
||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
|
||||
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
|
||||
|
||||
axobject-query@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0"
|
||||
integrity sha1-YvWdvFnJ+SQnWco0mWDnov48NsA=
|
||||
dependencies:
|
||||
ast-types-flow "0.0.7"
|
||||
|
||||
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
|
||||
integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
|
||||
dependencies:
|
||||
chalk "^1.1.3"
|
||||
esutils "^2.0.2"
|
||||
js-tokens "^3.0.2"
|
||||
|
||||
babel-core@^6.24.1, babel-core@^6.26.0:
|
||||
version "6.26.3"
|
||||
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
|
||||
integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
|
||||
dependencies:
|
||||
babel-code-frame "^6.26.0"
|
||||
babel-generator "^6.26.0"
|
||||
babel-helpers "^6.24.1"
|
||||
babel-messages "^6.23.0"
|
||||
babel-register "^6.26.0"
|
||||
babel-runtime "^6.26.0"
|
||||
babel-template "^6.26.0"
|
||||
babel-traverse "^6.26.0"
|
||||
babel-types "^6.26.0"
|
||||
babylon "^6.18.0"
|
||||
convert-source-map "^1.5.1"
|
||||
debug "^2.6.9"
|
||||
json5 "^0.5.1"
|
||||
lodash "^4.17.4"
|
||||
minimatch "^3.0.4"
|
||||
path-is-absolute "^1.0.1"
|
||||
private "^0.1.8"
|
||||
slash "^1.0.0"
|
||||
source-map "^0.5.7"
|
||||
|
||||
babel-generator@^6.26.0:
|
||||
version "6.26.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
|
||||
integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
|
||||
dependencies:
|
||||
babel-messages "^6.23.0"
|
||||
babel-runtime "^6.26.0"
|
||||
babel-types "^6.26.0"
|
||||
detect-indent "^4.0.0"
|
||||
jsesc "^1.3.0"
|
||||
lodash "^4.17.4"
|
||||
source-map "^0.5.7"
|
||||
trim-right "^1.0.1"
|
||||
|
||||
babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
|
||||
integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=
|
||||
dependencies:
|
||||
babel-helper-explode-assignable-expression "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-helper-builder-react-jsx@^6.24.1:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
|
||||
integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
babel-types "^6.26.0"
|
||||
esutils "^2.0.2"
|
||||
|
||||
babel-helper-call-delegate@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
|
||||
integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=
|
||||
dependencies:
|
||||
babel-helper-hoist-variables "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-traverse "^6.24.1"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-helper-define-map@^6.24.1:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
|
||||
integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=
|
||||
dependencies:
|
||||
babel-helper-function-name "^6.24.1"
|
||||
babel-runtime "^6.26.0"
|
||||
babel-types "^6.26.0"
|
||||
lodash "^4.17.4"
|
||||
|
||||
babel-helper-explode-assignable-expression@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
|
||||
integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-traverse "^6.24.1"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-helper-function-name@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
|
||||
integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=
|
||||
dependencies:
|
||||
babel-helper-get-function-arity "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
babel-traverse "^6.24.1"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-helper-get-function-arity@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
|
||||
integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-helper-hoist-variables@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
|
||||
integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-helper-optimise-call-expression@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
|
||||
integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-helper-regex@^6.24.1:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
|
||||
integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
babel-types "^6.26.0"
|
||||
lodash "^4.17.4"
|
||||
|
||||
babel-helper-remap-async-to-generator@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
|
||||
integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=
|
||||
dependencies:
|
||||
babel-helper-function-name "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
babel-traverse "^6.24.1"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-helper-replace-supers@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
|
||||
integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo=
|
||||
dependencies:
|
||||
babel-helper-optimise-call-expression "^6.24.1"
|
||||
babel-messages "^6.23.0"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
babel-traverse "^6.24.1"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-helpers@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
|
||||
integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
|
||||
babel-loader@^7.0.0:
|
||||
version "7.1.5"
|
||||
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68"
|
||||
integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==
|
||||
dependencies:
|
||||
find-cache-dir "^1.0.0"
|
||||
loader-utils "^1.0.2"
|
||||
mkdirp "^0.5.1"
|
||||
|
||||
babel-messages@^6.23.0:
|
||||
version "6.23.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
|
||||
integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-check-es2015-constants@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
|
||||
integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-syntax-async-functions@^6.8.0:
|
||||
version "6.13.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
|
||||
integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=
|
||||
|
||||
babel-plugin-syntax-exponentiation-operator@^6.8.0:
|
||||
version "6.13.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
|
||||
integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=
|
||||
|
||||
babel-plugin-syntax-flow@^6.18.0:
|
||||
version "6.18.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
|
||||
integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=
|
||||
|
||||
babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
|
||||
version "6.18.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
|
||||
integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
|
||||
|
||||
babel-plugin-syntax-object-rest-spread@^6.8.0:
|
||||
version "6.13.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
|
||||
integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
|
||||
|
||||
babel-plugin-syntax-trailing-function-commas@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
|
||||
integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=
|
||||
|
||||
babel-plugin-transform-async-to-generator@^6.22.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
|
||||
integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=
|
||||
dependencies:
|
||||
babel-helper-remap-async-to-generator "^6.24.1"
|
||||
babel-plugin-syntax-async-functions "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-arrow-functions@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
|
||||
integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
|
||||
integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-block-scoping@^6.23.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
|
||||
integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
babel-template "^6.26.0"
|
||||
babel-traverse "^6.26.0"
|
||||
babel-types "^6.26.0"
|
||||
lodash "^4.17.4"
|
||||
|
||||
babel-plugin-transform-es2015-classes@^6.23.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
|
||||
integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=
|
||||
dependencies:
|
||||
babel-helper-define-map "^6.24.1"
|
||||
babel-helper-function-name "^6.24.1"
|
||||
babel-helper-optimise-call-expression "^6.24.1"
|
||||
babel-helper-replace-supers "^6.24.1"
|
||||
babel-messages "^6.23.0"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
babel-traverse "^6.24.1"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-computed-properties@^6.22.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
|
||||
integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-destructuring@^6.23.0:
|
||||
version "6.23.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
|
||||
integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
|
||||
integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-for-of@^6.23.0:
|
||||
version "6.23.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
|
||||
integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-function-name@^6.22.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
|
||||
integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=
|
||||
dependencies:
|
||||
babel-helper-function-name "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-literals@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
|
||||
integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
|
||||
integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=
|
||||
dependencies:
|
||||
babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
|
||||
version "6.26.2"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
|
||||
integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
|
||||
dependencies:
|
||||
babel-plugin-transform-strict-mode "^6.24.1"
|
||||
babel-runtime "^6.26.0"
|
||||
babel-template "^6.26.0"
|
||||
babel-types "^6.26.0"
|
||||
|
||||
babel-plugin-transform-es2015-modules-systemjs@^6.23.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
|
||||
integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=
|
||||
dependencies:
|
||||
babel-helper-hoist-variables "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-modules-umd@^6.23.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
|
||||
integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg=
|
||||
dependencies:
|
||||
babel-plugin-transform-es2015-modules-amd "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-object-super@^6.22.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
|
||||
integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40=
|
||||
dependencies:
|
||||
babel-helper-replace-supers "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-parameters@^6.23.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
|
||||
integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=
|
||||
dependencies:
|
||||
babel-helper-call-delegate "^6.24.1"
|
||||
babel-helper-get-function-arity "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
babel-traverse "^6.24.1"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
|
||||
integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-spread@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
|
||||
integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-sticky-regex@^6.22.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
|
||||
integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw=
|
||||
dependencies:
|
||||
babel-helper-regex "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-plugin-transform-es2015-template-literals@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
|
||||
integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
|
||||
version "6.23.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
|
||||
integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-es2015-unicode-regex@^6.22.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
|
||||
integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek=
|
||||
dependencies:
|
||||
babel-helper-regex "^6.24.1"
|
||||
babel-runtime "^6.22.0"
|
||||
regexpu-core "^2.0.0"
|
||||
|
||||
babel-plugin-transform-exponentiation-operator@^6.22.0:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
|
||||
integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=
|
||||
dependencies:
|
||||
babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
|
||||
babel-plugin-syntax-exponentiation-operator "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-flow-strip-types@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
|
||||
integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=
|
||||
dependencies:
|
||||
babel-plugin-syntax-flow "^6.18.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-object-rest-spread@^6.26.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
|
||||
integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=
|
||||
dependencies:
|
||||
babel-plugin-syntax-object-rest-spread "^6.8.0"
|
||||
babel-runtime "^6.26.0"
|
||||
|
||||
babel-plugin-transform-react-display-name@^6.23.0:
|
||||
version "6.25.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
|
||||
integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-react-jsx-self@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
|
||||
integrity sha1-322AqdomEqEh5t3XVYvL7PBuY24=
|
||||
dependencies:
|
||||
babel-plugin-syntax-jsx "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-react-jsx-source@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
|
||||
integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=
|
||||
dependencies:
|
||||
babel-plugin-syntax-jsx "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-react-jsx@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
|
||||
integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM=
|
||||
dependencies:
|
||||
babel-helper-builder-react-jsx "^6.24.1"
|
||||
babel-plugin-syntax-jsx "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-regenerator@^6.22.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
|
||||
integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=
|
||||
dependencies:
|
||||
regenerator-transform "^0.10.0"
|
||||
|
||||
babel-plugin-transform-strict-mode@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
|
||||
integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-types "^6.24.1"
|
||||
|
||||
babel-preset-env@^1.6.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a"
|
||||
integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==
|
||||
dependencies:
|
||||
babel-plugin-check-es2015-constants "^6.22.0"
|
||||
babel-plugin-syntax-trailing-function-commas "^6.22.0"
|
||||
babel-plugin-transform-async-to-generator "^6.22.0"
|
||||
babel-plugin-transform-es2015-arrow-functions "^6.22.0"
|
||||
babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
|
||||
babel-plugin-transform-es2015-block-scoping "^6.23.0"
|
||||
babel-plugin-transform-es2015-classes "^6.23.0"
|
||||
babel-plugin-transform-es2015-computed-properties "^6.22.0"
|
||||
babel-plugin-transform-es2015-destructuring "^6.23.0"
|
||||
babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
|
||||
babel-plugin-transform-es2015-for-of "^6.23.0"
|
||||
babel-plugin-transform-es2015-function-name "^6.22.0"
|
||||
babel-plugin-transform-es2015-literals "^6.22.0"
|
||||
babel-plugin-transform-es2015-modules-amd "^6.22.0"
|
||||
babel-plugin-transform-es2015-modules-commonjs "^6.23.0"
|
||||
babel-plugin-transform-es2015-modules-systemjs "^6.23.0"
|
||||
babel-plugin-transform-es2015-modules-umd "^6.23.0"
|
||||
babel-plugin-transform-es2015-object-super "^6.22.0"
|
||||
babel-plugin-transform-es2015-parameters "^6.23.0"
|
||||
babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
|
||||
babel-plugin-transform-es2015-spread "^6.22.0"
|
||||
babel-plugin-transform-es2015-sticky-regex "^6.22.0"
|
||||
babel-plugin-transform-es2015-template-literals "^6.22.0"
|
||||
babel-plugin-transform-es2015-typeof-symbol "^6.23.0"
|
||||
babel-plugin-transform-es2015-unicode-regex "^6.22.0"
|
||||
babel-plugin-transform-exponentiation-operator "^6.22.0"
|
||||
babel-plugin-transform-regenerator "^6.22.0"
|
||||
browserslist "^3.2.6"
|
||||
invariant "^2.2.2"
|
||||
semver "^5.3.0"
|
||||
|
||||
babel-preset-flow@^6.23.0:
|
||||
version "6.23.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
|
||||
integrity sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=
|
||||
dependencies:
|
||||
babel-plugin-transform-flow-strip-types "^6.22.0"
|
||||
|
||||
babel-preset-react@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
|
||||
integrity sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=
|
||||
dependencies:
|
||||
babel-plugin-syntax-jsx "^6.3.13"
|
||||
babel-plugin-transform-react-display-name "^6.23.0"
|
||||
babel-plugin-transform-react-jsx "^6.24.1"
|
||||
babel-plugin-transform-react-jsx-self "^6.22.0"
|
||||
babel-plugin-transform-react-jsx-source "^6.22.0"
|
||||
babel-preset-flow "^6.23.0"
|
||||
|
||||
babel-register@^6.26.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
|
||||
integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
|
||||
dependencies:
|
||||
babel-core "^6.26.0"
|
||||
babel-runtime "^6.26.0"
|
||||
core-js "^2.5.0"
|
||||
home-or-tmp "^2.0.0"
|
||||
lodash "^4.17.4"
|
||||
mkdirp "^0.5.1"
|
||||
source-map-support "^0.4.15"
|
||||
|
||||
babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
|
||||
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
|
||||
dependencies:
|
||||
core-js "^2.4.0"
|
||||
regenerator-runtime "^0.11.0"
|
||||
|
||||
babel-template@^6.24.1, babel-template@^6.26.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
|
||||
integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
babel-traverse "^6.26.0"
|
||||
babel-types "^6.26.0"
|
||||
babylon "^6.18.0"
|
||||
lodash "^4.17.4"
|
||||
|
||||
babel-traverse@^6.24.1, babel-traverse@^6.26.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
|
||||
integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
|
||||
dependencies:
|
||||
babel-code-frame "^6.26.0"
|
||||
babel-messages "^6.23.0"
|
||||
babel-runtime "^6.26.0"
|
||||
babel-types "^6.26.0"
|
||||
babylon "^6.18.0"
|
||||
debug "^2.6.8"
|
||||
globals "^9.18.0"
|
||||
invariant "^2.2.2"
|
||||
lodash "^4.17.4"
|
||||
|
||||
babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
|
||||
integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
esutils "^2.0.2"
|
||||
lodash "^4.17.4"
|
||||
to-fast-properties "^1.0.3"
|
||||
|
||||
babylon@^6.18.0:
|
||||
version "6.18.0"
|
||||
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
|
||||
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
|
||||
|
||||
balanced-match@^0.4.2:
|
||||
version "0.4.2"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
|
||||
integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
||||
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||
|
||||
base64-js@^1.0.2:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
||||
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
|
||||
|
||||
base@^0.11.1:
|
||||
version "0.11.2"
|
||||
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
||||
integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
|
||||
dependencies:
|
||||
cache-base "^1.0.1"
|
||||
class-utils "^0.3.5"
|
||||
component-emitter "^1.2.1"
|
||||
define-property "^1.0.0"
|
||||
isobject "^3.0.1"
|
||||
mixin-deep "^1.2.0"
|
||||
pascalcase "^0.1.1"
|
||||
|
||||
bcrypt-pbkdf@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
|
||||
integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
|
||||
dependencies:
|
||||
tweetnacl "^0.14.3"
|
||||
|
||||
bfj@^6.1.1:
|
||||
version "6.1.2"
|
||||
resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f"
|
||||
integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==
|
||||
dependencies:
|
||||
bluebird "^3.5.5"
|
||||
check-types "^8.0.3"
|
||||
hoopy "^0.1.4"
|
||||
tryer "^1.0.1"
|
||||
|
||||
big.js@^3.1.3:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
|
||||
integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
|
||||
|
||||
big.js@^5.2.2:
|
||||
version "5.2.2"
|
||||
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
|
||||
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
|
||||
|
||||
bin-links@^1.1.2, bin-links@^1.1.8:
|
||||
version "1.1.8"
|
||||
resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.8.tgz#bd39aadab5dc4bdac222a07df5baf1af745b2228"
|
||||
integrity sha512-KgmVfx+QqggqP9dA3iIc5pA4T1qEEEL+hOhOhNPaUm77OTrJoOXE/C05SJLNJe6m/2wUK7F1tDSou7n5TfCDzQ==
|
||||
dependencies:
|
||||
bluebird "^3.5.3"
|
||||
cmd-shim "^3.0.0"
|
||||
gentle-fs "^2.3.0"
|
||||
graceful-fs "^4.1.15"
|
||||
npm-normalize-package-bin "^1.0.0"
|
||||
write-file-atomic "^2.3.0"
|
||||
|
||||
binary-extensions@^1.0.0:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
|
||||
integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
|
||||
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
||||
|
||||
bindings@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
|
||||
integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
|
||||
dependencies:
|
||||
file-uri-to-path "1.0.0"
|
||||
|
||||
block-stream@*:
|
||||
version "0.0.9"
|
||||
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
|
||||
integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
|
||||
dependencies:
|
||||
inherits "~2.0.0"
|
||||
|
||||
bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5:
|
||||
version "3.7.2"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
||||
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
||||
|
||||
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
|
||||
version "4.12.0"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
|
||||
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
|
||||
|
||||
bn.js@^5.0.0, bn.js@^5.1.1:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
|
||||
integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
|
||||
|
||||
body-parser@1.19.2:
|
||||
version "1.19.2"
|
||||
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e"
|
||||
integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==
|
||||
dependencies:
|
||||
bytes "3.1.2"
|
||||
content-type "~1.0.4"
|
||||
debug "2.6.9"
|
||||
depd "~1.1.2"
|
||||
http-errors "1.8.1"
|
||||
iconv-lite "0.4.24"
|
||||
on-finished "~2.3.0"
|
||||
qs "6.9.7"
|
||||
raw-body "2.4.3"
|
||||
type-is "~1.6.18"
|
||||
|
||||
boxen@^1.2.1:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
|
||||
integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==
|
||||
dependencies:
|
||||
ansi-align "^2.0.0"
|
||||
camelcase "^4.0.0"
|
||||
chalk "^2.0.1"
|
||||
cli-boxes "^1.0.0"
|
||||
string-width "^2.0.0"
|
||||
term-size "^1.2.0"
|
||||
widest-line "^2.0.0"
|
||||
|
||||
brace-expansion@^1.1.7:
|
||||
version "1.1.11"
|
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
||||
dependencies:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
braces@^2.3.1, braces@^2.3.2:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
|
||||
integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
|
||||
dependencies:
|
||||
arr-flatten "^1.1.0"
|
||||
array-unique "^0.3.2"
|
||||
extend-shallow "^2.0.1"
|
||||
fill-range "^4.0.0"
|
||||
isobject "^3.0.1"
|
||||
repeat-element "^1.1.2"
|
||||
snapdragon "^0.8.1"
|
||||
snapdragon-node "^2.0.1"
|
||||
split-string "^3.0.2"
|
||||
to-regex "^3.0.1"
|
||||
|
||||
braces@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
|
||||
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||
dependencies:
|
||||
fill-range "^7.0.1"
|
||||
|
||||
brorand@^1.0.1, brorand@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
|
||||
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
|
||||
|
||||
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
|
||||
integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
|
||||
dependencies:
|
||||
buffer-xor "^1.0.3"
|
||||
cipher-base "^1.0.0"
|
||||
create-hash "^1.1.0"
|
||||
evp_bytestokey "^1.0.3"
|
||||
inherits "^2.0.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
browserify-cipher@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
|
||||
integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
|
||||
dependencies:
|
||||
browserify-aes "^1.0.4"
|
||||
browserify-des "^1.0.0"
|
||||
evp_bytestokey "^1.0.0"
|
||||
|
||||
browserify-des@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
|
||||
integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
|
||||
dependencies:
|
||||
cipher-base "^1.0.1"
|
||||
des.js "^1.0.0"
|
||||
inherits "^2.0.1"
|
||||
safe-buffer "^5.1.2"
|
||||
|
||||
browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
|
||||
integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
|
||||
dependencies:
|
||||
bn.js "^5.0.0"
|
||||
randombytes "^2.0.1"
|
||||
|
||||
browserify-sign@^4.0.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
|
||||
integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
|
||||
dependencies:
|
||||
bn.js "^5.1.1"
|
||||
browserify-rsa "^4.0.1"
|
||||
create-hash "^1.2.0"
|
||||
create-hmac "^1.1.7"
|
||||
elliptic "^6.5.3"
|
||||
inherits "^2.0.4"
|
||||
parse-asn1 "^5.1.5"
|
||||
readable-stream "^3.6.0"
|
||||
safe-buffer "^5.2.0"
|
||||
|
||||
browserify-zlib@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
|
||||
integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
|
||||
dependencies:
|
||||
pako "~1.0.5"
|
||||
|
||||
browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
|
||||
version "1.7.7"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
|
||||
integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=
|
||||
dependencies:
|
||||
caniuse-db "^1.0.30000639"
|
||||
electron-to-chromium "^1.2.7"
|
||||
|
||||
browserslist@^3.2.6:
|
||||
version "3.2.8"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6"
|
||||
integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30000844"
|
||||
electron-to-chromium "^1.3.47"
|
||||
|
||||
buffer-from@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
|
||||
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
|
||||
|
||||
buffer-xor@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
|
||||
integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
|
||||
|
||||
buffer@^4.3.0:
|
||||
version "4.9.2"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
|
||||
integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
|
||||
dependencies:
|
||||
base64-js "^1.0.2"
|
||||
ieee754 "^1.1.4"
|
||||
isarray "^1.0.0"
|
||||
|
||||
builtin-status-codes@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
|
||||
integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
|
||||
|
||||
builtins@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
|
||||
integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og=
|
||||
|
||||
byline@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1"
|
||||
integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=
|
||||
|
||||
byte-size@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191"
|
||||
integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==
|
||||
|
||||
bytes@3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
|
||||
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
|
||||
|
||||
cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3:
|
||||
version "12.0.4"
|
||||
resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
|
||||
integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
|
||||
dependencies:
|
||||
bluebird "^3.5.5"
|
||||
chownr "^1.1.1"
|
||||
figgy-pudding "^3.5.1"
|
||||
glob "^7.1.4"
|
||||
graceful-fs "^4.1.15"
|
||||
infer-owner "^1.0.3"
|
||||
lru-cache "^5.1.1"
|
||||
mississippi "^3.0.0"
|
||||
mkdirp "^0.5.1"
|
||||
move-concurrently "^1.0.1"
|
||||
promise-inflight "^1.0.1"
|
||||
rimraf "^2.6.3"
|
||||
ssri "^6.0.1"
|
||||
unique-filename "^1.1.1"
|
||||
y18n "^4.0.0"
|
||||
|
||||
cache-base@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
|
||||
integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
|
||||
dependencies:
|
||||
collection-visit "^1.0.0"
|
||||
component-emitter "^1.2.1"
|
||||
get-value "^2.0.6"
|
||||
has-value "^1.0.0"
|
||||
isobject "^3.0.1"
|
||||
set-value "^2.0.0"
|
||||
to-object-path "^0.3.0"
|
||||
union-value "^1.0.0"
|
||||
unset-value "^1.0.0"
|
||||
|
||||
call-bind@^1.0.0, call-bind@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
|
||||
integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
get-intrinsic "^1.0.2"
|
||||
|
||||
call-limit@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4"
|
||||
integrity sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ==
|
||||
|
||||
caller-callsite@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
|
||||
integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
|
||||
dependencies:
|
||||
callsites "^2.0.0"
|
||||
|
||||
caller-path@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
|
||||
integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
|
||||
dependencies:
|
||||
callsites "^0.2.0"
|
||||
|
||||
caller-path@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
|
||||
integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
|
||||
dependencies:
|
||||
caller-callsite "^2.0.0"
|
||||
|
||||
callsites@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
|
||||
integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
|
||||
|
||||
callsites@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
|
||||
integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
|
||||
|
||||
camelcase-keys@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
|
||||
integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
|
||||
dependencies:
|
||||
camelcase "^2.0.0"
|
||||
map-obj "^1.0.0"
|
||||
|
||||
camelcase@^1.0.2, camelcase@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
|
||||
integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
|
||||
|
||||
camelcase@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
|
||||
integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
|
||||
|
||||
camelcase@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
|
||||
integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
|
||||
|
||||
camelcase@^4.0.0, camelcase@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
|
||||
integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
|
||||
|
||||
camelcase@^5.0.0:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
||||
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
||||
|
||||
caniuse-api@^1.5.2:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
|
||||
integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=
|
||||
dependencies:
|
||||
browserslist "^1.3.6"
|
||||
caniuse-db "^1.0.30000529"
|
||||
lodash.memoize "^4.1.2"
|
||||
lodash.uniq "^4.5.0"
|
||||
|
||||
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
|
||||
version "1.0.30001323"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001323.tgz#4399d177506202f69206a7c3438d960620272dbc"
|
||||
integrity sha512-dz5Ecu+vYmlkks9nWf0B7uKhnypK8kbHzDT5qCaH8l0rSCDkn9MqveART0BBu32ZvwIG3yDqHdgCR4yKBKdrKw==
|
||||
|
||||
caniuse-lite@^1.0.30000844:
|
||||
version "1.0.30001323"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001323.tgz#a451ff80dec7033016843f532efda18f02eec011"
|
||||
integrity sha512-e4BF2RlCVELKx8+RmklSEIVub1TWrmdhvA5kEUueummz1XyySW0DVk+3x9HyhU9MuWTa2BhqLgEuEmUwASAdCA==
|
||||
|
||||
capture-stack-trace@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
|
||||
integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
|
||||
|
||||
caseless@~0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
||||
|
||||
center-align@^0.1.1:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
|
||||
integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
|
||||
dependencies:
|
||||
align-text "^0.1.3"
|
||||
lazy-cache "^1.0.3"
|
||||
|
||||
chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
|
||||
dependencies:
|
||||
ansi-styles "^2.2.1"
|
||||
escape-string-regexp "^1.0.2"
|
||||
has-ansi "^2.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
supports-color "^2.0.0"
|
||||
|
||||
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||
dependencies:
|
||||
ansi-styles "^3.2.1"
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chardet@^0.4.0:
|
||||
version "0.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
|
||||
integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
|
||||
|
||||
check-types@^8.0.3:
|
||||
version "8.0.3"
|
||||
resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
|
||||
integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==
|
||||
|
||||
chokidar@^2.1.8:
|
||||
version "2.1.8"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
|
||||
integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
|
||||
dependencies:
|
||||
anymatch "^2.0.0"
|
||||
async-each "^1.0.1"
|
||||
braces "^2.3.2"
|
||||
glob-parent "^3.1.0"
|
||||
inherits "^2.0.3"
|
||||
is-binary-path "^1.0.0"
|
||||
is-glob "^4.0.0"
|
||||
normalize-path "^3.0.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
readdirp "^2.2.1"
|
||||
upath "^1.1.1"
|
||||
optionalDependencies:
|
||||
fsevents "^1.2.7"
|
||||
|
||||
chokidar@^3.4.1:
|
||||
version "3.5.3"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
|
||||
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
|
||||
dependencies:
|
||||
anymatch "~3.1.2"
|
||||
braces "~3.0.2"
|
||||
glob-parent "~5.1.2"
|
||||
is-binary-path "~2.1.0"
|
||||
is-glob "~4.0.1"
|
||||
normalize-path "~3.0.0"
|
||||
readdirp "~3.6.0"
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
||||
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
||||
|
||||
ci-info@^1.5.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
|
||||
integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
|
||||
|
||||
ci-info@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
|
||||
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
|
||||
|
||||
cidr-regex@^2.0.10:
|
||||
version "2.0.10"
|
||||
resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d"
|
||||
integrity sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q==
|
||||
dependencies:
|
||||
ip-regex "^2.1.0"
|
||||
|
||||
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
|
||||
integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
circular-json@^0.3.1:
|
||||
version "0.3.3"
|
||||
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
|
||||
integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
|
||||
|
||||
clap@^1.0.9:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
|
||||
integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==
|
||||
dependencies:
|
||||
chalk "^1.1.3"
|
||||
|
||||
class-utils@^0.3.5:
|
||||
version "0.3.6"
|
||||
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
|
||||
integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
|
||||
dependencies:
|
||||
arr-union "^3.1.0"
|
||||
define-property "^0.2.5"
|
||||
isobject "^3.0.0"
|
||||
static-extend "^0.1.1"
|
||||
|
||||
cli-boxes@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
|
||||
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
|
||||
|
||||
cli-columns@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e"
|
||||
integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4=
|
||||
dependencies:
|
||||
string-width "^2.0.0"
|
||||
strip-ansi "^3.0.1"
|
||||
|
||||
cli-cursor@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
|
||||
integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=
|
||||
dependencies:
|
||||
restore-cursor "^1.0.1"
|
||||
|
||||
cli-cursor@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
|
||||
integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
|
||||
dependencies:
|
||||
restore-cursor "^2.0.0"
|
||||
|
||||
cli-table3@^0.5.0, cli-table3@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
|
||||
integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==
|
||||
dependencies:
|
||||
object-assign "^4.1.0"
|
||||
string-width "^2.1.1"
|
||||
optionalDependencies:
|
||||
colors "^1.1.2"
|
||||
|
||||
cli-width@^2.0.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
|
||||
integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
|
||||
|
||||
cliui@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
|
||||
integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
|
||||
dependencies:
|
||||
center-align "^0.1.1"
|
||||
right-align "^0.1.1"
|
||||
wordwrap "0.0.2"
|
||||
|
||||
cliui@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
|
||||
integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
|
||||
dependencies:
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
cliui@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
|
||||
integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
|
||||
dependencies:
|
||||
string-width "^3.1.0"
|
||||
strip-ansi "^5.2.0"
|
||||
wrap-ansi "^5.1.0"
|
||||
|
||||
cliui@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
|
||||
integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
|
||||
dependencies:
|
||||
string-width "^4.2.0"
|
||||
strip-ansi "^6.0.0"
|
||||
wrap-ansi "^6.2.0"
|
||||
|
||||
clone-deep@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713"
|
||||
integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==
|
||||
dependencies:
|
||||
for-own "^1.0.0"
|
||||
is-plain-object "^2.0.4"
|
||||
kind-of "^6.0.0"
|
||||
shallow-clone "^1.0.0"
|
||||
|
||||
clone@^1.0.2:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
||||
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
|
||||
|
||||
cmd-shim@^3.0.0, cmd-shim@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb"
|
||||
integrity sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA==
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
mkdirp "~0.5.0"
|
||||
|
||||
co@^4.6.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
|
||||
integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
|
||||
|
||||
coa@~1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
|
||||
integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=
|
||||
dependencies:
|
||||
q "^1.1.2"
|
||||
|
||||
code-point-at@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
|
||||
|
||||
collection-visit@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
|
||||
integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
|
||||
dependencies:
|
||||
map-visit "^1.0.0"
|
||||
object-visit "^1.0.0"
|
||||
|
||||
color-convert@^1.3.0, color-convert@^1.9.0:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
|
||||
dependencies:
|
||||
color-name "1.1.3"
|
||||
|
||||
color-convert@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
|
||||
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
|
||||
dependencies:
|
||||
color-name "~1.1.4"
|
||||
|
||||
color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
|
||||
|
||||
color-name@^1.0.0, color-name@~1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
|
||||
color-string@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
|
||||
integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=
|
||||
dependencies:
|
||||
color-name "^1.0.0"
|
||||
|
||||
color@^0.11.0:
|
||||
version "0.11.4"
|
||||
resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
|
||||
integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=
|
||||
dependencies:
|
||||
clone "^1.0.2"
|
||||
color-convert "^1.3.0"
|
||||
color-string "^0.3.0"
|
||||
|
||||
colormin@^1.0.5:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
|
||||
integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=
|
||||
dependencies:
|
||||
color "^0.11.0"
|
||||
css-color-names "0.0.4"
|
||||
has "^1.0.1"
|
||||
|
||||
colors@^1.1.2:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
|
||||
integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
|
||||
|
||||
colors@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
|
||||
integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
|
||||
|
||||
columnify@~1.5.4:
|
||||
version "1.5.4"
|
||||
resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
|
||||
integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=
|
||||
dependencies:
|
||||
strip-ansi "^3.0.0"
|
||||
wcwidth "^1.0.0"
|
||||
|
||||
combined-stream@^1.0.6, combined-stream@~1.0.6:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
commander@^2.11.0, commander@^2.18.0, commander@^2.8.1:
|
||||
version "2.20.3"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
|
||||
commondir@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
|
||||
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
|
||||
|
||||
component-emitter@^1.2.1:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
|
||||
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
|
||||
|
||||
concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
concat-stream@^1.4.6, concat-stream@^1.5.0, concat-stream@^1.6.0:
|
||||
version "1.6.2"
|
||||
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
|
||||
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
|
||||
dependencies:
|
||||
buffer-from "^1.0.0"
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^2.2.2"
|
||||
typedarray "^0.0.6"
|
||||
|
||||
config-chain@^1.1.12:
|
||||
version "1.1.13"
|
||||
resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
|
||||
integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
|
||||
dependencies:
|
||||
ini "^1.3.4"
|
||||
proto-list "~1.2.1"
|
||||
|
||||
configstore@^3.0.0:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f"
|
||||
integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==
|
||||
dependencies:
|
||||
dot-prop "^4.2.1"
|
||||
graceful-fs "^4.1.2"
|
||||
make-dir "^1.0.0"
|
||||
unique-string "^1.0.0"
|
||||
write-file-atomic "^2.0.0"
|
||||
xdg-basedir "^3.0.0"
|
||||
|
||||
console-browserify@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
|
||||
integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
|
||||
|
||||
console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
||||
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
|
||||
|
||||
constants-browserify@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
|
||||
integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
|
||||
|
||||
content-disposition@0.5.4:
|
||||
version "0.5.4"
|
||||
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
|
||||
integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
|
||||
dependencies:
|
||||
safe-buffer "5.2.1"
|
||||
|
||||
content-type@~1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
|
||||
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
|
||||
|
||||
convert-source-map@^0.3.3:
|
||||
version "0.3.5"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190"
|
||||
integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA=
|
||||
|
||||
convert-source-map@^1.5.1:
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
|
||||
integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
|
||||
dependencies:
|
||||
safe-buffer "~5.1.1"
|
||||
|
||||
cookie-signature@1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
|
||||
integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
|
||||
|
||||
cookie@0.4.2:
|
||||
version "0.4.2"
|
||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
|
||||
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
|
||||
|
||||
copy-concurrently@^1.0.0:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
|
||||
integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
|
||||
dependencies:
|
||||
aproba "^1.1.1"
|
||||
fs-write-stream-atomic "^1.0.8"
|
||||
iferr "^0.1.5"
|
||||
mkdirp "^0.5.1"
|
||||
rimraf "^2.5.4"
|
||||
run-queue "^1.0.0"
|
||||
|
||||
copy-descriptor@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
|
||||
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
|
||||
|
||||
core-js@^2.4.0, core-js@^2.5.0:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
|
||||
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
|
||||
|
||||
core-util-is@1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||
|
||||
core-util-is@~1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
|
||||
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
|
||||
|
||||
cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
|
||||
integrity sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==
|
||||
dependencies:
|
||||
is-directory "^0.3.1"
|
||||
js-yaml "^3.4.3"
|
||||
minimist "^1.2.0"
|
||||
object-assign "^4.1.0"
|
||||
os-homedir "^1.0.1"
|
||||
parse-json "^2.2.0"
|
||||
require-from-string "^1.1.0"
|
||||
|
||||
cosmiconfig@^5.0.0:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
|
||||
integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
|
||||
dependencies:
|
||||
import-fresh "^2.0.0"
|
||||
is-directory "^0.3.1"
|
||||
js-yaml "^3.13.1"
|
||||
parse-json "^4.0.0"
|
||||
|
||||
create-ecdh@^4.0.0:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
|
||||
integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
|
||||
dependencies:
|
||||
bn.js "^4.1.0"
|
||||
elliptic "^6.5.3"
|
||||
|
||||
create-error-class@^3.0.0:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
|
||||
integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
|
||||
dependencies:
|
||||
capture-stack-trace "^1.0.0"
|
||||
|
||||
create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
|
||||
integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
|
||||
dependencies:
|
||||
cipher-base "^1.0.1"
|
||||
inherits "^2.0.1"
|
||||
md5.js "^1.3.4"
|
||||
ripemd160 "^2.0.1"
|
||||
sha.js "^2.4.0"
|
||||
|
||||
create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
|
||||
integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
|
||||
dependencies:
|
||||
cipher-base "^1.0.3"
|
||||
create-hash "^1.1.0"
|
||||
inherits "^2.0.1"
|
||||
ripemd160 "^2.0.0"
|
||||
safe-buffer "^5.0.1"
|
||||
sha.js "^2.4.8"
|
||||
|
||||
cross-spawn@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
|
||||
integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI=
|
||||
dependencies:
|
||||
lru-cache "^4.0.1"
|
||||
which "^1.2.9"
|
||||
|
||||
cross-spawn@^5.0.1, cross-spawn@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
||||
integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
|
||||
dependencies:
|
||||
lru-cache "^4.0.1"
|
||||
shebang-command "^1.2.0"
|
||||
which "^1.2.9"
|
||||
|
||||
crypto-browserify@^3.11.0:
|
||||
version "3.12.0"
|
||||
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
|
||||
integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
|
||||
dependencies:
|
||||
browserify-cipher "^1.0.0"
|
||||
browserify-sign "^4.0.0"
|
||||
create-ecdh "^4.0.0"
|
||||
create-hash "^1.1.0"
|
||||
create-hmac "^1.1.0"
|
||||
diffie-hellman "^5.0.0"
|
||||
inherits "^2.0.1"
|
||||
pbkdf2 "^3.0.3"
|
||||
public-encrypt "^4.0.0"
|
||||
randombytes "^2.0.0"
|
||||
randomfill "^1.0.3"
|
||||
|
||||
crypto-random-string@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
|
||||
integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
|
||||
|
||||
css-color-names@0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
|
||||
integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
|
||||
|
||||
css-loader@^0.28.1:
|
||||
version "0.28.11"
|
||||
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7"
|
||||
integrity sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==
|
||||
dependencies:
|
||||
babel-code-frame "^6.26.0"
|
||||
css-selector-tokenizer "^0.7.0"
|
||||
cssnano "^3.10.0"
|
||||
icss-utils "^2.1.0"
|
||||
loader-utils "^1.0.2"
|
||||
lodash.camelcase "^4.3.0"
|
||||
object-assign "^4.1.1"
|
||||
postcss "^5.0.6"
|
||||
postcss-modules-extract-imports "^1.2.0"
|
||||
postcss-modules-local-by-default "^1.2.0"
|
||||
postcss-modules-scope "^1.1.0"
|
||||
postcss-modules-values "^1.3.0"
|
||||
postcss-value-parser "^3.3.0"
|
||||
source-list-map "^2.0.0"
|
||||
|
||||
css-selector-tokenizer@^0.7.0:
|
||||
version "0.7.3"
|
||||
resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1"
|
||||
integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==
|
||||
dependencies:
|
||||
cssesc "^3.0.0"
|
||||
fastparse "^1.1.2"
|
||||
|
||||
css@^2.0.0:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
|
||||
integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
source-map "^0.6.1"
|
||||
source-map-resolve "^0.5.2"
|
||||
urix "^0.1.0"
|
||||
|
||||
cssesc@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
|
||||
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
|
||||
|
||||
cssnano@^3.10.0:
|
||||
version "3.10.0"
|
||||
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
|
||||
integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=
|
||||
dependencies:
|
||||
autoprefixer "^6.3.1"
|
||||
decamelize "^1.1.2"
|
||||
defined "^1.0.0"
|
||||
has "^1.0.1"
|
||||
object-assign "^4.0.1"
|
||||
postcss "^5.0.14"
|
||||
postcss-calc "^5.2.0"
|
||||
postcss-colormin "^2.1.8"
|
||||
postcss-convert-values "^2.3.4"
|
||||
postcss-discard-comments "^2.0.4"
|
||||
postcss-discard-duplicates "^2.0.1"
|
||||
postcss-discard-empty "^2.0.1"
|
||||
postcss-discard-overridden "^0.1.1"
|
||||
postcss-discard-unused "^2.2.1"
|
||||
postcss-filter-plugins "^2.0.0"
|
||||
postcss-merge-idents "^2.1.5"
|
||||
postcss-merge-longhand "^2.0.1"
|
||||
postcss-merge-rules "^2.0.3"
|
||||
postcss-minify-font-values "^1.0.2"
|
||||
postcss-minify-gradients "^1.0.1"
|
||||
postcss-minify-params "^1.0.4"
|
||||
postcss-minify-selectors "^2.0.4"
|
||||
postcss-normalize-charset "^1.1.0"
|
||||
postcss-normalize-url "^3.0.7"
|
||||
postcss-ordered-values "^2.1.0"
|
||||
postcss-reduce-idents "^2.2.2"
|
||||
postcss-reduce-initial "^1.0.0"
|
||||
postcss-reduce-transforms "^1.0.3"
|
||||
postcss-svgo "^2.1.1"
|
||||
postcss-unique-selectors "^2.0.2"
|
||||
postcss-value-parser "^3.2.3"
|
||||
postcss-zindex "^2.0.1"
|
||||
|
||||
csso@~2.3.1:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
|
||||
integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=
|
||||
dependencies:
|
||||
clap "^1.0.9"
|
||||
source-map "^0.5.3"
|
||||
|
||||
currently-unhandled@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
|
||||
integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
|
||||
dependencies:
|
||||
array-find-index "^1.0.1"
|
||||
|
||||
cyclist@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
|
||||
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
|
||||
|
||||
d@1, d@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
|
||||
integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
|
||||
dependencies:
|
||||
es5-ext "^0.10.50"
|
||||
type "^1.0.1"
|
||||
|
||||
damerau-levenshtein@^1.0.0:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
|
||||
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
|
||||
|
||||
dashdash@^1.12.0:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
||||
integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
|
||||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
|
||||
debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@^3.1.0, debug@^3.2.7:
|
||||
version "3.2.7"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
||||
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debuglog@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
|
||||
integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
|
||||
|
||||
decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
|
||||
|
||||
decode-uri-component@^0.2.0:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
|
||||
integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
|
||||
|
||||
deep-extend@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
|
||||
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
|
||||
|
||||
deep-is@~0.1.3:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
|
||||
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
|
||||
|
||||
defaults@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
|
||||
integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
|
||||
dependencies:
|
||||
clone "^1.0.2"
|
||||
|
||||
define-properties@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
||||
integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
|
||||
dependencies:
|
||||
object-keys "^1.0.12"
|
||||
|
||||
define-property@^0.2.5:
|
||||
version "0.2.5"
|
||||
resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
|
||||
integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
|
||||
dependencies:
|
||||
is-descriptor "^0.1.0"
|
||||
|
||||
define-property@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
|
||||
integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
|
||||
dependencies:
|
||||
is-descriptor "^1.0.0"
|
||||
|
||||
define-property@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
|
||||
integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
|
||||
dependencies:
|
||||
is-descriptor "^1.0.2"
|
||||
isobject "^3.0.1"
|
||||
|
||||
defined@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
|
||||
integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
|
||||
|
||||
delayed-stream@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
|
||||
|
||||
delegates@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
||||
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
|
||||
|
||||
depd@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
|
||||
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
|
||||
|
||||
des.js@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
|
||||
integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
minimalistic-assert "^1.0.0"
|
||||
|
||||
destroy@~1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
|
||||
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
|
||||
|
||||
detect-indent@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
|
||||
integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
|
||||
dependencies:
|
||||
repeating "^2.0.0"
|
||||
|
||||
detect-indent@~5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
|
||||
integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50=
|
||||
|
||||
detect-newline@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
|
||||
integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
|
||||
|
||||
dezalgo@^1.0.0, dezalgo@~1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456"
|
||||
integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=
|
||||
dependencies:
|
||||
asap "^2.0.0"
|
||||
wrappy "1"
|
||||
|
||||
diffie-hellman@^5.0.0:
|
||||
version "5.0.3"
|
||||
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
|
||||
integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
|
||||
dependencies:
|
||||
bn.js "^4.1.0"
|
||||
miller-rabin "^4.0.0"
|
||||
randombytes "^2.0.0"
|
||||
|
||||
doctrine@^1.2.2:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
|
||||
integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
isarray "^1.0.0"
|
||||
|
||||
doctrine@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
|
||||
integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
|
||||
doctrine@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
||||
integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
|
||||
domain-browser@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
|
||||
integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
|
||||
|
||||
dot-prop@^4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4"
|
||||
integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==
|
||||
dependencies:
|
||||
is-obj "^1.0.0"
|
||||
|
||||
dotenv@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef"
|
||||
integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==
|
||||
|
||||
duplexer3@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
|
||||
integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
|
||||
|
||||
duplexer@^0.1.1:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
|
||||
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
|
||||
|
||||
duplexify@^3.4.2, duplexify@^3.6.0:
|
||||
version "3.7.1"
|
||||
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
|
||||
integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
|
||||
dependencies:
|
||||
end-of-stream "^1.0.0"
|
||||
inherits "^2.0.1"
|
||||
readable-stream "^2.0.0"
|
||||
stream-shift "^1.0.0"
|
||||
|
||||
ecc-jsbn@~0.1.1:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
|
||||
integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
|
||||
dependencies:
|
||||
jsbn "~0.1.0"
|
||||
safer-buffer "^2.1.0"
|
||||
|
||||
editor@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742"
|
||||
integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=
|
||||
|
||||
ee-first@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||
|
||||
ejs@^2.6.1:
|
||||
version "2.7.4"
|
||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
|
||||
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
|
||||
|
||||
electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47:
|
||||
version "1.4.103"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz#abfe376a4d70fa1e1b4b353b95df5d6dfd05da3a"
|
||||
integrity sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==
|
||||
|
||||
elliptic@^6.5.3:
|
||||
version "6.5.4"
|
||||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
|
||||
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
|
||||
dependencies:
|
||||
bn.js "^4.11.9"
|
||||
brorand "^1.1.0"
|
||||
hash.js "^1.0.0"
|
||||
hmac-drbg "^1.0.1"
|
||||
inherits "^2.0.4"
|
||||
minimalistic-assert "^1.0.1"
|
||||
minimalistic-crypto-utils "^1.0.1"
|
||||
|
||||
emoji-regex@^6.1.0:
|
||||
version "6.5.1"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2"
|
||||
integrity sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==
|
||||
|
||||
emoji-regex@^7.0.1:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
|
||||
integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||
|
||||
emojis-list@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
|
||||
integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
|
||||
|
||||
emojis-list@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
|
||||
integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
|
||||
|
||||
encodeurl@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
||||
|
||||
encoding@^0.1.11:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
|
||||
integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
|
||||
dependencies:
|
||||
iconv-lite "^0.6.2"
|
||||
|
||||
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
|
||||
version "1.4.4"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
enhanced-resolve@^3.3.0:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
|
||||
integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
memory-fs "^0.4.0"
|
||||
object-assign "^4.0.1"
|
||||
tapable "^0.2.7"
|
||||
|
||||
entities@~2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
|
||||
integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
|
||||
|
||||
env-paths@^2.2.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
|
||||
integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
|
||||
|
||||
err-code@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960"
|
||||
integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=
|
||||
|
||||
errno@^0.1.3, errno@~0.1.7:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
|
||||
integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
|
||||
dependencies:
|
||||
prr "~1.0.1"
|
||||
|
||||
error-ex@^1.2.0, error-ex@^1.3.1:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
|
||||
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
|
||||
dependencies:
|
||||
is-arrayish "^0.2.1"
|
||||
|
||||
es-abstract@^1.19.0, es-abstract@^1.19.1:
|
||||
version "1.19.2"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f"
|
||||
integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
es-to-primitive "^1.2.1"
|
||||
function-bind "^1.1.1"
|
||||
get-intrinsic "^1.1.1"
|
||||
get-symbol-description "^1.0.0"
|
||||
has "^1.0.3"
|
||||
has-symbols "^1.0.3"
|
||||
internal-slot "^1.0.3"
|
||||
is-callable "^1.2.4"
|
||||
is-negative-zero "^2.0.2"
|
||||
is-regex "^1.1.4"
|
||||
is-shared-array-buffer "^1.0.1"
|
||||
is-string "^1.0.7"
|
||||
is-weakref "^1.0.2"
|
||||
object-inspect "^1.12.0"
|
||||
object-keys "^1.1.1"
|
||||
object.assign "^4.1.2"
|
||||
string.prototype.trimend "^1.0.4"
|
||||
string.prototype.trimstart "^1.0.4"
|
||||
unbox-primitive "^1.0.1"
|
||||
|
||||
es-to-primitive@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
|
||||
integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
|
||||
dependencies:
|
||||
is-callable "^1.1.4"
|
||||
is-date-object "^1.0.1"
|
||||
is-symbol "^1.0.2"
|
||||
|
||||
es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14:
|
||||
version "0.10.59"
|
||||
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.59.tgz#71038939730eb6f4f165f1421308fb60be363bc6"
|
||||
integrity sha512-cOgyhW0tIJyQY1Kfw6Kr0viu9ZlUctVchRMZ7R0HiH3dxTSp5zJDLecwxUqPUrGKMsgBI1wd1FL+d9Jxfi4cLw==
|
||||
dependencies:
|
||||
es6-iterator "^2.0.3"
|
||||
es6-symbol "^3.1.3"
|
||||
next-tick "^1.1.0"
|
||||
|
||||
es6-iterator@^2.0.3, es6-iterator@~2.0.1:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
|
||||
integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
|
||||
dependencies:
|
||||
d "1"
|
||||
es5-ext "^0.10.35"
|
||||
es6-symbol "^3.1.1"
|
||||
|
||||
es6-map@^0.1.3:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
|
||||
integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=
|
||||
dependencies:
|
||||
d "1"
|
||||
es5-ext "~0.10.14"
|
||||
es6-iterator "~2.0.1"
|
||||
es6-set "~0.1.5"
|
||||
es6-symbol "~3.1.1"
|
||||
event-emitter "~0.3.5"
|
||||
|
||||
es6-promise@^4.0.3:
|
||||
version "4.2.8"
|
||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
|
||||
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
|
||||
|
||||
es6-promisify@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
|
||||
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
|
||||
dependencies:
|
||||
es6-promise "^4.0.3"
|
||||
|
||||
es6-set@~0.1.5:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
|
||||
integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=
|
||||
dependencies:
|
||||
d "1"
|
||||
es5-ext "~0.10.14"
|
||||
es6-iterator "~2.0.1"
|
||||
es6-symbol "3.1.1"
|
||||
event-emitter "~0.3.5"
|
||||
|
||||
es6-symbol@3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
|
||||
integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
|
||||
dependencies:
|
||||
d "1"
|
||||
es5-ext "~0.10.14"
|
||||
|
||||
es6-symbol@^3.1.1, es6-symbol@^3.1.3, es6-symbol@~3.1.1:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
|
||||
integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
|
||||
dependencies:
|
||||
d "^1.0.1"
|
||||
ext "^1.1.2"
|
||||
|
||||
es6-weak-map@^2.0.1:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
|
||||
integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
|
||||
dependencies:
|
||||
d "1"
|
||||
es5-ext "^0.10.46"
|
||||
es6-iterator "^2.0.3"
|
||||
es6-symbol "^3.1.1"
|
||||
|
||||
escape-html@~1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
||||
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
|
||||
|
||||
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
|
||||
escope@^3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
|
||||
integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=
|
||||
dependencies:
|
||||
es6-map "^0.1.3"
|
||||
es6-weak-map "^2.0.1"
|
||||
esrecurse "^4.1.0"
|
||||
estraverse "^4.1.1"
|
||||
|
||||
eslint-config-airbnb-base@^11.3.0:
|
||||
version "11.3.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a"
|
||||
integrity sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==
|
||||
dependencies:
|
||||
eslint-restricted-globals "^0.1.1"
|
||||
|
||||
eslint-config-airbnb-base@^12.0.0:
|
||||
version "12.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944"
|
||||
integrity sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==
|
||||
dependencies:
|
||||
eslint-restricted-globals "^0.1.1"
|
||||
|
||||
eslint-config-airbnb@^15.1.0:
|
||||
version "15.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e"
|
||||
integrity sha512-m0q9fiMBzDAIbirlGnpJNWToIhdhJmXXnMG+IFflYzzod9231ZhtmGKegKg8E9T8F1YuVaDSU1FnCm5b9iXVhQ==
|
||||
dependencies:
|
||||
eslint-config-airbnb-base "^11.3.0"
|
||||
|
||||
eslint-import-resolver-node@^0.3.6:
|
||||
version "0.3.6"
|
||||
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
|
||||
integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
|
||||
dependencies:
|
||||
debug "^3.2.7"
|
||||
resolve "^1.20.0"
|
||||
|
||||
eslint-loader@^1.7.1:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13"
|
||||
integrity sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==
|
||||
dependencies:
|
||||
loader-fs-cache "^1.0.0"
|
||||
loader-utils "^1.0.2"
|
||||
object-assign "^4.0.1"
|
||||
object-hash "^1.1.4"
|
||||
rimraf "^2.6.1"
|
||||
|
||||
eslint-module-utils@^2.7.2:
|
||||
version "2.7.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
|
||||
integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
|
||||
dependencies:
|
||||
debug "^3.2.7"
|
||||
find-up "^2.1.0"
|
||||
|
||||
eslint-plugin-import@^2.7.0:
|
||||
version "2.25.4"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1"
|
||||
integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==
|
||||
dependencies:
|
||||
array-includes "^3.1.4"
|
||||
array.prototype.flat "^1.2.5"
|
||||
debug "^2.6.9"
|
||||
doctrine "^2.1.0"
|
||||
eslint-import-resolver-node "^0.3.6"
|
||||
eslint-module-utils "^2.7.2"
|
||||
has "^1.0.3"
|
||||
is-core-module "^2.8.0"
|
||||
is-glob "^4.0.3"
|
||||
minimatch "^3.0.4"
|
||||
object.values "^1.1.5"
|
||||
resolve "^1.20.0"
|
||||
tsconfig-paths "^3.12.0"
|
||||
|
||||
eslint-plugin-jsx-a11y@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1"
|
||||
integrity sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==
|
||||
dependencies:
|
||||
aria-query "^0.7.0"
|
||||
array-includes "^3.0.3"
|
||||
ast-types-flow "0.0.7"
|
||||
axobject-query "^0.1.0"
|
||||
damerau-levenshtein "^1.0.0"
|
||||
emoji-regex "^6.1.0"
|
||||
jsx-ast-utils "^1.4.0"
|
||||
|
||||
eslint-plugin-react@^7.3.0:
|
||||
version "7.29.4"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2"
|
||||
integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==
|
||||
dependencies:
|
||||
array-includes "^3.1.4"
|
||||
array.prototype.flatmap "^1.2.5"
|
||||
doctrine "^2.1.0"
|
||||
estraverse "^5.3.0"
|
||||
jsx-ast-utils "^2.4.1 || ^3.0.0"
|
||||
minimatch "^3.1.2"
|
||||
object.entries "^1.1.5"
|
||||
object.fromentries "^2.0.5"
|
||||
object.hasown "^1.1.0"
|
||||
object.values "^1.1.5"
|
||||
prop-types "^15.8.1"
|
||||
resolve "^2.0.0-next.3"
|
||||
semver "^6.3.0"
|
||||
string.prototype.matchall "^4.0.6"
|
||||
|
||||
eslint-restricted-globals@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7"
|
||||
integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=
|
||||
|
||||
eslint-scope@^3.7.1:
|
||||
version "3.7.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
|
||||
integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==
|
||||
dependencies:
|
||||
esrecurse "^4.1.0"
|
||||
estraverse "^4.1.1"
|
||||
|
||||
eslint-visitor-keys@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
|
||||
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
|
||||
|
||||
eslint@^2.7.0:
|
||||
version "2.13.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz#e4cc8fa0f009fb829aaae23855a29360be1f6c11"
|
||||
integrity sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=
|
||||
dependencies:
|
||||
chalk "^1.1.3"
|
||||
concat-stream "^1.4.6"
|
||||
debug "^2.1.1"
|
||||
doctrine "^1.2.2"
|
||||
es6-map "^0.1.3"
|
||||
escope "^3.6.0"
|
||||
espree "^3.1.6"
|
||||
estraverse "^4.2.0"
|
||||
esutils "^2.0.2"
|
||||
file-entry-cache "^1.1.1"
|
||||
glob "^7.0.3"
|
||||
globals "^9.2.0"
|
||||
ignore "^3.1.2"
|
||||
imurmurhash "^0.1.4"
|
||||
inquirer "^0.12.0"
|
||||
is-my-json-valid "^2.10.0"
|
||||
is-resolvable "^1.0.0"
|
||||
js-yaml "^3.5.1"
|
||||
json-stable-stringify "^1.0.0"
|
||||
levn "^0.3.0"
|
||||
lodash "^4.0.0"
|
||||
mkdirp "^0.5.0"
|
||||
optionator "^0.8.1"
|
||||
path-is-absolute "^1.0.0"
|
||||
path-is-inside "^1.0.1"
|
||||
pluralize "^1.2.1"
|
||||
progress "^1.1.8"
|
||||
require-uncached "^1.0.2"
|
||||
shelljs "^0.6.0"
|
||||
strip-json-comments "~1.0.1"
|
||||
table "^3.7.8"
|
||||
text-table "~0.2.0"
|
||||
user-home "^2.0.0"
|
||||
|
||||
eslint@^4.6.1:
|
||||
version "4.19.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
|
||||
integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==
|
||||
dependencies:
|
||||
ajv "^5.3.0"
|
||||
babel-code-frame "^6.22.0"
|
||||
chalk "^2.1.0"
|
||||
concat-stream "^1.6.0"
|
||||
cross-spawn "^5.1.0"
|
||||
debug "^3.1.0"
|
||||
doctrine "^2.1.0"
|
||||
eslint-scope "^3.7.1"
|
||||
eslint-visitor-keys "^1.0.0"
|
||||
espree "^3.5.4"
|
||||
esquery "^1.0.0"
|
||||
esutils "^2.0.2"
|
||||
file-entry-cache "^2.0.0"
|
||||
functional-red-black-tree "^1.0.1"
|
||||
glob "^7.1.2"
|
||||
globals "^11.0.1"
|
||||
ignore "^3.3.3"
|
||||
imurmurhash "^0.1.4"
|
||||
inquirer "^3.0.6"
|
||||
is-resolvable "^1.0.0"
|
||||
js-yaml "^3.9.1"
|
||||
json-stable-stringify-without-jsonify "^1.0.1"
|
||||
levn "^0.3.0"
|
||||
lodash "^4.17.4"
|
||||
minimatch "^3.0.2"
|
||||
mkdirp "^0.5.1"
|
||||
natural-compare "^1.4.0"
|
||||
optionator "^0.8.2"
|
||||
path-is-inside "^1.0.2"
|
||||
pluralize "^7.0.0"
|
||||
progress "^2.0.0"
|
||||
regexpp "^1.0.1"
|
||||
require-uncached "^1.0.3"
|
||||
semver "^5.3.0"
|
||||
strip-ansi "^4.0.0"
|
||||
strip-json-comments "~2.0.1"
|
||||
table "4.0.2"
|
||||
text-table "~0.2.0"
|
||||
|
||||
espree@^3.1.6, espree@^3.5.4:
|
||||
version "3.5.4"
|
||||
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
|
||||
integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
|
||||
dependencies:
|
||||
acorn "^5.5.0"
|
||||
acorn-jsx "^3.0.0"
|
||||
|
||||
esprima@^2.6.0:
|
||||
version "2.7.3"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
|
||||
integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
|
||||
|
||||
esprima@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
||||
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
||||
|
||||
esquery@^1.0.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
|
||||
integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
|
||||
dependencies:
|
||||
estraverse "^5.1.0"
|
||||
|
||||
esrecurse@^4.1.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
|
||||
integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
|
||||
dependencies:
|
||||
estraverse "^5.2.0"
|
||||
|
||||
estraverse@^4.1.1, estraverse@^4.2.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
|
||||
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
||||
|
||||
estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
|
||||
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
|
||||
|
||||
esutils@^2.0.2:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
|
||||
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
|
||||
|
||||
etag@~1.8.1:
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
||||
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
|
||||
|
||||
event-emitter@~0.3.5:
|
||||
version "0.3.5"
|
||||
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
|
||||
integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
|
||||
dependencies:
|
||||
d "1"
|
||||
es5-ext "~0.10.14"
|
||||
|
||||
events@^3.0.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
|
||||
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
|
||||
|
||||
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
|
||||
integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
|
||||
dependencies:
|
||||
md5.js "^1.3.4"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
execa@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
|
||||
integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
|
||||
dependencies:
|
||||
cross-spawn "^5.0.1"
|
||||
get-stream "^3.0.0"
|
||||
is-stream "^1.1.0"
|
||||
npm-run-path "^2.0.0"
|
||||
p-finally "^1.0.0"
|
||||
signal-exit "^3.0.0"
|
||||
strip-eof "^1.0.0"
|
||||
|
||||
exit-hook@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
|
||||
integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=
|
||||
|
||||
expand-brackets@^2.1.4:
|
||||
version "2.1.4"
|
||||
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
|
||||
integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
|
||||
dependencies:
|
||||
debug "^2.3.3"
|
||||
define-property "^0.2.5"
|
||||
extend-shallow "^2.0.1"
|
||||
posix-character-classes "^0.1.0"
|
||||
regex-not "^1.0.0"
|
||||
snapdragon "^0.8.1"
|
||||
to-regex "^3.0.1"
|
||||
|
||||
expose-loader@^0.7.3:
|
||||
version "0.7.5"
|
||||
resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.5.tgz#e29ea2d9aeeed3254a3faa1b35f502db9f9c3f6f"
|
||||
integrity sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==
|
||||
|
||||
express@^4.16.3:
|
||||
version "4.17.3"
|
||||
resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1"
|
||||
integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==
|
||||
dependencies:
|
||||
accepts "~1.3.8"
|
||||
array-flatten "1.1.1"
|
||||
body-parser "1.19.2"
|
||||
content-disposition "0.5.4"
|
||||
content-type "~1.0.4"
|
||||
cookie "0.4.2"
|
||||
cookie-signature "1.0.6"
|
||||
debug "2.6.9"
|
||||
depd "~1.1.2"
|
||||
encodeurl "~1.0.2"
|
||||
escape-html "~1.0.3"
|
||||
etag "~1.8.1"
|
||||
finalhandler "~1.1.2"
|
||||
fresh "0.5.2"
|
||||
merge-descriptors "1.0.1"
|
||||
methods "~1.1.2"
|
||||
on-finished "~2.3.0"
|
||||
parseurl "~1.3.3"
|
||||
path-to-regexp "0.1.7"
|
||||
proxy-addr "~2.0.7"
|
||||
qs "6.9.7"
|
||||
range-parser "~1.2.1"
|
||||
safe-buffer "5.2.1"
|
||||
send "0.17.2"
|
||||
serve-static "1.14.2"
|
||||
setprototypeof "1.2.0"
|
||||
statuses "~1.5.0"
|
||||
type-is "~1.6.18"
|
||||
utils-merge "1.0.1"
|
||||
vary "~1.1.2"
|
||||
|
||||
ext@^1.1.2:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52"
|
||||
integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==
|
||||
dependencies:
|
||||
type "^2.5.0"
|
||||
|
||||
extend-shallow@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
|
||||
integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
|
||||
dependencies:
|
||||
is-extendable "^0.1.0"
|
||||
|
||||
extend-shallow@^3.0.0, extend-shallow@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
|
||||
integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
|
||||
dependencies:
|
||||
assign-symbols "^1.0.0"
|
||||
is-extendable "^1.0.1"
|
||||
|
||||
extend@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
||||
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
||||
|
||||
external-editor@^2.0.4:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
|
||||
integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
|
||||
dependencies:
|
||||
chardet "^0.4.0"
|
||||
iconv-lite "^0.4.17"
|
||||
tmp "^0.0.33"
|
||||
|
||||
extglob@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
|
||||
integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
|
||||
dependencies:
|
||||
array-unique "^0.3.2"
|
||||
define-property "^1.0.0"
|
||||
expand-brackets "^2.1.4"
|
||||
extend-shallow "^2.0.1"
|
||||
fragment-cache "^0.2.1"
|
||||
regex-not "^1.0.0"
|
||||
snapdragon "^0.8.1"
|
||||
to-regex "^3.0.1"
|
||||
|
||||
extract-text-webpack-plugin@^2.1.0:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz#756ef4efa8155c3681833fbc34da53b941746d6c"
|
||||
integrity sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=
|
||||
dependencies:
|
||||
async "^2.1.2"
|
||||
loader-utils "^1.0.2"
|
||||
schema-utils "^0.3.0"
|
||||
webpack-sources "^1.0.1"
|
||||
|
||||
extsprintf@1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
|
||||
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
|
||||
|
||||
extsprintf@^1.2.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
|
||||
integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
|
||||
|
||||
fast-deep-equal@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
|
||||
integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
|
||||
|
||||
fast-deep-equal@^3.1.1:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||
|
||||
fast-json-stable-stringify@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
||||
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
||||
|
||||
fast-levenshtein@~2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
||||
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
|
||||
|
||||
fastparse@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
|
||||
integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
|
||||
|
||||
figgy-pudding@^3.4.1, figgy-pudding@^3.5.1:
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
|
||||
integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
|
||||
|
||||
figures@^1.3.5:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
|
||||
integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
|
||||
dependencies:
|
||||
escape-string-regexp "^1.0.5"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
figures@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
|
||||
integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
|
||||
dependencies:
|
||||
escape-string-regexp "^1.0.5"
|
||||
|
||||
file-entry-cache@^1.1.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8"
|
||||
integrity sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=
|
||||
dependencies:
|
||||
flat-cache "^1.2.1"
|
||||
object-assign "^4.0.1"
|
||||
|
||||
file-entry-cache@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
|
||||
integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
|
||||
dependencies:
|
||||
flat-cache "^1.2.1"
|
||||
object-assign "^4.0.1"
|
||||
|
||||
file-loader@^0.11.1:
|
||||
version "0.11.2"
|
||||
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34"
|
||||
integrity sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==
|
||||
dependencies:
|
||||
loader-utils "^1.0.2"
|
||||
|
||||
file-uri-to-path@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
||||
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
|
||||
|
||||
file@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/file/-/file-0.2.2.tgz#c3dfd8f8cf3535ae455c2b423c2e52635d76b4d3"
|
||||
integrity sha1-w9/Y+M81Na5FXCtCPC5SY112tNM=
|
||||
|
||||
filesize@^3.6.1:
|
||||
version "3.6.1"
|
||||
resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
|
||||
integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==
|
||||
|
||||
fill-range@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
|
||||
integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
|
||||
dependencies:
|
||||
extend-shallow "^2.0.1"
|
||||
is-number "^3.0.0"
|
||||
repeat-string "^1.6.1"
|
||||
to-regex-range "^2.1.0"
|
||||
|
||||
fill-range@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
|
||||
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
|
||||
dependencies:
|
||||
to-regex-range "^5.0.1"
|
||||
|
||||
filter-obj@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
|
||||
integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs=
|
||||
|
||||
finalhandler@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
|
||||
integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
|
||||
dependencies:
|
||||
debug "2.6.9"
|
||||
encodeurl "~1.0.2"
|
||||
escape-html "~1.0.3"
|
||||
on-finished "~2.3.0"
|
||||
parseurl "~1.3.3"
|
||||
statuses "~1.5.0"
|
||||
unpipe "~1.0.0"
|
||||
|
||||
find-cache-dir@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
|
||||
integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
|
||||
dependencies:
|
||||
commondir "^1.0.1"
|
||||
mkdirp "^0.5.1"
|
||||
pkg-dir "^1.0.0"
|
||||
|
||||
find-cache-dir@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
|
||||
integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=
|
||||
dependencies:
|
||||
commondir "^1.0.1"
|
||||
make-dir "^1.0.0"
|
||||
pkg-dir "^2.0.0"
|
||||
|
||||
find-npm-prefix@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf"
|
||||
integrity sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==
|
||||
|
||||
find-up@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
|
||||
integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
|
||||
dependencies:
|
||||
path-exists "^2.0.0"
|
||||
pinkie-promise "^2.0.0"
|
||||
|
||||
find-up@^2.0.0, find-up@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
||||
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
|
||||
dependencies:
|
||||
locate-path "^2.0.0"
|
||||
|
||||
find-up@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
||||
integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
|
||||
dependencies:
|
||||
locate-path "^3.0.0"
|
||||
|
||||
find-up@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
|
||||
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
|
||||
dependencies:
|
||||
locate-path "^5.0.0"
|
||||
path-exists "^4.0.0"
|
||||
|
||||
flat-cache@^1.2.1:
|
||||
version "1.3.4"
|
||||
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
|
||||
integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
|
||||
dependencies:
|
||||
circular-json "^0.3.1"
|
||||
graceful-fs "^4.1.2"
|
||||
rimraf "~2.6.2"
|
||||
write "^0.2.1"
|
||||
|
||||
flatten@^1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
|
||||
integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
|
||||
|
||||
flush-write-stream@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
|
||||
integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^2.3.6"
|
||||
|
||||
for-in@^0.1.3:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
|
||||
integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=
|
||||
|
||||
for-in@^1.0.1, for-in@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||
integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
|
||||
|
||||
for-own@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
|
||||
integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=
|
||||
dependencies:
|
||||
for-in "^1.0.1"
|
||||
|
||||
forever-agent@~0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
||||
|
||||
form-data@~2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
||||
integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.6"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
forwarded@0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
||||
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
|
||||
|
||||
fragment-cache@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
|
||||
integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
|
||||
dependencies:
|
||||
map-cache "^0.2.2"
|
||||
|
||||
fresh@0.5.2:
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
||||
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
|
||||
|
||||
from2@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd"
|
||||
integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=
|
||||
dependencies:
|
||||
inherits "~2.0.1"
|
||||
readable-stream "~1.1.10"
|
||||
|
||||
from2@^2.1.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
|
||||
integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
readable-stream "^2.0.0"
|
||||
|
||||
front-matter@2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.2.tgz#f75983b9f2f413be658c93dfd7bd8ce4078f5cdb"
|
||||
integrity sha1-91mDufL0E75ljJPf172M5AePXNs=
|
||||
dependencies:
|
||||
js-yaml "^3.4.6"
|
||||
|
||||
fs-extra@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
|
||||
integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
jsonfile "^3.0.0"
|
||||
universalify "^0.1.0"
|
||||
|
||||
fs-minipass@^1.2.7:
|
||||
version "1.2.7"
|
||||
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
|
||||
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
|
||||
dependencies:
|
||||
minipass "^2.6.0"
|
||||
|
||||
fs-vacuum@^1.2.10, fs-vacuum@~1.2.10:
|
||||
version "1.2.10"
|
||||
resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36"
|
||||
integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY=
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
path-is-inside "^1.0.1"
|
||||
rimraf "^2.5.2"
|
||||
|
||||
fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
|
||||
integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
iferr "^0.1.5"
|
||||
imurmurhash "^0.1.4"
|
||||
readable-stream "1 || 2"
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||
|
||||
fsevents@^1.2.7:
|
||||
version "1.2.13"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
|
||||
integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
|
||||
dependencies:
|
||||
bindings "^1.5.0"
|
||||
nan "^2.12.1"
|
||||
|
||||
fsevents@~2.3.2:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||
|
||||
fstream@^1.0.0, fstream@^1.0.12:
|
||||
version "1.0.12"
|
||||
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
|
||||
integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
inherits "~2.0.0"
|
||||
mkdirp ">=0.5 0"
|
||||
rimraf "2"
|
||||
|
||||
function-bind@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||
|
||||
functional-red-black-tree@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
|
||||
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
|
||||
|
||||
gauge@~2.7.3:
|
||||
version "2.7.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
|
||||
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
|
||||
dependencies:
|
||||
aproba "^1.0.3"
|
||||
console-control-strings "^1.0.0"
|
||||
has-unicode "^2.0.0"
|
||||
object-assign "^4.1.0"
|
||||
signal-exit "^3.0.0"
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
wide-align "^1.1.0"
|
||||
|
||||
gaze@^1.0.0:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
|
||||
integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==
|
||||
dependencies:
|
||||
globule "^1.0.0"
|
||||
|
||||
generate-function@^2.0.0:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
|
||||
integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
|
||||
dependencies:
|
||||
is-property "^1.0.2"
|
||||
|
||||
generate-object-property@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
|
||||
integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
|
||||
dependencies:
|
||||
is-property "^1.0.0"
|
||||
|
||||
genfun@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537"
|
||||
integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==
|
||||
|
||||
gentle-fs@^2.3.0, gentle-fs@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.1.tgz#11201bf66c18f930ddca72cf69460bdfa05727b1"
|
||||
integrity sha512-OlwBBwqCFPcjm33rF2BjW+Pr6/ll2741l+xooiwTCeaX2CA1ZuclavyMBe0/KlR21/XGsgY6hzEQZ15BdNa13Q==
|
||||
dependencies:
|
||||
aproba "^1.1.2"
|
||||
chownr "^1.1.2"
|
||||
cmd-shim "^3.0.3"
|
||||
fs-vacuum "^1.2.10"
|
||||
graceful-fs "^4.1.11"
|
||||
iferr "^0.1.5"
|
||||
infer-owner "^1.0.4"
|
||||
mkdirp "^0.5.1"
|
||||
path-is-inside "^1.0.2"
|
||||
read-cmd-shim "^1.0.1"
|
||||
slide "^1.1.6"
|
||||
|
||||
get-caller-file@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
|
||||
integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
|
||||
|
||||
get-caller-file@^2.0.1:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
||||
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
||||
|
||||
get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
|
||||
integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
has "^1.0.3"
|
||||
has-symbols "^1.0.1"
|
||||
|
||||
get-stdin@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
||||
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
|
||||
|
||||
get-stream@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
||||
integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
|
||||
|
||||
get-stream@^4.0.0, get-stream@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
|
||||
integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
|
||||
dependencies:
|
||||
pump "^3.0.0"
|
||||
|
||||
get-symbol-description@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
|
||||
integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
get-intrinsic "^1.1.1"
|
||||
|
||||
get-value@^2.0.3, get-value@^2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
|
||||
integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
|
||||
|
||||
getpass@^0.1.1:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
||||
integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
|
||||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
|
||||
glob-parent@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
|
||||
integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
|
||||
dependencies:
|
||||
is-glob "^3.1.0"
|
||||
path-dirname "^1.0.0"
|
||||
|
||||
glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
|
||||
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@~7.1.1:
|
||||
version "7.1.7"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
|
||||
integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
global-dirs@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
|
||||
integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
|
||||
dependencies:
|
||||
ini "^1.3.4"
|
||||
|
||||
globals@^11.0.1:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||
|
||||
globals@^9.18.0, globals@^9.2.0:
|
||||
version "9.18.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
|
||||
integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
|
||||
|
||||
globule@^1.0.0:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.3.tgz#811919eeac1ab7344e905f2e3be80a13447973c2"
|
||||
integrity sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==
|
||||
dependencies:
|
||||
glob "~7.1.1"
|
||||
lodash "~4.17.10"
|
||||
minimatch "~3.0.2"
|
||||
|
||||
gonzales-pe-sl@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz#6a868bc380645f141feeb042c6f97fcc71b59fe6"
|
||||
integrity sha1-aoaLw4BkXxQf7rBCxvl/zHG1n+Y=
|
||||
dependencies:
|
||||
minimist "1.1.x"
|
||||
|
||||
got@^6.7.1:
|
||||
version "6.7.1"
|
||||
resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
|
||||
integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
|
||||
dependencies:
|
||||
create-error-class "^3.0.0"
|
||||
duplexer3 "^0.1.4"
|
||||
get-stream "^3.0.0"
|
||||
is-redirect "^1.0.0"
|
||||
is-retry-allowed "^1.0.0"
|
||||
is-stream "^1.0.0"
|
||||
lowercase-keys "^1.0.0"
|
||||
safe-buffer "^5.0.1"
|
||||
timed-out "^4.0.0"
|
||||
unzip-response "^2.0.1"
|
||||
url-parse-lax "^1.0.0"
|
||||
|
||||
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2, graceful-fs@^4.2.4:
|
||||
version "4.2.9"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
|
||||
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
|
||||
|
||||
gzip-size@^5.0.0:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
|
||||
integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
|
||||
dependencies:
|
||||
duplexer "^0.1.1"
|
||||
pify "^4.0.1"
|
||||
|
||||
har-schema@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
||||
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
|
||||
|
||||
har-validator@~5.1.3:
|
||||
version "5.1.5"
|
||||
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
|
||||
integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
|
||||
dependencies:
|
||||
ajv "^6.12.3"
|
||||
har-schema "^2.0.0"
|
||||
|
||||
has-ansi@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
||||
integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
has-bigints@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
|
||||
integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
|
||||
|
||||
has-flag@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
|
||||
integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
|
||||
|
||||
has-flag@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
||||
|
||||
has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
|
||||
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
|
||||
|
||||
has-tostringtag@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
|
||||
integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
|
||||
dependencies:
|
||||
has-symbols "^1.0.2"
|
||||
|
||||
has-unicode@^2.0.0, has-unicode@~2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
||||
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
|
||||
|
||||
has-value@^0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
|
||||
integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
|
||||
dependencies:
|
||||
get-value "^2.0.3"
|
||||
has-values "^0.1.4"
|
||||
isobject "^2.0.0"
|
||||
|
||||
has-value@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
|
||||
integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
|
||||
dependencies:
|
||||
get-value "^2.0.6"
|
||||
has-values "^1.0.0"
|
||||
isobject "^3.0.0"
|
||||
|
||||
has-values@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
|
||||
integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
|
||||
|
||||
has-values@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
|
||||
integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
|
||||
dependencies:
|
||||
is-number "^3.0.0"
|
||||
kind-of "^4.0.0"
|
||||
|
||||
has@^1.0.1, has@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
||||
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
hash-base@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
|
||||
integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
|
||||
dependencies:
|
||||
inherits "^2.0.4"
|
||||
readable-stream "^3.6.0"
|
||||
safe-buffer "^5.2.0"
|
||||
|
||||
hash.js@^1.0.0, hash.js@^1.0.3:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
|
||||
integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
minimalistic-assert "^1.0.1"
|
||||
|
||||
hmac-drbg@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
||||
integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
|
||||
dependencies:
|
||||
hash.js "^1.0.3"
|
||||
minimalistic-assert "^1.0.0"
|
||||
minimalistic-crypto-utils "^1.0.1"
|
||||
|
||||
home-or-tmp@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
|
||||
integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
|
||||
dependencies:
|
||||
os-homedir "^1.0.0"
|
||||
os-tmpdir "^1.0.1"
|
||||
|
||||
hoopy@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
|
||||
integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
|
||||
|
||||
hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.9:
|
||||
version "2.8.9"
|
||||
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
|
||||
integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
|
||||
|
||||
html-comment-regex@^1.1.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
|
||||
integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
|
||||
|
||||
http-cache-semantics@^3.8.1:
|
||||
version "3.8.1"
|
||||
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
|
||||
integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
|
||||
|
||||
http-errors@1.8.1:
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
|
||||
integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==
|
||||
dependencies:
|
||||
depd "~1.1.2"
|
||||
inherits "2.0.4"
|
||||
setprototypeof "1.2.0"
|
||||
statuses ">= 1.5.0 < 2"
|
||||
toidentifier "1.0.1"
|
||||
|
||||
http-proxy-agent@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
|
||||
integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
|
||||
dependencies:
|
||||
agent-base "4"
|
||||
debug "3.1.0"
|
||||
|
||||
http-signature@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
||||
integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
|
||||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
jsprim "^1.2.2"
|
||||
sshpk "^1.7.0"
|
||||
|
||||
https-browserify@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
|
||||
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
|
||||
|
||||
https-proxy-agent@^2.2.3:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
|
||||
integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
|
||||
dependencies:
|
||||
agent-base "^4.3.0"
|
||||
debug "^3.1.0"
|
||||
|
||||
humanize-ms@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
|
||||
integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=
|
||||
dependencies:
|
||||
ms "^2.0.0"
|
||||
|
||||
iconv-lite@0.4.24, iconv-lite@^0.4.17:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
||||
dependencies:
|
||||
safer-buffer ">= 2.1.2 < 3"
|
||||
|
||||
iconv-lite@^0.6.2:
|
||||
version "0.6.3"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
||||
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
|
||||
dependencies:
|
||||
safer-buffer ">= 2.1.2 < 3.0.0"
|
||||
|
||||
icss-replace-symbols@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
|
||||
integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
|
||||
|
||||
icss-utils@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
|
||||
integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=
|
||||
dependencies:
|
||||
postcss "^6.0.1"
|
||||
|
||||
ieee754@^1.1.4:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||
|
||||
iferr@^0.1.5:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
|
||||
integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
|
||||
|
||||
iferr@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d"
|
||||
integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==
|
||||
|
||||
ignore-walk@^3.0.1:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335"
|
||||
integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==
|
||||
dependencies:
|
||||
minimatch "^3.0.4"
|
||||
|
||||
ignore@^3.1.2, ignore@^3.3.3:
|
||||
version "3.3.10"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
|
||||
integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
|
||||
|
||||
import-cwd@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
|
||||
integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=
|
||||
dependencies:
|
||||
import-from "^2.1.0"
|
||||
|
||||
import-fresh@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
|
||||
integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
|
||||
dependencies:
|
||||
caller-path "^2.0.0"
|
||||
resolve-from "^3.0.0"
|
||||
|
||||
import-from@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
|
||||
integrity sha1-M1238qev/VOqpHHUuAId7ja387E=
|
||||
dependencies:
|
||||
resolve-from "^3.0.0"
|
||||
|
||||
import-lazy@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
|
||||
integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
|
||||
|
||||
imports-loader@^0.6.5:
|
||||
version "0.6.5"
|
||||
resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.6.5.tgz#ae74653031d59e37b3c2fb2544ac61aeae3530a6"
|
||||
integrity sha1-rnRlMDHVnjezwvslRKxhrq41MKY=
|
||||
dependencies:
|
||||
loader-utils "0.2.x"
|
||||
source-map "0.1.x"
|
||||
|
||||
imurmurhash@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
||||
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
|
||||
|
||||
in-publish@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c"
|
||||
integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==
|
||||
|
||||
indent-string@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
|
||||
integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
|
||||
dependencies:
|
||||
repeating "^2.0.0"
|
||||
|
||||
indexes-of@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
|
||||
integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
|
||||
|
||||
infer-owner@^1.0.3, infer-owner@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
|
||||
integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
|
||||
|
||||
inflight@^1.0.4, inflight@~1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
|
||||
dependencies:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
|
||||
inherits@2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
|
||||
integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
|
||||
|
||||
inherits@2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
||||
|
||||
ini@^1.3.4, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0:
|
||||
version "1.3.8"
|
||||
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
|
||||
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
|
||||
|
||||
init-package-json@^1.10.3:
|
||||
version "1.10.3"
|
||||
resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe"
|
||||
integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==
|
||||
dependencies:
|
||||
glob "^7.1.1"
|
||||
npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0"
|
||||
promzard "^0.3.0"
|
||||
read "~1.0.1"
|
||||
read-package-json "1 || 2"
|
||||
semver "2.x || 3.x || 4 || 5"
|
||||
validate-npm-package-license "^3.0.1"
|
||||
validate-npm-package-name "^3.0.0"
|
||||
|
||||
inquirer@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
|
||||
integrity sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=
|
||||
dependencies:
|
||||
ansi-escapes "^1.1.0"
|
||||
ansi-regex "^2.0.0"
|
||||
chalk "^1.0.0"
|
||||
cli-cursor "^1.0.1"
|
||||
cli-width "^2.0.0"
|
||||
figures "^1.3.5"
|
||||
lodash "^4.3.0"
|
||||
readline2 "^1.0.1"
|
||||
run-async "^0.1.0"
|
||||
rx-lite "^3.1.2"
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.0"
|
||||
through "^2.3.6"
|
||||
|
||||
inquirer@^3.0.6:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
|
||||
integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
|
||||
dependencies:
|
||||
ansi-escapes "^3.0.0"
|
||||
chalk "^2.0.0"
|
||||
cli-cursor "^2.1.0"
|
||||
cli-width "^2.0.0"
|
||||
external-editor "^2.0.4"
|
||||
figures "^2.0.0"
|
||||
lodash "^4.3.0"
|
||||
mute-stream "0.0.7"
|
||||
run-async "^2.2.0"
|
||||
rx-lite "^4.0.8"
|
||||
rx-lite-aggregates "^4.0.8"
|
||||
string-width "^2.1.0"
|
||||
strip-ansi "^4.0.0"
|
||||
through "^2.3.6"
|
||||
|
||||
internal-slot@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
|
||||
integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
|
||||
dependencies:
|
||||
get-intrinsic "^1.1.0"
|
||||
has "^1.0.3"
|
||||
side-channel "^1.0.4"
|
||||
|
||||
interpret@^1.0.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
|
||||
integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
|
||||
|
||||
invariant@^2.2.2:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
|
||||
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
invert-kv@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||
integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
|
||||
|
||||
ip-regex@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
|
||||
integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
|
||||
|
||||
ip@1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
|
||||
integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
||||
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
||||
|
||||
is-absolute-url@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
|
||||
integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
|
||||
|
||||
is-accessor-descriptor@^0.1.6:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
|
||||
integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
|
||||
dependencies:
|
||||
kind-of "^3.0.2"
|
||||
|
||||
is-accessor-descriptor@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
|
||||
integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
|
||||
dependencies:
|
||||
kind-of "^6.0.0"
|
||||
|
||||
is-arrayish@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
|
||||
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
|
||||
|
||||
is-bigint@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
|
||||
integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
|
||||
dependencies:
|
||||
has-bigints "^1.0.1"
|
||||
|
||||
is-binary-path@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
|
||||
integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
|
||||
dependencies:
|
||||
binary-extensions "^1.0.0"
|
||||
|
||||
is-binary-path@~2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
|
||||
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
|
||||
dependencies:
|
||||
binary-extensions "^2.0.0"
|
||||
|
||||
is-boolean-object@^1.1.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
|
||||
integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-buffer@^1.1.5:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
||||
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
|
||||
|
||||
is-callable@^1.1.4, is-callable@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
|
||||
integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
|
||||
|
||||
is-ci@^1.0.10:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
|
||||
integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
|
||||
dependencies:
|
||||
ci-info "^1.5.0"
|
||||
|
||||
is-cidr@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7"
|
||||
integrity sha512-Gx+oErgq1j2jAKCR2Kbq0b3wbH0vQKqZ0wOlHxm0o56nq51Cs/DZA8oz9dMDhbHyHEGgJ86eTeVudtgMMOx3Mw==
|
||||
dependencies:
|
||||
cidr-regex "^2.0.10"
|
||||
|
||||
is-core-module@^2.2.0, is-core-module@^2.8.0, is-core-module@^2.8.1:
|
||||
version "2.8.1"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
|
||||
integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-data-descriptor@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
|
||||
integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
|
||||
dependencies:
|
||||
kind-of "^3.0.2"
|
||||
|
||||
is-data-descriptor@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
|
||||
integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
|
||||
dependencies:
|
||||
kind-of "^6.0.0"
|
||||
|
||||
is-date-object@^1.0.1:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
|
||||
integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
|
||||
dependencies:
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-descriptor@^0.1.0:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
|
||||
integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
|
||||
dependencies:
|
||||
is-accessor-descriptor "^0.1.6"
|
||||
is-data-descriptor "^0.1.4"
|
||||
kind-of "^5.0.0"
|
||||
|
||||
is-descriptor@^1.0.0, is-descriptor@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
|
||||
integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
|
||||
dependencies:
|
||||
is-accessor-descriptor "^1.0.0"
|
||||
is-data-descriptor "^1.0.0"
|
||||
kind-of "^6.0.2"
|
||||
|
||||
is-directory@^0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
|
||||
integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
|
||||
|
||||
is-extendable@^0.1.0, is-extendable@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
|
||||
integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
|
||||
|
||||
is-extendable@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
|
||||
integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
|
||||
dependencies:
|
||||
is-plain-object "^2.0.4"
|
||||
|
||||
is-extglob@^2.1.0, is-extglob@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
|
||||
|
||||
is-finite@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
|
||||
integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
|
||||
|
||||
is-fullwidth-code-point@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
||||
integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
|
||||
dependencies:
|
||||
number-is-nan "^1.0.0"
|
||||
|
||||
is-fullwidth-code-point@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
||||
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
|
||||
|
||||
is-fullwidth-code-point@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||
|
||||
is-glob@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
|
||||
integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
|
||||
dependencies:
|
||||
is-extglob "^2.1.0"
|
||||
|
||||
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
|
||||
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
||||
dependencies:
|
||||
is-extglob "^2.1.1"
|
||||
|
||||
is-installed-globally@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
|
||||
integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
|
||||
dependencies:
|
||||
global-dirs "^0.1.0"
|
||||
is-path-inside "^1.0.0"
|
||||
|
||||
is-my-ip-valid@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz#f7220d1146257c98672e6fba097a9f3f2d348442"
|
||||
integrity sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==
|
||||
|
||||
is-my-json-valid@^2.10.0:
|
||||
version "2.20.6"
|
||||
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz#a9d89e56a36493c77bda1440d69ae0dc46a08387"
|
||||
integrity sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==
|
||||
dependencies:
|
||||
generate-function "^2.0.0"
|
||||
generate-object-property "^1.1.0"
|
||||
is-my-ip-valid "^1.0.0"
|
||||
jsonpointer "^5.0.0"
|
||||
xtend "^4.0.0"
|
||||
|
||||
is-negative-zero@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
|
||||
integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
|
||||
|
||||
is-npm@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
|
||||
integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
|
||||
|
||||
is-number-object@^1.0.4:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
|
||||
integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==
|
||||
dependencies:
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-number@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
|
||||
integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
|
||||
dependencies:
|
||||
kind-of "^3.0.2"
|
||||
|
||||
is-number@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
||||
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
||||
|
||||
is-obj@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
||||
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
|
||||
|
||||
is-path-inside@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
|
||||
integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
|
||||
dependencies:
|
||||
path-is-inside "^1.0.1"
|
||||
|
||||
is-plain-obj@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
|
||||
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
|
||||
|
||||
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
|
||||
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
|
||||
dependencies:
|
||||
isobject "^3.0.1"
|
||||
|
||||
is-property@^1.0.0, is-property@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
|
||||
integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
|
||||
|
||||
is-redirect@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
|
||||
integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
|
||||
|
||||
is-regex@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
|
||||
integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-resolvable@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
|
||||
integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
|
||||
|
||||
is-retry-allowed@^1.0.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
|
||||
integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
|
||||
|
||||
is-shared-array-buffer@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
|
||||
integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
|
||||
|
||||
is-stream@^1.0.0, is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
||||
|
||||
is-string@^1.0.5, is-string@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
|
||||
integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
|
||||
dependencies:
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-svg@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
|
||||
integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=
|
||||
dependencies:
|
||||
html-comment-regex "^1.1.0"
|
||||
|
||||
is-symbol@^1.0.2, is-symbol@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
|
||||
integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
|
||||
dependencies:
|
||||
has-symbols "^1.0.2"
|
||||
|
||||
is-typedarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
||||
|
||||
is-utf8@^0.2.0:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
|
||||
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
|
||||
|
||||
is-weakref@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
|
||||
integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
|
||||
is-windows@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
|
||||
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
|
||||
|
||||
isarray@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
|
||||
integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
|
||||
|
||||
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
isobject@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
|
||||
integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
|
||||
dependencies:
|
||||
isarray "1.0.0"
|
||||
|
||||
isobject@^3.0.0, isobject@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
|
||||
|
||||
isstream@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
||||
|
||||
js-base64@^2.1.8, js-base64@^2.1.9:
|
||||
version "2.6.4"
|
||||
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
|
||||
integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
|
||||
|
||||
"js-tokens@^3.0.0 || ^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
js-tokens@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
||||
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
|
||||
|
||||
js-yaml@^3.13.1, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4, js-yaml@^3.9.1:
|
||||
version "3.14.1"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
|
||||
integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
|
||||
dependencies:
|
||||
argparse "^1.0.7"
|
||||
esprima "^4.0.0"
|
||||
|
||||
js-yaml@~3.7.0:
|
||||
version "3.7.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
|
||||
integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=
|
||||
dependencies:
|
||||
argparse "^1.0.7"
|
||||
esprima "^2.6.0"
|
||||
|
||||
jsbn@~0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
|
||||
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
|
||||
|
||||
jsesc@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
|
||||
integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
|
||||
|
||||
jsesc@~0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
|
||||
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
|
||||
|
||||
json-loader@^0.5.4:
|
||||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
|
||||
integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==
|
||||
|
||||
json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
|
||||
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
|
||||
|
||||
json-parse-even-better-errors@^2.3.0:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
|
||||
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
|
||||
|
||||
json-schema-traverse@^0.3.0:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
|
||||
integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
|
||||
|
||||
json-schema-traverse@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
|
||||
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
|
||||
|
||||
json-schema@0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
|
||||
integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
|
||||
|
||||
json-stable-stringify-without-jsonify@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
|
||||
|
||||
json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
|
||||
integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
|
||||
dependencies:
|
||||
jsonify "~0.0.0"
|
||||
|
||||
json-stringify-safe@~5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||
|
||||
json5@^0.5.0, json5@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
|
||||
integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
|
||||
|
||||
json5@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
|
||||
integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
|
||||
dependencies:
|
||||
minimist "^1.2.0"
|
||||
|
||||
jsonfile@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
|
||||
integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=
|
||||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
jsonify@~0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
|
||||
integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
|
||||
|
||||
jsonparse@^1.2.0:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
|
||||
integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
|
||||
|
||||
jsonpointer@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072"
|
||||
integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==
|
||||
|
||||
jsprim@^1.2.2:
|
||||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
|
||||
integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
|
||||
dependencies:
|
||||
assert-plus "1.0.0"
|
||||
extsprintf "1.3.0"
|
||||
json-schema "0.4.0"
|
||||
verror "1.10.0"
|
||||
|
||||
jsx-ast-utils@^1.4.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
|
||||
integrity sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=
|
||||
|
||||
"jsx-ast-utils@^2.4.1 || ^3.0.0":
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz#6ab1e52c71dfc0c0707008a91729a9491fe9f76c"
|
||||
integrity sha512-HDAyJ4MNQBboGpUnHAVUNJs6X0lh058s6FuixsFGP7MgJYpD6Vasd6nzSG5iIfXu1zAYlHJ/zsOKNlrenTUBnw==
|
||||
dependencies:
|
||||
array-includes "^3.1.4"
|
||||
object.assign "^4.1.2"
|
||||
|
||||
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
|
||||
integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
|
||||
dependencies:
|
||||
is-buffer "^1.1.5"
|
||||
|
||||
kind-of@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
|
||||
integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
|
||||
dependencies:
|
||||
is-buffer "^1.1.5"
|
||||
|
||||
kind-of@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
|
||||
integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
|
||||
|
||||
kind-of@^6.0.0, kind-of@^6.0.2:
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
|
||||
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
|
||||
|
||||
known-css-properties@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.3.0.tgz#a3d135bbfc60ee8c6eacf2f7e7e6f2d4755e49a4"
|
||||
integrity sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ==
|
||||
|
||||
latest-version@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
|
||||
integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
|
||||
dependencies:
|
||||
package-json "^4.0.0"
|
||||
|
||||
lazy-cache@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
|
||||
integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
|
||||
|
||||
lazy-property@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147"
|
||||
integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=
|
||||
|
||||
lcid@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
|
||||
integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
|
||||
dependencies:
|
||||
invert-kv "^1.0.0"
|
||||
|
||||
levn@^0.3.0, levn@~0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
||||
integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
|
||||
dependencies:
|
||||
prelude-ls "~1.1.2"
|
||||
type-check "~0.3.2"
|
||||
|
||||
libcipm@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89"
|
||||
integrity sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA==
|
||||
dependencies:
|
||||
bin-links "^1.1.2"
|
||||
bluebird "^3.5.1"
|
||||
figgy-pudding "^3.5.1"
|
||||
find-npm-prefix "^1.0.2"
|
||||
graceful-fs "^4.1.11"
|
||||
ini "^1.3.5"
|
||||
lock-verify "^2.1.0"
|
||||
mkdirp "^0.5.1"
|
||||
npm-lifecycle "^3.0.0"
|
||||
npm-logical-tree "^1.2.1"
|
||||
npm-package-arg "^6.1.0"
|
||||
pacote "^9.1.0"
|
||||
read-package-json "^2.0.13"
|
||||
rimraf "^2.6.2"
|
||||
worker-farm "^1.6.0"
|
||||
|
||||
libnpm@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2"
|
||||
integrity sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ==
|
||||
dependencies:
|
||||
bin-links "^1.1.2"
|
||||
bluebird "^3.5.3"
|
||||
find-npm-prefix "^1.0.2"
|
||||
libnpmaccess "^3.0.2"
|
||||
libnpmconfig "^1.2.1"
|
||||
libnpmhook "^5.0.3"
|
||||
libnpmorg "^1.0.1"
|
||||
libnpmpublish "^1.1.2"
|
||||
libnpmsearch "^2.0.2"
|
||||
libnpmteam "^1.0.2"
|
||||
lock-verify "^2.0.2"
|
||||
npm-lifecycle "^3.0.0"
|
||||
npm-logical-tree "^1.2.1"
|
||||
npm-package-arg "^6.1.0"
|
||||
npm-profile "^4.0.2"
|
||||
npm-registry-fetch "^4.0.0"
|
||||
npmlog "^4.1.2"
|
||||
pacote "^9.5.3"
|
||||
read-package-json "^2.0.13"
|
||||
stringify-package "^1.0.0"
|
||||
|
||||
libnpmaccess@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923"
|
||||
integrity sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ==
|
||||
dependencies:
|
||||
aproba "^2.0.0"
|
||||
get-stream "^4.0.0"
|
||||
npm-package-arg "^6.1.0"
|
||||
npm-registry-fetch "^4.0.0"
|
||||
|
||||
libnpmconfig@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0"
|
||||
integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==
|
||||
dependencies:
|
||||
figgy-pudding "^3.5.1"
|
||||
find-up "^3.0.0"
|
||||
ini "^1.3.5"
|
||||
|
||||
libnpmhook@^5.0.3:
|
||||
version "5.0.3"
|
||||
resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7"
|
||||
integrity sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA==
|
||||
dependencies:
|
||||
aproba "^2.0.0"
|
||||
figgy-pudding "^3.4.1"
|
||||
get-stream "^4.0.0"
|
||||
npm-registry-fetch "^4.0.0"
|
||||
|
||||
libnpmorg@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087"
|
||||
integrity sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww==
|
||||
dependencies:
|
||||
aproba "^2.0.0"
|
||||
figgy-pudding "^3.4.1"
|
||||
get-stream "^4.0.0"
|
||||
npm-registry-fetch "^4.0.0"
|
||||
|
||||
libnpmpublish@^1.1.2:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280"
|
||||
integrity sha512-/3LsYqVc52cHXBmu26+J8Ed7sLs/hgGVFMH1mwYpL7Qaynb9RenpKqIKu0sJ130FB9PMkpMlWjlbtU8A4m7CQw==
|
||||
dependencies:
|
||||
aproba "^2.0.0"
|
||||
figgy-pudding "^3.5.1"
|
||||
get-stream "^4.0.0"
|
||||
lodash.clonedeep "^4.5.0"
|
||||
normalize-package-data "^2.4.0"
|
||||
npm-package-arg "^6.1.0"
|
||||
npm-registry-fetch "^4.0.0"
|
||||
semver "^5.5.1"
|
||||
ssri "^6.0.1"
|
||||
|
||||
libnpmsearch@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf"
|
||||
integrity sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg==
|
||||
dependencies:
|
||||
figgy-pudding "^3.5.1"
|
||||
get-stream "^4.0.0"
|
||||
npm-registry-fetch "^4.0.0"
|
||||
|
||||
libnpmteam@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820"
|
||||
integrity sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA==
|
||||
dependencies:
|
||||
aproba "^2.0.0"
|
||||
figgy-pudding "^3.4.1"
|
||||
get-stream "^4.0.0"
|
||||
npm-registry-fetch "^4.0.0"
|
||||
|
||||
libnpx@^10.2.4:
|
||||
version "10.2.4"
|
||||
resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.4.tgz#ef0e3258e29aef2ec7ee3276115e20e67f67d4ee"
|
||||
integrity sha512-BPc0D1cOjBeS8VIBKUu5F80s6njm0wbVt7CsGMrIcJ+SI7pi7V0uVPGpEMH9H5L8csOcclTxAXFE2VAsJXUhfA==
|
||||
dependencies:
|
||||
dotenv "^5.0.1"
|
||||
npm-package-arg "^6.0.0"
|
||||
rimraf "^2.6.2"
|
||||
safe-buffer "^5.1.0"
|
||||
update-notifier "^2.3.0"
|
||||
which "^1.3.0"
|
||||
y18n "^4.0.0"
|
||||
yargs "^14.2.3"
|
||||
|
||||
linkify-it@^3.0.1:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e"
|
||||
integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==
|
||||
dependencies:
|
||||
uc.micro "^1.0.1"
|
||||
|
||||
load-json-file@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
|
||||
integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
parse-json "^2.2.0"
|
||||
pify "^2.0.0"
|
||||
pinkie-promise "^2.0.0"
|
||||
strip-bom "^2.0.0"
|
||||
|
||||
load-json-file@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
|
||||
integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
parse-json "^2.2.0"
|
||||
pify "^2.0.0"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
loader-fs-cache@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9"
|
||||
integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==
|
||||
dependencies:
|
||||
find-cache-dir "^0.1.1"
|
||||
mkdirp "^0.5.1"
|
||||
|
||||
loader-runner@^2.3.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
|
||||
integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
|
||||
|
||||
loader-utils@0.2.x, loader-utils@^0.2.16:
|
||||
version "0.2.17"
|
||||
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
|
||||
integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
|
||||
dependencies:
|
||||
big.js "^3.1.3"
|
||||
emojis-list "^2.0.0"
|
||||
json5 "^0.5.0"
|
||||
object-assign "^4.0.1"
|
||||
|
||||
loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
|
||||
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
|
||||
dependencies:
|
||||
big.js "^5.2.2"
|
||||
emojis-list "^3.0.0"
|
||||
json5 "^1.0.1"
|
||||
|
||||
locate-path@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
|
||||
integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
|
||||
dependencies:
|
||||
p-locate "^2.0.0"
|
||||
path-exists "^3.0.0"
|
||||
|
||||
locate-path@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
||||
integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
|
||||
dependencies:
|
||||
p-locate "^3.0.0"
|
||||
path-exists "^3.0.0"
|
||||
|
||||
locate-path@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
|
||||
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
|
||||
dependencies:
|
||||
p-locate "^4.1.0"
|
||||
|
||||
lock-verify@^2.0.2, lock-verify@^2.1.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.1.tgz#81107948c51ed16f97b96ff8b60675affb243fc1"
|
||||
integrity sha512-n0Zw2DVupKfZMazy/HIFVNohJ1z8fIoZ77WBnyyBGG6ixw83uJNyrbiJvvHWe1QKkGiBCjj8RCPlymltliqEww==
|
||||
dependencies:
|
||||
"@iarna/cli" "^1.2.0"
|
||||
npm-package-arg "^6.1.0"
|
||||
semver "^5.4.1"
|
||||
|
||||
lockfile@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609"
|
||||
integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==
|
||||
dependencies:
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
lodash._baseassign@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
|
||||
integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=
|
||||
dependencies:
|
||||
lodash._basecopy "^3.0.0"
|
||||
lodash.keys "^3.0.0"
|
||||
|
||||
lodash._basecopy@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
|
||||
integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=
|
||||
|
||||
lodash._baseuniq@~4.6.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8"
|
||||
integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=
|
||||
dependencies:
|
||||
lodash._createset "~4.0.0"
|
||||
lodash._root "~3.0.0"
|
||||
|
||||
lodash._bindcallback@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
|
||||
integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4=
|
||||
|
||||
lodash._createassigner@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
|
||||
integrity sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=
|
||||
dependencies:
|
||||
lodash._bindcallback "^3.0.0"
|
||||
lodash._isiterateecall "^3.0.0"
|
||||
lodash.restparam "^3.0.0"
|
||||
|
||||
lodash._createset@~4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
|
||||
integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=
|
||||
|
||||
lodash._getnative@^3.0.0:
|
||||
version "3.9.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
|
||||
integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
|
||||
|
||||
lodash._isiterateecall@^3.0.0:
|
||||
version "3.0.9"
|
||||
resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
|
||||
integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=
|
||||
|
||||
lodash._root@~3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
|
||||
integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=
|
||||
|
||||
lodash.assign@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"
|
||||
integrity sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=
|
||||
dependencies:
|
||||
lodash._baseassign "^3.0.0"
|
||||
lodash._createassigner "^3.0.0"
|
||||
lodash.keys "^3.0.0"
|
||||
|
||||
lodash.assign@^4.0.1:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
|
||||
integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=
|
||||
|
||||
lodash.camelcase@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
||||
integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
|
||||
|
||||
lodash.capitalize@^4.1.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9"
|
||||
integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk=
|
||||
|
||||
lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
|
||||
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
|
||||
|
||||
lodash.defaults@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c"
|
||||
integrity sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=
|
||||
dependencies:
|
||||
lodash.assign "^3.0.0"
|
||||
lodash.restparam "^3.0.0"
|
||||
|
||||
lodash.defaults@^4.0.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
|
||||
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
|
||||
|
||||
lodash.isarguments@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
|
||||
integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=
|
||||
|
||||
lodash.isarray@^3.0.0:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
|
||||
integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=
|
||||
|
||||
lodash.kebabcase@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
|
||||
integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY=
|
||||
|
||||
lodash.keys@^3.0.0:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
|
||||
integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=
|
||||
dependencies:
|
||||
lodash._getnative "^3.0.0"
|
||||
lodash.isarguments "^3.0.0"
|
||||
lodash.isarray "^3.0.0"
|
||||
|
||||
lodash.memoize@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
|
||||
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
|
||||
|
||||
lodash.restparam@^3.0.0:
|
||||
version "3.6.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
|
||||
integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=
|
||||
|
||||
lodash.tail@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
|
||||
integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=
|
||||
|
||||
lodash.union@~4.6.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
|
||||
integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=
|
||||
|
||||
lodash.uniq@^4.5.0, lodash.uniq@~4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
||||
|
||||
lodash.without@~4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac"
|
||||
integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=
|
||||
|
||||
lodash@^4.0.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.10:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
longest@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
|
||||
integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
|
||||
|
||||
loose-envify@^1.0.0, loose-envify@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
||||
dependencies:
|
||||
js-tokens "^3.0.0 || ^4.0.0"
|
||||
|
||||
loud-rejection@^1.0.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
|
||||
integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
|
||||
dependencies:
|
||||
currently-unhandled "^0.4.1"
|
||||
signal-exit "^3.0.0"
|
||||
|
||||
lowercase-keys@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
|
||||
integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
|
||||
|
||||
lru-cache@^4.0.1:
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
|
||||
integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
|
||||
dependencies:
|
||||
pseudomap "^1.0.2"
|
||||
yallist "^2.1.2"
|
||||
|
||||
lru-cache@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
||||
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
make-dir@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
|
||||
integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
|
||||
dependencies:
|
||||
pify "^3.0.0"
|
||||
|
||||
make-fetch-happen@^5.0.0:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd"
|
||||
integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==
|
||||
dependencies:
|
||||
agentkeepalive "^3.4.1"
|
||||
cacache "^12.0.0"
|
||||
http-cache-semantics "^3.8.1"
|
||||
http-proxy-agent "^2.1.0"
|
||||
https-proxy-agent "^2.2.3"
|
||||
lru-cache "^5.1.1"
|
||||
mississippi "^3.0.0"
|
||||
node-fetch-npm "^2.0.2"
|
||||
promise-retry "^1.1.1"
|
||||
socks-proxy-agent "^4.0.0"
|
||||
ssri "^6.0.0"
|
||||
|
||||
map-cache@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
|
||||
integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
|
||||
|
||||
map-obj@^1.0.0, map-obj@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
|
||||
integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
|
||||
|
||||
map-visit@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
|
||||
integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
|
||||
dependencies:
|
||||
object-visit "^1.0.0"
|
||||
|
||||
markdown-it@^12.3.2:
|
||||
version "12.3.2"
|
||||
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90"
|
||||
integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
entities "~2.1.0"
|
||||
linkify-it "^3.0.1"
|
||||
mdurl "^1.0.1"
|
||||
uc.micro "^1.0.5"
|
||||
|
||||
math-expression-evaluator@^1.2.14:
|
||||
version "1.3.14"
|
||||
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.3.14.tgz#0ebeaccf65fea0f6f5a626f88df41814e5fcd9bf"
|
||||
integrity sha512-M6AMrvq9bO8uL42KvQHPA2/SbAobA0R7gviUmPrcTcGfdwpaLitz4q2Euzx2lP9Oy88vxK3HOrsISgSwKsYS4A==
|
||||
|
||||
md5.js@^1.3.4:
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
|
||||
integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
|
||||
dependencies:
|
||||
hash-base "^3.0.0"
|
||||
inherits "^2.0.1"
|
||||
safe-buffer "^5.1.2"
|
||||
|
||||
mdurl@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
|
||||
integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
|
||||
|
||||
meant@^1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c"
|
||||
integrity sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==
|
||||
|
||||
media-typer@0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
||||
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
|
||||
|
||||
mem@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
|
||||
integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
|
||||
dependencies:
|
||||
mimic-fn "^1.0.0"
|
||||
|
||||
memory-fs@^0.4.0, memory-fs@~0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
|
||||
integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
|
||||
dependencies:
|
||||
errno "^0.1.3"
|
||||
readable-stream "^2.0.1"
|
||||
|
||||
meow@^3.7.0:
|
||||
version "3.7.0"
|
||||
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
|
||||
integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
|
||||
dependencies:
|
||||
camelcase-keys "^2.0.0"
|
||||
decamelize "^1.1.2"
|
||||
loud-rejection "^1.0.0"
|
||||
map-obj "^1.0.1"
|
||||
minimist "^1.1.3"
|
||||
normalize-package-data "^2.3.4"
|
||||
object-assign "^4.0.1"
|
||||
read-pkg-up "^1.0.1"
|
||||
redent "^1.0.0"
|
||||
trim-newlines "^1.0.0"
|
||||
|
||||
merge-descriptors@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
|
||||
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
|
||||
|
||||
merge@^1.2.0:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
|
||||
integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
|
||||
|
||||
methods@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
|
||||
integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
|
||||
|
||||
micromatch@^3.1.10, micromatch@^3.1.4:
|
||||
version "3.1.10"
|
||||
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
|
||||
integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
|
||||
dependencies:
|
||||
arr-diff "^4.0.0"
|
||||
array-unique "^0.3.2"
|
||||
braces "^2.3.1"
|
||||
define-property "^2.0.2"
|
||||
extend-shallow "^3.0.2"
|
||||
extglob "^2.0.4"
|
||||
fragment-cache "^0.2.1"
|
||||
kind-of "^6.0.2"
|
||||
nanomatch "^1.2.9"
|
||||
object.pick "^1.3.0"
|
||||
regex-not "^1.0.0"
|
||||
snapdragon "^0.8.1"
|
||||
to-regex "^3.0.2"
|
||||
|
||||
miller-rabin@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
|
||||
integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
|
||||
dependencies:
|
||||
bn.js "^4.0.0"
|
||||
brorand "^1.0.1"
|
||||
|
||||
mime-db@1.52.0:
|
||||
version "1.52.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||
|
||||
mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
|
||||
version "2.1.35"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||
dependencies:
|
||||
mime-db "1.52.0"
|
||||
|
||||
mime@1.6.0, mime@^1.4.1:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
||||
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
||||
|
||||
mimic-fn@^1.0.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
|
||||
|
||||
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
||||
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
|
||||
|
||||
minimalistic-crypto-utils@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
||||
|
||||
minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimatch@~3.0.2:
|
||||
version "3.0.8"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1"
|
||||
integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimist@1.1.x:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8"
|
||||
integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=
|
||||
|
||||
minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
|
||||
version "1.2.6"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
||||
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
||||
|
||||
minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0:
|
||||
version "2.9.0"
|
||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
|
||||
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
|
||||
dependencies:
|
||||
safe-buffer "^5.1.2"
|
||||
yallist "^3.0.0"
|
||||
|
||||
minizlib@^1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
|
||||
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
|
||||
dependencies:
|
||||
minipass "^2.9.0"
|
||||
|
||||
mississippi@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
|
||||
integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
|
||||
dependencies:
|
||||
concat-stream "^1.5.0"
|
||||
duplexify "^3.4.2"
|
||||
end-of-stream "^1.1.0"
|
||||
flush-write-stream "^1.0.0"
|
||||
from2 "^2.1.0"
|
||||
parallel-transform "^1.1.0"
|
||||
pump "^3.0.0"
|
||||
pumpify "^1.3.3"
|
||||
stream-each "^1.1.0"
|
||||
through2 "^2.0.0"
|
||||
|
||||
mixin-deep@^1.2.0:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
|
||||
integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
|
||||
dependencies:
|
||||
for-in "^1.0.2"
|
||||
is-extendable "^1.0.1"
|
||||
|
||||
mixin-object@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
|
||||
integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=
|
||||
dependencies:
|
||||
for-in "^0.1.3"
|
||||
is-extendable "^0.1.1"
|
||||
|
||||
mkdirp@0.5.5:
|
||||
version "0.5.5"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
||||
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
|
||||
"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0, mkdirp@~0.5.1:
|
||||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
|
||||
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
|
||||
dependencies:
|
||||
minimist "^1.2.6"
|
||||
|
||||
modernizr-loader@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/modernizr-loader/-/modernizr-loader-1.0.1.tgz#e52a6f9a12578b944abbd6cbd65c863ea4a83f49"
|
||||
integrity sha1-5SpvmhJXi5RKu9bL1lyGPqSoP0k=
|
||||
|
||||
modernizr@^3.6.0:
|
||||
version "3.12.0"
|
||||
resolved "https://registry.yarnpkg.com/modernizr/-/modernizr-3.12.0.tgz#38b1aa96eea48d90fe433f2803a8246acd2fefa9"
|
||||
integrity sha512-i5f5xfnxMOb3cePoBpwk4bWjVAyIB3hgm7QrDvZx/R7zUUS8PO9zlyQF7vJKn8kCVxEvL0nRWeZ0PPqVbY31sw==
|
||||
dependencies:
|
||||
doctrine "^3.0.0"
|
||||
file "^0.2.2"
|
||||
lodash "^4.17.21"
|
||||
markdown-it "^12.3.2"
|
||||
mkdirp "0.5.5"
|
||||
requirejs "^2.3.6"
|
||||
yargs "^15.4.1"
|
||||
|
||||
move-concurrently@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
|
||||
integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
|
||||
dependencies:
|
||||
aproba "^1.1.1"
|
||||
copy-concurrently "^1.0.0"
|
||||
fs-write-stream-atomic "^1.0.8"
|
||||
mkdirp "^0.5.1"
|
||||
rimraf "^2.5.4"
|
||||
run-queue "^1.0.3"
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||
|
||||
ms@2.1.3, ms@^2.0.0, ms@^2.1.1:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
mute-stream@0.0.5:
|
||||
version "0.0.5"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
|
||||
integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=
|
||||
|
||||
mute-stream@0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
|
||||
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
|
||||
|
||||
mute-stream@~0.0.4:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
||||
|
||||
nan@^2.12.1, nan@^2.13.2:
|
||||
version "2.15.0"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
|
||||
integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
|
||||
|
||||
nanomatch@^1.2.9:
|
||||
version "1.2.13"
|
||||
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
|
||||
integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
|
||||
dependencies:
|
||||
arr-diff "^4.0.0"
|
||||
array-unique "^0.3.2"
|
||||
define-property "^2.0.2"
|
||||
extend-shallow "^3.0.2"
|
||||
fragment-cache "^0.2.1"
|
||||
is-windows "^1.0.2"
|
||||
kind-of "^6.0.2"
|
||||
object.pick "^1.3.0"
|
||||
regex-not "^1.0.0"
|
||||
snapdragon "^0.8.1"
|
||||
to-regex "^3.0.1"
|
||||
|
||||
natural-compare@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||
|
||||
negotiator@0.6.3:
|
||||
version "0.6.3"
|
||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
|
||||
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
|
||||
|
||||
neo-async@^2.5.0:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
||||
|
||||
next-tick@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
|
||||
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
|
||||
|
||||
node-fetch-npm@^2.0.2:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4"
|
||||
integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==
|
||||
dependencies:
|
||||
encoding "^0.1.11"
|
||||
json-parse-better-errors "^1.0.0"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
node-gyp@^3.8.0:
|
||||
version "3.8.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
|
||||
integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
|
||||
dependencies:
|
||||
fstream "^1.0.0"
|
||||
glob "^7.0.3"
|
||||
graceful-fs "^4.1.2"
|
||||
mkdirp "^0.5.0"
|
||||
nopt "2 || 3"
|
||||
npmlog "0 || 1 || 2 || 3 || 4"
|
||||
osenv "0"
|
||||
request "^2.87.0"
|
||||
rimraf "2"
|
||||
semver "~5.3.0"
|
||||
tar "^2.0.0"
|
||||
which "1"
|
||||
|
||||
node-gyp@^5.0.2, node-gyp@^5.1.0:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e"
|
||||
integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==
|
||||
dependencies:
|
||||
env-paths "^2.2.0"
|
||||
glob "^7.1.4"
|
||||
graceful-fs "^4.2.2"
|
||||
mkdirp "^0.5.1"
|
||||
nopt "^4.0.1"
|
||||
npmlog "^4.1.2"
|
||||
request "^2.88.0"
|
||||
rimraf "^2.6.3"
|
||||
semver "^5.7.1"
|
||||
tar "^4.4.12"
|
||||
which "^1.3.1"
|
||||
|
||||
node-libs-browser@^2.0.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
|
||||
integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
|
||||
dependencies:
|
||||
assert "^1.1.1"
|
||||
browserify-zlib "^0.2.0"
|
||||
buffer "^4.3.0"
|
||||
console-browserify "^1.1.0"
|
||||
constants-browserify "^1.0.0"
|
||||
crypto-browserify "^3.11.0"
|
||||
domain-browser "^1.1.1"
|
||||
events "^3.0.0"
|
||||
https-browserify "^1.0.0"
|
||||
os-browserify "^0.3.0"
|
||||
path-browserify "0.0.1"
|
||||
process "^0.11.10"
|
||||
punycode "^1.2.4"
|
||||
querystring-es3 "^0.2.0"
|
||||
readable-stream "^2.3.3"
|
||||
stream-browserify "^2.0.1"
|
||||
stream-http "^2.7.2"
|
||||
string_decoder "^1.0.0"
|
||||
timers-browserify "^2.0.4"
|
||||
tty-browserify "0.0.0"
|
||||
url "^0.11.0"
|
||||
util "^0.11.0"
|
||||
vm-browserify "^1.0.1"
|
||||
|
||||
node-sass@^4.5.3:
|
||||
version "4.14.1"
|
||||
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5"
|
||||
integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==
|
||||
dependencies:
|
||||
async-foreach "^0.1.3"
|
||||
chalk "^1.1.1"
|
||||
cross-spawn "^3.0.0"
|
||||
gaze "^1.0.0"
|
||||
get-stdin "^4.0.1"
|
||||
glob "^7.0.3"
|
||||
in-publish "^2.0.0"
|
||||
lodash "^4.17.15"
|
||||
meow "^3.7.0"
|
||||
mkdirp "^0.5.1"
|
||||
nan "^2.13.2"
|
||||
node-gyp "^3.8.0"
|
||||
npmlog "^4.0.0"
|
||||
request "^2.88.0"
|
||||
sass-graph "2.2.5"
|
||||
stdout-stream "^1.4.0"
|
||||
"true-case-path" "^1.0.2"
|
||||
|
||||
"nopt@2 || 3":
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
|
||||
integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
|
||||
dependencies:
|
||||
abbrev "1"
|
||||
|
||||
nopt@^4.0.1, nopt@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
|
||||
integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
|
||||
dependencies:
|
||||
abbrev "1"
|
||||
osenv "^0.1.4"
|
||||
|
||||
normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
||||
integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
|
||||
dependencies:
|
||||
hosted-git-info "^2.1.4"
|
||||
resolve "^1.10.0"
|
||||
semver "2 || 3 || 4 || 5"
|
||||
validate-npm-package-license "^3.0.1"
|
||||
|
||||
normalize-path@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
|
||||
integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
|
||||
dependencies:
|
||||
remove-trailing-separator "^1.0.1"
|
||||
|
||||
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||
|
||||
normalize-range@^0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
|
||||
integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
|
||||
|
||||
normalize-url@^1.4.0:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
|
||||
integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
|
||||
dependencies:
|
||||
object-assign "^4.0.1"
|
||||
prepend-http "^1.0.0"
|
||||
query-string "^4.1.0"
|
||||
sort-keys "^1.0.0"
|
||||
|
||||
npm-audit-report@^1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.3.tgz#8226deeb253b55176ed147592a3995442f2179ed"
|
||||
integrity sha512-8nH/JjsFfAWMvn474HB9mpmMjrnKb1Hx/oTAdjv4PT9iZBvBxiZ+wtDUapHCJwLqYGQVPaAfs+vL5+5k9QndXw==
|
||||
dependencies:
|
||||
cli-table3 "^0.5.0"
|
||||
console-control-strings "^1.1.0"
|
||||
|
||||
npm-bundled@^1.0.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
|
||||
integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==
|
||||
dependencies:
|
||||
npm-normalize-package-bin "^1.0.1"
|
||||
|
||||
npm-cache-filename@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11"
|
||||
integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=
|
||||
|
||||
npm-install-checks@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9"
|
||||
integrity sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg==
|
||||
dependencies:
|
||||
semver "^2.3.0 || 3.x || 4 || 5"
|
||||
|
||||
npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.5:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309"
|
||||
integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==
|
||||
dependencies:
|
||||
byline "^5.0.0"
|
||||
graceful-fs "^4.1.15"
|
||||
node-gyp "^5.0.2"
|
||||
resolve-from "^4.0.0"
|
||||
slide "^1.1.6"
|
||||
uid-number "0.0.6"
|
||||
umask "^1.1.0"
|
||||
which "^1.3.1"
|
||||
|
||||
npm-logical-tree@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88"
|
||||
integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==
|
||||
|
||||
npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
|
||||
integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
|
||||
|
||||
"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7"
|
||||
integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==
|
||||
dependencies:
|
||||
hosted-git-info "^2.7.1"
|
||||
osenv "^0.1.5"
|
||||
semver "^5.6.0"
|
||||
validate-npm-package-name "^3.0.0"
|
||||
|
||||
npm-packlist@^1.1.12, npm-packlist@^1.4.8:
|
||||
version "1.4.8"
|
||||
resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
|
||||
integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
|
||||
dependencies:
|
||||
ignore-walk "^3.0.1"
|
||||
npm-bundled "^1.0.1"
|
||||
npm-normalize-package-bin "^1.0.1"
|
||||
|
||||
npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7"
|
||||
integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==
|
||||
dependencies:
|
||||
figgy-pudding "^3.5.1"
|
||||
npm-package-arg "^6.0.0"
|
||||
semver "^5.4.1"
|
||||
|
||||
npm-profile@^4.0.2, npm-profile@^4.0.4:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b"
|
||||
integrity sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ==
|
||||
dependencies:
|
||||
aproba "^1.1.2 || 2"
|
||||
figgy-pudding "^3.4.1"
|
||||
npm-registry-fetch "^4.0.0"
|
||||
|
||||
npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7:
|
||||
version "4.0.7"
|
||||
resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7"
|
||||
integrity sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==
|
||||
dependencies:
|
||||
JSONStream "^1.3.4"
|
||||
bluebird "^3.5.1"
|
||||
figgy-pudding "^3.4.1"
|
||||
lru-cache "^5.1.1"
|
||||
make-fetch-happen "^5.0.0"
|
||||
npm-package-arg "^6.1.0"
|
||||
safe-buffer "^5.2.0"
|
||||
|
||||
npm-run-path@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
||||
integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
|
||||
dependencies:
|
||||
path-key "^2.0.0"
|
||||
|
||||
npm-user-validate@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561"
|
||||
integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw==
|
||||
|
||||
npm@^6.0.0:
|
||||
version "6.14.16"
|
||||
resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.16.tgz#a882d6b0b32d5212461f0c58719152add1a7b99a"
|
||||
integrity sha512-LMiLGYsVNJfVPlQg7v2NYjG7iRIapcLv+oMunlq7fkXVx0BATCjRu7XyWl0G+iuZzHy4CjtM32QB8ox8juTgaw==
|
||||
dependencies:
|
||||
JSONStream "^1.3.5"
|
||||
abbrev "~1.1.1"
|
||||
ansicolors "~0.3.2"
|
||||
ansistyles "~0.1.3"
|
||||
aproba "^2.0.0"
|
||||
archy "~1.0.0"
|
||||
bin-links "^1.1.8"
|
||||
bluebird "^3.5.5"
|
||||
byte-size "^5.0.1"
|
||||
cacache "^12.0.3"
|
||||
call-limit "^1.1.1"
|
||||
chownr "^1.1.4"
|
||||
ci-info "^2.0.0"
|
||||
cli-columns "^3.1.2"
|
||||
cli-table3 "^0.5.1"
|
||||
cmd-shim "^3.0.3"
|
||||
columnify "~1.5.4"
|
||||
config-chain "^1.1.12"
|
||||
detect-indent "~5.0.0"
|
||||
detect-newline "^2.1.0"
|
||||
dezalgo "~1.0.3"
|
||||
editor "~1.0.0"
|
||||
figgy-pudding "^3.5.1"
|
||||
find-npm-prefix "^1.0.2"
|
||||
fs-vacuum "~1.2.10"
|
||||
fs-write-stream-atomic "~1.0.10"
|
||||
gentle-fs "^2.3.1"
|
||||
glob "^7.1.6"
|
||||
graceful-fs "^4.2.4"
|
||||
has-unicode "~2.0.1"
|
||||
hosted-git-info "^2.8.9"
|
||||
iferr "^1.0.2"
|
||||
infer-owner "^1.0.4"
|
||||
inflight "~1.0.6"
|
||||
inherits "^2.0.4"
|
||||
ini "^1.3.8"
|
||||
init-package-json "^1.10.3"
|
||||
is-cidr "^3.0.0"
|
||||
json-parse-better-errors "^1.0.2"
|
||||
lazy-property "~1.0.0"
|
||||
libcipm "^4.0.8"
|
||||
libnpm "^3.0.1"
|
||||
libnpmaccess "^3.0.2"
|
||||
libnpmhook "^5.0.3"
|
||||
libnpmorg "^1.0.1"
|
||||
libnpmsearch "^2.0.2"
|
||||
libnpmteam "^1.0.2"
|
||||
libnpx "^10.2.4"
|
||||
lock-verify "^2.1.0"
|
||||
lockfile "^1.0.4"
|
||||
lodash._baseuniq "~4.6.0"
|
||||
lodash.clonedeep "~4.5.0"
|
||||
lodash.union "~4.6.0"
|
||||
lodash.uniq "~4.5.0"
|
||||
lodash.without "~4.4.0"
|
||||
lru-cache "^5.1.1"
|
||||
meant "^1.0.2"
|
||||
mississippi "^3.0.0"
|
||||
mkdirp "^0.5.5"
|
||||
move-concurrently "^1.0.1"
|
||||
node-gyp "^5.1.0"
|
||||
nopt "^4.0.3"
|
||||
normalize-package-data "^2.5.0"
|
||||
npm-audit-report "^1.3.3"
|
||||
npm-cache-filename "~1.0.2"
|
||||
npm-install-checks "^3.0.2"
|
||||
npm-lifecycle "^3.1.5"
|
||||
npm-package-arg "^6.1.1"
|
||||
npm-packlist "^1.4.8"
|
||||
npm-pick-manifest "^3.0.2"
|
||||
npm-profile "^4.0.4"
|
||||
npm-registry-fetch "^4.0.7"
|
||||
npm-user-validate "^1.0.1"
|
||||
npmlog "~4.1.2"
|
||||
once "~1.4.0"
|
||||
opener "^1.5.2"
|
||||
osenv "^0.1.5"
|
||||
pacote "^9.5.12"
|
||||
path-is-inside "~1.0.2"
|
||||
promise-inflight "~1.0.1"
|
||||
qrcode-terminal "^0.12.0"
|
||||
query-string "^6.8.2"
|
||||
qw "~1.0.1"
|
||||
read "~1.0.7"
|
||||
read-cmd-shim "^1.0.5"
|
||||
read-installed "~4.0.3"
|
||||
read-package-json "^2.1.1"
|
||||
read-package-tree "^5.3.1"
|
||||
readable-stream "^3.6.0"
|
||||
readdir-scoped-modules "^1.1.0"
|
||||
request "^2.88.0"
|
||||
retry "^0.12.0"
|
||||
rimraf "^2.7.1"
|
||||
safe-buffer "^5.1.2"
|
||||
semver "^5.7.1"
|
||||
sha "^3.0.0"
|
||||
slide "~1.1.6"
|
||||
sorted-object "~2.0.1"
|
||||
sorted-union-stream "~2.1.3"
|
||||
ssri "^6.0.2"
|
||||
stringify-package "^1.0.1"
|
||||
tar "^4.4.19"
|
||||
text-table "~0.2.0"
|
||||
tiny-relative-date "^1.3.0"
|
||||
uid-number "0.0.6"
|
||||
umask "~1.1.0"
|
||||
unique-filename "^1.1.1"
|
||||
unpipe "~1.0.0"
|
||||
update-notifier "^2.5.0"
|
||||
uuid "^3.3.3"
|
||||
validate-npm-package-license "^3.0.4"
|
||||
validate-npm-package-name "~3.0.0"
|
||||
which "^1.3.1"
|
||||
worker-farm "^1.7.0"
|
||||
write-file-atomic "^2.4.3"
|
||||
|
||||
"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.1.2, npmlog@~4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
|
||||
dependencies:
|
||||
are-we-there-yet "~1.1.2"
|
||||
console-control-strings "~1.1.0"
|
||||
gauge "~2.7.3"
|
||||
set-blocking "~2.0.0"
|
||||
|
||||
num2fraction@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
|
||||
integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
|
||||
|
||||
number-is-nan@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
|
||||
|
||||
oauth-sign@~0.9.0:
|
||||
version "0.9.0"
|
||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
||||
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
||||
|
||||
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
||||
|
||||
object-copy@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
|
||||
integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
|
||||
dependencies:
|
||||
copy-descriptor "^0.1.0"
|
||||
define-property "^0.2.5"
|
||||
kind-of "^3.0.3"
|
||||
|
||||
object-hash@^1.1.4:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
|
||||
integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==
|
||||
|
||||
object-inspect@^1.12.0, object-inspect@^1.9.0:
|
||||
version "1.12.0"
|
||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
|
||||
integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==
|
||||
|
||||
object-keys@^1.0.12, object-keys@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
|
||||
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
|
||||
|
||||
object-path@^0.9.2:
|
||||
version "0.9.2"
|
||||
resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5"
|
||||
integrity sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=
|
||||
|
||||
object-visit@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
|
||||
integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
|
||||
dependencies:
|
||||
isobject "^3.0.0"
|
||||
|
||||
object.assign@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
|
||||
integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
define-properties "^1.1.3"
|
||||
has-symbols "^1.0.1"
|
||||
object-keys "^1.1.1"
|
||||
|
||||
object.entries@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
|
||||
integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.1"
|
||||
|
||||
object.fromentries@^2.0.5:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
|
||||
integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.1"
|
||||
|
||||
object.getownpropertydescriptors@^2.0.3:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e"
|
||||
integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.1"
|
||||
|
||||
object.hasown@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5"
|
||||
integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==
|
||||
dependencies:
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.1"
|
||||
|
||||
object.pick@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
|
||||
integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
|
||||
dependencies:
|
||||
isobject "^3.0.1"
|
||||
|
||||
object.values@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
|
||||
integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.1"
|
||||
|
||||
on-finished@~2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
|
||||
integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
|
||||
dependencies:
|
||||
ee-first "1.1.1"
|
||||
|
||||
once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
onetime@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
|
||||
integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=
|
||||
|
||||
onetime@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
|
||||
integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
|
||||
dependencies:
|
||||
mimic-fn "^1.0.0"
|
||||
|
||||
opener@^1.5.1, opener@^1.5.2:
|
||||
version "1.5.2"
|
||||
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
|
||||
integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
|
||||
|
||||
optionator@^0.8.1, optionator@^0.8.2:
|
||||
version "0.8.3"
|
||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
|
||||
integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
|
||||
dependencies:
|
||||
deep-is "~0.1.3"
|
||||
fast-levenshtein "~2.0.6"
|
||||
levn "~0.3.0"
|
||||
prelude-ls "~1.1.2"
|
||||
type-check "~0.3.2"
|
||||
word-wrap "~1.2.3"
|
||||
|
||||
os-browserify@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
|
||||
integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
|
||||
|
||||
os-homedir@^1.0.0, os-homedir@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
|
||||
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
|
||||
|
||||
os-locale@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
|
||||
integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
|
||||
dependencies:
|
||||
lcid "^1.0.0"
|
||||
|
||||
os-locale@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
|
||||
integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
|
||||
dependencies:
|
||||
execa "^0.7.0"
|
||||
lcid "^1.0.0"
|
||||
mem "^1.1.0"
|
||||
|
||||
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
||||
|
||||
osenv@0, osenv@^0.1.4, osenv@^0.1.5:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
|
||||
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
|
||||
dependencies:
|
||||
os-homedir "^1.0.0"
|
||||
os-tmpdir "^1.0.0"
|
||||
|
||||
p-finally@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
||||
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
|
||||
|
||||
p-limit@^1.1.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
|
||||
integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
|
||||
dependencies:
|
||||
p-try "^1.0.0"
|
||||
|
||||
p-limit@^2.0.0, p-limit@^2.2.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
|
||||
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
|
||||
dependencies:
|
||||
p-try "^2.0.0"
|
||||
|
||||
p-locate@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
|
||||
integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
|
||||
dependencies:
|
||||
p-limit "^1.1.0"
|
||||
|
||||
p-locate@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
|
||||
integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
|
||||
dependencies:
|
||||
p-limit "^2.0.0"
|
||||
|
||||
p-locate@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
|
||||
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
|
||||
dependencies:
|
||||
p-limit "^2.2.0"
|
||||
|
||||
p-try@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
|
||||
integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
|
||||
|
||||
p-try@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
||||
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
||||
|
||||
package-json@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
|
||||
integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
|
||||
dependencies:
|
||||
got "^6.7.1"
|
||||
registry-auth-token "^3.0.1"
|
||||
registry-url "^3.0.3"
|
||||
semver "^5.1.0"
|
||||
|
||||
pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3:
|
||||
version "9.5.12"
|
||||
resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66"
|
||||
integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==
|
||||
dependencies:
|
||||
bluebird "^3.5.3"
|
||||
cacache "^12.0.2"
|
||||
chownr "^1.1.2"
|
||||
figgy-pudding "^3.5.1"
|
||||
get-stream "^4.1.0"
|
||||
glob "^7.1.3"
|
||||
infer-owner "^1.0.4"
|
||||
lru-cache "^5.1.1"
|
||||
make-fetch-happen "^5.0.0"
|
||||
minimatch "^3.0.4"
|
||||
minipass "^2.3.5"
|
||||
mississippi "^3.0.0"
|
||||
mkdirp "^0.5.1"
|
||||
normalize-package-data "^2.4.0"
|
||||
npm-normalize-package-bin "^1.0.0"
|
||||
npm-package-arg "^6.1.0"
|
||||
npm-packlist "^1.1.12"
|
||||
npm-pick-manifest "^3.0.0"
|
||||
npm-registry-fetch "^4.0.0"
|
||||
osenv "^0.1.5"
|
||||
promise-inflight "^1.0.1"
|
||||
promise-retry "^1.1.1"
|
||||
protoduck "^5.0.1"
|
||||
rimraf "^2.6.2"
|
||||
safe-buffer "^5.1.2"
|
||||
semver "^5.6.0"
|
||||
ssri "^6.0.1"
|
||||
tar "^4.4.10"
|
||||
unique-filename "^1.1.1"
|
||||
which "^1.3.1"
|
||||
|
||||
pako@~1.0.5:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
||||
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
||||
|
||||
parallel-transform@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
|
||||
integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
|
||||
dependencies:
|
||||
cyclist "^1.0.1"
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^2.1.5"
|
||||
|
||||
parse-asn1@^5.0.0, parse-asn1@^5.1.5:
|
||||
version "5.1.6"
|
||||
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
|
||||
integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
|
||||
dependencies:
|
||||
asn1.js "^5.2.0"
|
||||
browserify-aes "^1.0.0"
|
||||
evp_bytestokey "^1.0.0"
|
||||
pbkdf2 "^3.0.3"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
parse-json@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
|
||||
integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
|
||||
dependencies:
|
||||
error-ex "^1.2.0"
|
||||
|
||||
parse-json@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
|
||||
integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
|
||||
dependencies:
|
||||
error-ex "^1.3.1"
|
||||
json-parse-better-errors "^1.0.1"
|
||||
|
||||
parseurl@~1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
||||
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
|
||||
|
||||
pascalcase@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
|
||||
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
|
||||
|
||||
path-browserify@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
|
||||
integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
|
||||
|
||||
path-dirname@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
|
||||
integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
|
||||
|
||||
path-exists@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
|
||||
integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
|
||||
dependencies:
|
||||
pinkie-promise "^2.0.0"
|
||||
|
||||
path-exists@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
||||
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
|
||||
|
||||
path-exists@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
||||
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
||||
|
||||
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
||||
|
||||
path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
|
||||
integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
|
||||
|
||||
path-key@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
|
||||
|
||||
path-parse@^1.0.6, path-parse@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
path-to-regexp@0.1.7:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
|
||||
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
|
||||
|
||||
path-type@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
|
||||
integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
pify "^2.0.0"
|
||||
pinkie-promise "^2.0.0"
|
||||
|
||||
path-type@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
|
||||
integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
|
||||
dependencies:
|
||||
pify "^2.0.0"
|
||||
|
||||
pbkdf2@^3.0.3:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
|
||||
integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
|
||||
dependencies:
|
||||
create-hash "^1.1.2"
|
||||
create-hmac "^1.1.4"
|
||||
ripemd160 "^2.0.1"
|
||||
safe-buffer "^5.0.1"
|
||||
sha.js "^2.4.8"
|
||||
|
||||
performance-now@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||
|
||||
picocolors@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
|
||||
integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.2.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
pify@^2.0.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
|
||||
|
||||
pify@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
||||
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
|
||||
|
||||
pify@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
|
||||
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
|
||||
|
||||
pinkie-promise@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
|
||||
integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
|
||||
dependencies:
|
||||
pinkie "^2.0.0"
|
||||
|
||||
pinkie@^2.0.0:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
||||
|
||||
pkg-dir@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
|
||||
integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
|
||||
dependencies:
|
||||
find-up "^1.0.0"
|
||||
|
||||
pkg-dir@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
|
||||
integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
|
||||
dependencies:
|
||||
find-up "^2.1.0"
|
||||
|
||||
pluralize@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
|
||||
integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=
|
||||
|
||||
pluralize@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
|
||||
integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
|
||||
|
||||
posix-character-classes@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
||||
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
|
||||
|
||||
postcss-calc@^5.2.0:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
|
||||
integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14=
|
||||
dependencies:
|
||||
postcss "^5.0.2"
|
||||
postcss-message-helpers "^2.0.0"
|
||||
reduce-css-calc "^1.2.6"
|
||||
|
||||
postcss-colormin@^2.1.8:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
|
||||
integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=
|
||||
dependencies:
|
||||
colormin "^1.0.5"
|
||||
postcss "^5.0.13"
|
||||
postcss-value-parser "^3.2.3"
|
||||
|
||||
postcss-convert-values@^2.3.4:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
|
||||
integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=
|
||||
dependencies:
|
||||
postcss "^5.0.11"
|
||||
postcss-value-parser "^3.1.2"
|
||||
|
||||
postcss-custom-properties@^8.0.10:
|
||||
version "8.0.11"
|
||||
resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97"
|
||||
integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==
|
||||
dependencies:
|
||||
postcss "^7.0.17"
|
||||
postcss-values-parser "^2.0.1"
|
||||
|
||||
postcss-discard-comments@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
|
||||
integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=
|
||||
dependencies:
|
||||
postcss "^5.0.14"
|
||||
|
||||
postcss-discard-duplicates@^2.0.1:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
|
||||
integrity sha1-uavye4isGIFYpesSq8riAmO5GTI=
|
||||
dependencies:
|
||||
postcss "^5.0.4"
|
||||
|
||||
postcss-discard-empty@^2.0.1:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
|
||||
integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=
|
||||
dependencies:
|
||||
postcss "^5.0.14"
|
||||
|
||||
postcss-discard-overridden@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
|
||||
integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=
|
||||
dependencies:
|
||||
postcss "^5.0.16"
|
||||
|
||||
postcss-discard-unused@^2.2.1:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
|
||||
integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=
|
||||
dependencies:
|
||||
postcss "^5.0.14"
|
||||
uniqs "^2.0.0"
|
||||
|
||||
postcss-filter-plugins@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec"
|
||||
integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==
|
||||
dependencies:
|
||||
postcss "^5.0.4"
|
||||
|
||||
postcss-load-config@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
|
||||
integrity sha1-U56a/J3chiASHr+djDZz4M5Q0oo=
|
||||
dependencies:
|
||||
cosmiconfig "^2.1.0"
|
||||
object-assign "^4.1.0"
|
||||
postcss-load-options "^1.2.0"
|
||||
postcss-load-plugins "^2.3.0"
|
||||
|
||||
postcss-load-config@^2.0.0:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a"
|
||||
integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==
|
||||
dependencies:
|
||||
cosmiconfig "^5.0.0"
|
||||
import-cwd "^2.0.0"
|
||||
|
||||
postcss-load-options@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
|
||||
integrity sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=
|
||||
dependencies:
|
||||
cosmiconfig "^2.1.0"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
postcss-load-plugins@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92"
|
||||
integrity sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=
|
||||
dependencies:
|
||||
cosmiconfig "^2.1.1"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
postcss-loader@^2.0.5:
|
||||
version "2.1.6"
|
||||
resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.6.tgz#1d7dd7b17c6ba234b9bed5af13e0bea40a42d740"
|
||||
integrity sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==
|
||||
dependencies:
|
||||
loader-utils "^1.1.0"
|
||||
postcss "^6.0.0"
|
||||
postcss-load-config "^2.0.0"
|
||||
schema-utils "^0.4.0"
|
||||
|
||||
postcss-merge-idents@^2.1.5:
|
||||
version "2.1.7"
|
||||
resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
|
||||
integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=
|
||||
dependencies:
|
||||
has "^1.0.1"
|
||||
postcss "^5.0.10"
|
||||
postcss-value-parser "^3.1.1"
|
||||
|
||||
postcss-merge-longhand@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
|
||||
integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=
|
||||
dependencies:
|
||||
postcss "^5.0.4"
|
||||
|
||||
postcss-merge-rules@^2.0.3:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
|
||||
integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE=
|
||||
dependencies:
|
||||
browserslist "^1.5.2"
|
||||
caniuse-api "^1.5.2"
|
||||
postcss "^5.0.4"
|
||||
postcss-selector-parser "^2.2.2"
|
||||
vendors "^1.0.0"
|
||||
|
||||
postcss-message-helpers@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
|
||||
integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=
|
||||
|
||||
postcss-minify-font-values@^1.0.2:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
|
||||
integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k=
|
||||
dependencies:
|
||||
object-assign "^4.0.1"
|
||||
postcss "^5.0.4"
|
||||
postcss-value-parser "^3.0.2"
|
||||
|
||||
postcss-minify-gradients@^1.0.1:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
|
||||
integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=
|
||||
dependencies:
|
||||
postcss "^5.0.12"
|
||||
postcss-value-parser "^3.3.0"
|
||||
|
||||
postcss-minify-params@^1.0.4:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
|
||||
integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=
|
||||
dependencies:
|
||||
alphanum-sort "^1.0.1"
|
||||
postcss "^5.0.2"
|
||||
postcss-value-parser "^3.0.2"
|
||||
uniqs "^2.0.0"
|
||||
|
||||
postcss-minify-selectors@^2.0.4:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
|
||||
integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8=
|
||||
dependencies:
|
||||
alphanum-sort "^1.0.2"
|
||||
has "^1.0.1"
|
||||
postcss "^5.0.14"
|
||||
postcss-selector-parser "^2.0.0"
|
||||
|
||||
postcss-modules-extract-imports@^1.2.0:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a"
|
||||
integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==
|
||||
dependencies:
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-modules-local-by-default@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
|
||||
integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
|
||||
dependencies:
|
||||
css-selector-tokenizer "^0.7.0"
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-modules-scope@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
|
||||
integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A=
|
||||
dependencies:
|
||||
css-selector-tokenizer "^0.7.0"
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-modules-values@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
|
||||
integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=
|
||||
dependencies:
|
||||
icss-replace-symbols "^1.1.0"
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-normalize-charset@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
|
||||
integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E=
|
||||
dependencies:
|
||||
postcss "^5.0.5"
|
||||
|
||||
postcss-normalize-url@^3.0.7:
|
||||
version "3.0.8"
|
||||
resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
|
||||
integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI=
|
||||
dependencies:
|
||||
is-absolute-url "^2.0.0"
|
||||
normalize-url "^1.4.0"
|
||||
postcss "^5.0.14"
|
||||
postcss-value-parser "^3.2.3"
|
||||
|
||||
postcss-ordered-values@^2.1.0:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
|
||||
integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=
|
||||
dependencies:
|
||||
postcss "^5.0.4"
|
||||
postcss-value-parser "^3.0.1"
|
||||
|
||||
postcss-reduce-idents@^2.2.2:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
|
||||
integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=
|
||||
dependencies:
|
||||
postcss "^5.0.4"
|
||||
postcss-value-parser "^3.0.2"
|
||||
|
||||
postcss-reduce-initial@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
|
||||
integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=
|
||||
dependencies:
|
||||
postcss "^5.0.4"
|
||||
|
||||
postcss-reduce-transforms@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
|
||||
integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=
|
||||
dependencies:
|
||||
has "^1.0.1"
|
||||
postcss "^5.0.8"
|
||||
postcss-value-parser "^3.0.1"
|
||||
|
||||
postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
|
||||
integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=
|
||||
dependencies:
|
||||
flatten "^1.0.2"
|
||||
indexes-of "^1.0.1"
|
||||
uniq "^1.0.1"
|
||||
|
||||
postcss-svgo@^2.1.1:
|
||||
version "2.1.6"
|
||||
resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
|
||||
integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=
|
||||
dependencies:
|
||||
is-svg "^2.0.0"
|
||||
postcss "^5.0.14"
|
||||
postcss-value-parser "^3.2.3"
|
||||
svgo "^0.7.0"
|
||||
|
||||
postcss-unique-selectors@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
|
||||
integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=
|
||||
dependencies:
|
||||
alphanum-sort "^1.0.1"
|
||||
postcss "^5.0.4"
|
||||
uniqs "^2.0.0"
|
||||
|
||||
postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
|
||||
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
|
||||
|
||||
postcss-values-parser@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f"
|
||||
integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==
|
||||
dependencies:
|
||||
flatten "^1.0.2"
|
||||
indexes-of "^1.0.1"
|
||||
uniq "^1.0.1"
|
||||
|
||||
postcss-zindex@^2.0.1:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
|
||||
integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=
|
||||
dependencies:
|
||||
has "^1.0.1"
|
||||
postcss "^5.0.4"
|
||||
uniqs "^2.0.0"
|
||||
|
||||
postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16:
|
||||
version "5.2.18"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
|
||||
integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
|
||||
dependencies:
|
||||
chalk "^1.1.3"
|
||||
js-base64 "^2.1.9"
|
||||
source-map "^0.5.6"
|
||||
supports-color "^3.2.3"
|
||||
|
||||
postcss@^6.0.0, postcss@^6.0.1:
|
||||
version "6.0.23"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
|
||||
integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
|
||||
dependencies:
|
||||
chalk "^2.4.1"
|
||||
source-map "^0.6.1"
|
||||
supports-color "^5.4.0"
|
||||
|
||||
postcss@^7.0.17:
|
||||
version "7.0.39"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
|
||||
integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
|
||||
dependencies:
|
||||
picocolors "^0.2.1"
|
||||
source-map "^0.6.1"
|
||||
|
||||
prelude-ls@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
|
||||
|
||||
prepend-http@^1.0.0, prepend-http@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
|
||||
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
|
||||
|
||||
private@^0.1.6, private@^0.1.8:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
||||
integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
|
||||
|
||||
process@^0.11.10:
|
||||
version "0.11.10"
|
||||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
|
||||
|
||||
progress@^1.1.8:
|
||||
version "1.1.8"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
|
||||
integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=
|
||||
|
||||
progress@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
|
||||
|
||||
promise-inflight@^1.0.1, promise-inflight@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
|
||||
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
|
||||
|
||||
promise-retry@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d"
|
||||
integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=
|
||||
dependencies:
|
||||
err-code "^1.0.0"
|
||||
retry "^0.10.0"
|
||||
|
||||
promzard@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee"
|
||||
integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=
|
||||
dependencies:
|
||||
read "1"
|
||||
|
||||
prop-types@^15.8.1:
|
||||
version "15.8.1"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
||||
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
|
||||
dependencies:
|
||||
loose-envify "^1.4.0"
|
||||
object-assign "^4.1.1"
|
||||
react-is "^16.13.1"
|
||||
|
||||
proto-list@~1.2.1:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
|
||||
integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
|
||||
|
||||
protoduck@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f"
|
||||
integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==
|
||||
dependencies:
|
||||
genfun "^5.0.0"
|
||||
|
||||
proxy-addr@~2.0.7:
|
||||
version "2.0.7"
|
||||
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
|
||||
integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
|
||||
dependencies:
|
||||
forwarded "0.2.0"
|
||||
ipaddr.js "1.9.1"
|
||||
|
||||
prr@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
|
||||
integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
|
||||
|
||||
pseudomap@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
||||
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
|
||||
|
||||
psl@^1.1.28:
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
||||
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
|
||||
|
||||
public-encrypt@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
|
||||
integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
|
||||
dependencies:
|
||||
bn.js "^4.1.0"
|
||||
browserify-rsa "^4.0.0"
|
||||
create-hash "^1.1.0"
|
||||
parse-asn1 "^5.0.0"
|
||||
randombytes "^2.0.1"
|
||||
safe-buffer "^5.1.2"
|
||||
|
||||
pump@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
|
||||
integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
|
||||
dependencies:
|
||||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
pump@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
|
||||
dependencies:
|
||||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
pumpify@^1.3.3:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
|
||||
integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
|
||||
dependencies:
|
||||
duplexify "^3.6.0"
|
||||
inherits "^2.0.3"
|
||||
pump "^2.0.0"
|
||||
|
||||
punycode@1.3.2:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
|
||||
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
|
||||
|
||||
punycode@^1.2.4:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
||||
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
|
||||
|
||||
punycode@^2.1.0, punycode@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||
|
||||
q@^1.1.2:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
|
||||
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
|
||||
|
||||
qrcode-terminal@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819"
|
||||
integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==
|
||||
|
||||
qs@6.9.7:
|
||||
version "6.9.7"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe"
|
||||
integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==
|
||||
|
||||
qs@~6.5.2:
|
||||
version "6.5.3"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
|
||||
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
|
||||
|
||||
query-string@^4.1.0:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
|
||||
integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
|
||||
dependencies:
|
||||
object-assign "^4.1.0"
|
||||
strict-uri-encode "^1.0.0"
|
||||
|
||||
query-string@^6.8.2:
|
||||
version "6.14.1"
|
||||
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a"
|
||||
integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==
|
||||
dependencies:
|
||||
decode-uri-component "^0.2.0"
|
||||
filter-obj "^1.1.0"
|
||||
split-on-first "^1.0.0"
|
||||
strict-uri-encode "^2.0.0"
|
||||
|
||||
querystring-es3@^0.2.0:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
|
||||
integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
|
||||
|
||||
querystring@0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
|
||||
integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
|
||||
|
||||
qw@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.2.tgz#0c31a6f810320a91c58b05198679427103b03c4a"
|
||||
integrity sha512-1PhZ/iLKwlVNq45dnerTMKFjMof49uqli7/0QsvPNbX5OJ3IZ8msa9lUpvPheVdP+IYYPrf6cOaVil7S35joVA==
|
||||
|
||||
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
||||
integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
|
||||
dependencies:
|
||||
safe-buffer "^5.1.0"
|
||||
|
||||
randomfill@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
|
||||
integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
|
||||
dependencies:
|
||||
randombytes "^2.0.5"
|
||||
safe-buffer "^5.1.0"
|
||||
|
||||
range-parser@~1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
|
||||
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
|
||||
|
||||
raw-body@2.4.3:
|
||||
version "2.4.3"
|
||||
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c"
|
||||
integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==
|
||||
dependencies:
|
||||
bytes "3.1.2"
|
||||
http-errors "1.8.1"
|
||||
iconv-lite "0.4.24"
|
||||
unpipe "1.0.0"
|
||||
|
||||
raw-loader@~0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
|
||||
integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
|
||||
|
||||
rc@^1.0.1, rc@^1.1.6:
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
|
||||
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
|
||||
dependencies:
|
||||
deep-extend "^0.6.0"
|
||||
ini "~1.3.0"
|
||||
minimist "^1.2.0"
|
||||
strip-json-comments "~2.0.1"
|
||||
|
||||
react-is@^16.13.1:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
||||
read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16"
|
||||
integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
|
||||
read-installed@~4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067"
|
||||
integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=
|
||||
dependencies:
|
||||
debuglog "^1.0.1"
|
||||
read-package-json "^2.0.0"
|
||||
readdir-scoped-modules "^1.0.0"
|
||||
semver "2 || 3 || 4 || 5"
|
||||
slide "~1.1.3"
|
||||
util-extend "^1.0.1"
|
||||
optionalDependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
|
||||
"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a"
|
||||
integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==
|
||||
dependencies:
|
||||
glob "^7.1.1"
|
||||
json-parse-even-better-errors "^2.3.0"
|
||||
normalize-package-data "^2.0.0"
|
||||
npm-normalize-package-bin "^1.0.0"
|
||||
|
||||
read-package-tree@^5.3.1:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636"
|
||||
integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==
|
||||
dependencies:
|
||||
read-package-json "^2.0.0"
|
||||
readdir-scoped-modules "^1.0.0"
|
||||
util-promisify "^2.1.0"
|
||||
|
||||
read-pkg-up@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
|
||||
integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
|
||||
dependencies:
|
||||
find-up "^1.0.0"
|
||||
read-pkg "^1.0.0"
|
||||
|
||||
read-pkg-up@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
|
||||
integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
|
||||
dependencies:
|
||||
find-up "^2.0.0"
|
||||
read-pkg "^2.0.0"
|
||||
|
||||
read-pkg@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
|
||||
integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
|
||||
dependencies:
|
||||
load-json-file "^1.0.0"
|
||||
normalize-package-data "^2.3.2"
|
||||
path-type "^1.0.0"
|
||||
|
||||
read-pkg@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
|
||||
integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
|
||||
dependencies:
|
||||
load-json-file "^2.0.0"
|
||||
normalize-package-data "^2.3.2"
|
||||
path-type "^2.0.0"
|
||||
|
||||
read@1, read@~1.0.1, read@~1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
|
||||
integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
|
||||
dependencies:
|
||||
mute-stream "~0.0.4"
|
||||
|
||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
||||
version "2.3.7"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.3"
|
||||
isarray "~1.0.0"
|
||||
process-nextick-args "~2.0.0"
|
||||
safe-buffer "~5.1.1"
|
||||
string_decoder "~1.1.1"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@^3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
string_decoder "^1.1.1"
|
||||
util-deprecate "^1.0.1"
|
||||
|
||||
readable-stream@~1.1.10:
|
||||
version "1.1.14"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
|
||||
integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.1"
|
||||
isarray "0.0.1"
|
||||
string_decoder "~0.10.x"
|
||||
|
||||
readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309"
|
||||
integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==
|
||||
dependencies:
|
||||
debuglog "^1.0.1"
|
||||
dezalgo "^1.0.0"
|
||||
graceful-fs "^4.1.2"
|
||||
once "^1.3.0"
|
||||
|
||||
readdirp@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
|
||||
integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
|
||||
dependencies:
|
||||
graceful-fs "^4.1.11"
|
||||
micromatch "^3.1.10"
|
||||
readable-stream "^2.0.2"
|
||||
|
||||
readdirp@~3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
|
||||
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
|
||||
dependencies:
|
||||
picomatch "^2.2.1"
|
||||
|
||||
readline2@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
|
||||
integrity sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=
|
||||
dependencies:
|
||||
code-point-at "^1.0.0"
|
||||
is-fullwidth-code-point "^1.0.0"
|
||||
mute-stream "0.0.5"
|
||||
|
||||
redent@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
|
||||
integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
|
||||
dependencies:
|
||||
indent-string "^2.1.0"
|
||||
strip-indent "^1.0.1"
|
||||
|
||||
reduce-css-calc@^1.2.6:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
|
||||
integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=
|
||||
dependencies:
|
||||
balanced-match "^0.4.2"
|
||||
math-expression-evaluator "^1.2.14"
|
||||
reduce-function-call "^1.0.1"
|
||||
|
||||
reduce-function-call@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f"
|
||||
integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==
|
||||
dependencies:
|
||||
balanced-match "^1.0.0"
|
||||
|
||||
regenerate@^1.2.1:
|
||||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
|
||||
integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
|
||||
|
||||
regenerator-runtime@^0.11.0:
|
||||
version "0.11.1"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
|
||||
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
|
||||
|
||||
regenerator-transform@^0.10.0:
|
||||
version "0.10.1"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
|
||||
integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==
|
||||
dependencies:
|
||||
babel-runtime "^6.18.0"
|
||||
babel-types "^6.19.0"
|
||||
private "^0.1.6"
|
||||
|
||||
regex-not@^1.0.0, regex-not@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
|
||||
integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
|
||||
dependencies:
|
||||
extend-shallow "^3.0.2"
|
||||
safe-regex "^1.1.0"
|
||||
|
||||
regex-parser@^2.2.9:
|
||||
version "2.2.11"
|
||||
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58"
|
||||
integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==
|
||||
|
||||
regexp.prototype.flags@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307"
|
||||
integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
|
||||
regexpp@^1.0.1:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
|
||||
integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==
|
||||
|
||||
regexpu-core@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
|
||||
integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=
|
||||
dependencies:
|
||||
regenerate "^1.2.1"
|
||||
regjsgen "^0.2.0"
|
||||
regjsparser "^0.1.4"
|
||||
|
||||
registry-auth-token@^3.0.1:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e"
|
||||
integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==
|
||||
dependencies:
|
||||
rc "^1.1.6"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
registry-url@^3.0.3:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
|
||||
integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
|
||||
dependencies:
|
||||
rc "^1.0.1"
|
||||
|
||||
regjsgen@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
|
||||
integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
|
||||
|
||||
regjsparser@^0.1.4:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
|
||||
integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
|
||||
dependencies:
|
||||
jsesc "~0.5.0"
|
||||
|
||||
remove-trailing-separator@^1.0.1:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
|
||||
integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
|
||||
|
||||
repeat-element@^1.1.2:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
|
||||
integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
|
||||
|
||||
repeat-string@^1.5.2, repeat-string@^1.6.1:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
||||
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
|
||||
|
||||
repeating@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
|
||||
integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
|
||||
dependencies:
|
||||
is-finite "^1.0.0"
|
||||
|
||||
request@^2.87.0, request@^2.88.0:
|
||||
version "2.88.2"
|
||||
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
|
||||
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
|
||||
dependencies:
|
||||
aws-sign2 "~0.7.0"
|
||||
aws4 "^1.8.0"
|
||||
caseless "~0.12.0"
|
||||
combined-stream "~1.0.6"
|
||||
extend "~3.0.2"
|
||||
forever-agent "~0.6.1"
|
||||
form-data "~2.3.2"
|
||||
har-validator "~5.1.3"
|
||||
http-signature "~1.2.0"
|
||||
is-typedarray "~1.0.0"
|
||||
isstream "~0.1.2"
|
||||
json-stringify-safe "~5.0.1"
|
||||
mime-types "~2.1.19"
|
||||
oauth-sign "~0.9.0"
|
||||
performance-now "^2.1.0"
|
||||
qs "~6.5.2"
|
||||
safe-buffer "^5.1.2"
|
||||
tough-cookie "~2.5.0"
|
||||
tunnel-agent "^0.6.0"
|
||||
uuid "^3.3.2"
|
||||
|
||||
require-directory@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
|
||||
|
||||
require-from-string@^1.1.0:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
|
||||
integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=
|
||||
|
||||
require-main-filename@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
||||
integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
|
||||
|
||||
require-main-filename@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
|
||||
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
|
||||
|
||||
require-uncached@^1.0.2, require-uncached@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
|
||||
integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
|
||||
dependencies:
|
||||
caller-path "^0.1.0"
|
||||
resolve-from "^1.0.0"
|
||||
|
||||
requirejs@^2.3.6:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9"
|
||||
integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==
|
||||
|
||||
resolve-from@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
|
||||
integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
|
||||
|
||||
resolve-from@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
|
||||
integrity sha1-six699nWiBvItuZTM17rywoYh0g=
|
||||
|
||||
resolve-from@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
|
||||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
|
||||
|
||||
resolve-url-loader@^2.0.2:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-2.3.2.tgz#83bb9ebc392b66c563795eef22f078970357a26e"
|
||||
integrity sha512-sc/UVgiADdoTc+4cGPB7cUCnlEkzlxD1NXHw4oa9qA0fp30H8mAQ2ePJBP9MQ029DUuhEPouhNdvzT37pBCV0g==
|
||||
dependencies:
|
||||
adjust-sourcemap-loader "^1.1.0"
|
||||
camelcase "^4.1.0"
|
||||
convert-source-map "^1.5.1"
|
||||
loader-utils "^1.1.0"
|
||||
lodash.defaults "^4.0.0"
|
||||
rework "^1.0.1"
|
||||
rework-visit "^1.0.0"
|
||||
source-map "^0.5.7"
|
||||
urix "^0.1.0"
|
||||
|
||||
resolve-url@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
|
||||
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
|
||||
|
||||
resolve@^1.10.0, resolve@^1.20.0:
|
||||
version "1.22.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
|
||||
integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
|
||||
dependencies:
|
||||
is-core-module "^2.8.1"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
resolve@^2.0.0-next.3:
|
||||
version "2.0.0-next.3"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
|
||||
integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
|
||||
dependencies:
|
||||
is-core-module "^2.2.0"
|
||||
path-parse "^1.0.6"
|
||||
|
||||
restore-cursor@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
|
||||
integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=
|
||||
dependencies:
|
||||
exit-hook "^1.0.0"
|
||||
onetime "^1.0.0"
|
||||
|
||||
restore-cursor@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
||||
integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
|
||||
dependencies:
|
||||
onetime "^2.0.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
ret@~0.1.10:
|
||||
version "0.1.15"
|
||||
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
|
||||
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
|
||||
|
||||
retry@^0.10.0:
|
||||
version "0.10.1"
|
||||
resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
|
||||
integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
|
||||
|
||||
retry@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
|
||||
integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
|
||||
|
||||
rework-visit@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a"
|
||||
integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo=
|
||||
|
||||
rework@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7"
|
||||
integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=
|
||||
dependencies:
|
||||
convert-source-map "^0.3.3"
|
||||
css "^2.0.0"
|
||||
|
||||
right-align@^0.1.1:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
|
||||
integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
|
||||
dependencies:
|
||||
align-text "^0.1.1"
|
||||
|
||||
rimraf@2, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1:
|
||||
version "2.7.1"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
|
||||
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
rimraf@~2.6.2:
|
||||
version "2.6.3"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
|
||||
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
ripemd160@^2.0.0, ripemd160@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
|
||||
integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
|
||||
dependencies:
|
||||
hash-base "^3.0.0"
|
||||
inherits "^2.0.1"
|
||||
|
||||
run-async@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
|
||||
integrity sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=
|
||||
dependencies:
|
||||
once "^1.3.0"
|
||||
|
||||
run-async@^2.2.0:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
|
||||
integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
|
||||
|
||||
run-queue@^1.0.0, run-queue@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
|
||||
integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
|
||||
dependencies:
|
||||
aproba "^1.1.1"
|
||||
|
||||
rx-lite-aggregates@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
|
||||
integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
|
||||
dependencies:
|
||||
rx-lite "*"
|
||||
|
||||
rx-lite@*, rx-lite@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
|
||||
integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
|
||||
|
||||
rx-lite@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
|
||||
integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=
|
||||
|
||||
safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||
|
||||
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
|
||||
safe-regex@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
|
||||
integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
|
||||
dependencies:
|
||||
ret "~0.1.10"
|
||||
|
||||
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
|
||||
sass-graph@2.2.5:
|
||||
version "2.2.5"
|
||||
resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8"
|
||||
integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==
|
||||
dependencies:
|
||||
glob "^7.0.0"
|
||||
lodash "^4.0.0"
|
||||
scss-tokenizer "^0.2.3"
|
||||
yargs "^13.3.2"
|
||||
|
||||
sass-lint@^1.11.1:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.13.1.tgz#5fd2b2792e9215272335eb0f0dc607f61e8acc8f"
|
||||
integrity sha512-DSyah8/MyjzW2BWYmQWekYEKir44BpLqrCFsgs9iaWiVTcwZfwXHF586hh3D1n+/9ihUNMfd8iHAyb9KkGgs7Q==
|
||||
dependencies:
|
||||
commander "^2.8.1"
|
||||
eslint "^2.7.0"
|
||||
front-matter "2.1.2"
|
||||
fs-extra "^3.0.1"
|
||||
glob "^7.0.0"
|
||||
globule "^1.0.0"
|
||||
gonzales-pe-sl "^4.2.3"
|
||||
js-yaml "^3.5.4"
|
||||
known-css-properties "^0.3.0"
|
||||
lodash.capitalize "^4.1.0"
|
||||
lodash.kebabcase "^4.0.0"
|
||||
merge "^1.2.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
util "^0.10.3"
|
||||
|
||||
sass-loader@^6.0.5:
|
||||
version "6.0.7"
|
||||
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00"
|
||||
integrity sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==
|
||||
dependencies:
|
||||
clone-deep "^2.0.1"
|
||||
loader-utils "^1.0.1"
|
||||
lodash.tail "^4.1.1"
|
||||
neo-async "^2.5.0"
|
||||
pify "^3.0.0"
|
||||
|
||||
sax@~1.2.1:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||
|
||||
schema-utils@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
|
||||
integrity sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=
|
||||
dependencies:
|
||||
ajv "^5.0.0"
|
||||
|
||||
schema-utils@^0.4.0:
|
||||
version "0.4.7"
|
||||
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
|
||||
integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
|
||||
dependencies:
|
||||
ajv "^6.1.0"
|
||||
ajv-keywords "^3.1.0"
|
||||
|
||||
script-loader@^0.7.0:
|
||||
version "0.7.2"
|
||||
resolved "https://registry.yarnpkg.com/script-loader/-/script-loader-0.7.2.tgz#2016db6f86f25f5cf56da38915d83378bb166ba7"
|
||||
integrity sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==
|
||||
dependencies:
|
||||
raw-loader "~0.5.1"
|
||||
|
||||
scss-tokenizer@^0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
|
||||
integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE=
|
||||
dependencies:
|
||||
js-base64 "^2.1.8"
|
||||
source-map "^0.4.2"
|
||||
|
||||
semver-diff@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
|
||||
integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
|
||||
dependencies:
|
||||
semver "^5.0.3"
|
||||
|
||||
"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||
|
||||
semver@^6.3.0:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||
|
||||
semver@~5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
|
||||
integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
|
||||
|
||||
send@0.17.2:
|
||||
version "0.17.2"
|
||||
resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820"
|
||||
integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==
|
||||
dependencies:
|
||||
debug "2.6.9"
|
||||
depd "~1.1.2"
|
||||
destroy "~1.0.4"
|
||||
encodeurl "~1.0.2"
|
||||
escape-html "~1.0.3"
|
||||
etag "~1.8.1"
|
||||
fresh "0.5.2"
|
||||
http-errors "1.8.1"
|
||||
mime "1.6.0"
|
||||
ms "2.1.3"
|
||||
on-finished "~2.3.0"
|
||||
range-parser "~1.2.1"
|
||||
statuses "~1.5.0"
|
||||
|
||||
serve-static@1.14.2:
|
||||
version "1.14.2"
|
||||
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa"
|
||||
integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==
|
||||
dependencies:
|
||||
encodeurl "~1.0.2"
|
||||
escape-html "~1.0.3"
|
||||
parseurl "~1.3.3"
|
||||
send "0.17.2"
|
||||
|
||||
set-blocking@^2.0.0, set-blocking@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
|
||||
|
||||
set-value@^2.0.0, set-value@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
|
||||
integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
|
||||
dependencies:
|
||||
extend-shallow "^2.0.1"
|
||||
is-extendable "^0.1.1"
|
||||
is-plain-object "^2.0.3"
|
||||
split-string "^3.0.1"
|
||||
|
||||
setimmediate@^1.0.4:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
||||
integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
|
||||
|
||||
setprototypeof@1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
||||
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
|
||||
|
||||
sha.js@^2.4.0, sha.js@^2.4.8:
|
||||
version "2.4.11"
|
||||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
|
||||
integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
sha@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/sha/-/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae"
|
||||
integrity sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw==
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
|
||||
shallow-clone@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571"
|
||||
integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==
|
||||
dependencies:
|
||||
is-extendable "^0.1.1"
|
||||
kind-of "^5.0.0"
|
||||
mixin-object "^2.0.1"
|
||||
|
||||
shebang-command@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||
integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
|
||||
dependencies:
|
||||
shebang-regex "^1.0.0"
|
||||
|
||||
shebang-regex@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
|
||||
|
||||
shelljs@^0.6.0:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8"
|
||||
integrity sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=
|
||||
|
||||
side-channel@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
|
||||
integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
get-intrinsic "^1.0.2"
|
||||
object-inspect "^1.9.0"
|
||||
|
||||
signal-exit@^3.0.0, signal-exit@^3.0.2:
|
||||
version "3.0.7"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
||||
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
||||
|
||||
slash@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
|
||||
integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
|
||||
|
||||
slice-ansi@0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
|
||||
integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
|
||||
|
||||
slice-ansi@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
|
||||
integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
|
||||
dependencies:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
|
||||
slide@^1.1.6, slide@~1.1.3, slide@~1.1.6:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
|
||||
integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=
|
||||
|
||||
smart-buffer@^4.1.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
|
||||
integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
|
||||
|
||||
snapdragon-node@^2.0.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
|
||||
integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
|
||||
dependencies:
|
||||
define-property "^1.0.0"
|
||||
isobject "^3.0.0"
|
||||
snapdragon-util "^3.0.1"
|
||||
|
||||
snapdragon-util@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
|
||||
integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
|
||||
dependencies:
|
||||
kind-of "^3.2.0"
|
||||
|
||||
snapdragon@^0.8.1:
|
||||
version "0.8.2"
|
||||
resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
|
||||
integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
|
||||
dependencies:
|
||||
base "^0.11.1"
|
||||
debug "^2.2.0"
|
||||
define-property "^0.2.5"
|
||||
extend-shallow "^2.0.1"
|
||||
map-cache "^0.2.2"
|
||||
source-map "^0.5.6"
|
||||
source-map-resolve "^0.5.0"
|
||||
use "^3.1.0"
|
||||
|
||||
socks-proxy-agent@^4.0.0:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386"
|
||||
integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==
|
||||
dependencies:
|
||||
agent-base "~4.2.1"
|
||||
socks "~2.3.2"
|
||||
|
||||
socks@~2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3"
|
||||
integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==
|
||||
dependencies:
|
||||
ip "1.1.5"
|
||||
smart-buffer "^4.1.0"
|
||||
|
||||
sort-keys@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
|
||||
integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
|
||||
dependencies:
|
||||
is-plain-obj "^1.0.0"
|
||||
|
||||
sorted-object@~2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc"
|
||||
integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=
|
||||
|
||||
sorted-union-stream@~2.1.3:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7"
|
||||
integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=
|
||||
dependencies:
|
||||
from2 "^1.3.0"
|
||||
stream-iterate "^1.1.0"
|
||||
|
||||
source-list-map@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
|
||||
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
|
||||
|
||||
source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
|
||||
integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
|
||||
dependencies:
|
||||
atob "^2.1.2"
|
||||
decode-uri-component "^0.2.0"
|
||||
resolve-url "^0.2.1"
|
||||
source-map-url "^0.4.0"
|
||||
urix "^0.1.0"
|
||||
|
||||
source-map-support@^0.4.15:
|
||||
version "0.4.18"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
|
||||
integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
|
||||
dependencies:
|
||||
source-map "^0.5.6"
|
||||
|
||||
source-map-url@^0.4.0:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
|
||||
integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
|
||||
|
||||
source-map@0.1.x:
|
||||
version "0.1.43"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
|
||||
integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=
|
||||
dependencies:
|
||||
amdefine ">=0.0.4"
|
||||
|
||||
source-map@^0.4.2:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
|
||||
integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
|
||||
dependencies:
|
||||
amdefine ">=0.0.4"
|
||||
|
||||
source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
|
||||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
|
||||
|
||||
source-map@^0.6.1, source-map@~0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
|
||||
spdx-correct@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
|
||||
integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
|
||||
dependencies:
|
||||
spdx-expression-parse "^3.0.0"
|
||||
spdx-license-ids "^3.0.0"
|
||||
|
||||
spdx-exceptions@^2.1.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
|
||||
integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
|
||||
|
||||
spdx-expression-parse@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
|
||||
integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
|
||||
dependencies:
|
||||
spdx-exceptions "^2.1.0"
|
||||
spdx-license-ids "^3.0.0"
|
||||
|
||||
spdx-license-ids@^3.0.0:
|
||||
version "3.0.11"
|
||||
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95"
|
||||
integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==
|
||||
|
||||
split-on-first@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
|
||||
integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
|
||||
|
||||
split-string@^3.0.1, split-string@^3.0.2:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
|
||||
integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
|
||||
dependencies:
|
||||
extend-shallow "^3.0.0"
|
||||
|
||||
sprintf-js@~1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
||||
|
||||
sshpk@^1.7.0:
|
||||
version "1.17.0"
|
||||
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
|
||||
integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
|
||||
dependencies:
|
||||
asn1 "~0.2.3"
|
||||
assert-plus "^1.0.0"
|
||||
bcrypt-pbkdf "^1.0.0"
|
||||
dashdash "^1.12.0"
|
||||
ecc-jsbn "~0.1.1"
|
||||
getpass "^0.1.1"
|
||||
jsbn "~0.1.0"
|
||||
safer-buffer "^2.0.2"
|
||||
tweetnacl "~0.14.0"
|
||||
|
||||
ssri@^6.0.0, ssri@^6.0.1, ssri@^6.0.2:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
|
||||
integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
|
||||
dependencies:
|
||||
figgy-pudding "^3.5.1"
|
||||
|
||||
static-extend@^0.1.1:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
|
||||
integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
|
||||
dependencies:
|
||||
define-property "^0.2.5"
|
||||
object-copy "^0.1.0"
|
||||
|
||||
"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
||||
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
||||
|
||||
stdout-stream@^1.4.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de"
|
||||
integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==
|
||||
dependencies:
|
||||
readable-stream "^2.0.1"
|
||||
|
||||
stream-browserify@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
|
||||
integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
|
||||
dependencies:
|
||||
inherits "~2.0.1"
|
||||
readable-stream "^2.0.2"
|
||||
|
||||
stream-each@^1.1.0:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
|
||||
integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
|
||||
dependencies:
|
||||
end-of-stream "^1.1.0"
|
||||
stream-shift "^1.0.0"
|
||||
|
||||
stream-http@^2.7.2:
|
||||
version "2.8.3"
|
||||
resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
|
||||
integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
|
||||
dependencies:
|
||||
builtin-status-codes "^3.0.0"
|
||||
inherits "^2.0.1"
|
||||
readable-stream "^2.3.6"
|
||||
to-arraybuffer "^1.0.0"
|
||||
xtend "^4.0.0"
|
||||
|
||||
stream-iterate@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1"
|
||||
integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=
|
||||
dependencies:
|
||||
readable-stream "^2.1.5"
|
||||
stream-shift "^1.0.0"
|
||||
|
||||
stream-shift@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
|
||||
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
|
||||
|
||||
strict-uri-encode@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
|
||||
integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
|
||||
|
||||
strict-uri-encode@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
|
||||
integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
|
||||
|
||||
string-width@^1.0.1, string-width@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||
integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
|
||||
dependencies:
|
||||
code-point-at "^1.0.0"
|
||||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
|
||||
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
|
||||
dependencies:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string-width@^3.0.0, string-width@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
|
||||
integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
|
||||
dependencies:
|
||||
emoji-regex "^7.0.1"
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^5.1.0"
|
||||
|
||||
string.prototype.matchall@^4.0.6:
|
||||
version "4.0.7"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
|
||||
integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.1"
|
||||
get-intrinsic "^1.1.1"
|
||||
has-symbols "^1.0.3"
|
||||
internal-slot "^1.0.3"
|
||||
regexp.prototype.flags "^1.4.1"
|
||||
side-channel "^1.0.4"
|
||||
|
||||
string.prototype.trimend@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
|
||||
integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
|
||||
string.prototype.trimstart@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
|
||||
integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
|
||||
string_decoder@^1.0.0, string_decoder@^1.1.1:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
|
||||
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
|
||||
dependencies:
|
||||
safe-buffer "~5.2.0"
|
||||
|
||||
string_decoder@~0.10.x:
|
||||
version "0.10.31"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
||||
integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
|
||||
|
||||
string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
stringify-package@^1.0.0, stringify-package@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85"
|
||||
integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==
|
||||
|
||||
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||
integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
|
||||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
|
||||
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
|
||||
integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
|
||||
dependencies:
|
||||
ansi-regex "^4.1.0"
|
||||
|
||||
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-bom@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
|
||||
integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
|
||||
dependencies:
|
||||
is-utf8 "^0.2.0"
|
||||
|
||||
strip-bom@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
|
||||
|
||||
strip-eof@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
|
||||
|
||||
strip-indent@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
|
||||
integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
|
||||
dependencies:
|
||||
get-stdin "^4.0.1"
|
||||
|
||||
strip-json-comments@~1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
|
||||
integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
|
||||
|
||||
strip-json-comments@~2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
|
||||
|
||||
supports-color@^3.1.0, supports-color@^3.2.3:
|
||||
version "3.2.3"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
|
||||
integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
|
||||
dependencies:
|
||||
has-flag "^1.0.0"
|
||||
|
||||
supports-color@^5.3.0, supports-color@^5.4.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
supports-preserve-symlinks-flag@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
svgo@^0.7.0:
|
||||
version "0.7.2"
|
||||
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
|
||||
integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=
|
||||
dependencies:
|
||||
coa "~1.0.1"
|
||||
colors "~1.1.2"
|
||||
csso "~2.3.1"
|
||||
js-yaml "~3.7.0"
|
||||
mkdirp "~0.5.1"
|
||||
sax "~1.2.1"
|
||||
whet.extend "~0.9.9"
|
||||
|
||||
table@4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
|
||||
integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==
|
||||
dependencies:
|
||||
ajv "^5.2.3"
|
||||
ajv-keywords "^2.1.0"
|
||||
chalk "^2.1.0"
|
||||
lodash "^4.17.4"
|
||||
slice-ansi "1.0.0"
|
||||
string-width "^2.1.1"
|
||||
|
||||
table@^3.7.8:
|
||||
version "3.8.3"
|
||||
resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
|
||||
integrity sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=
|
||||
dependencies:
|
||||
ajv "^4.7.0"
|
||||
ajv-keywords "^1.0.0"
|
||||
chalk "^1.1.1"
|
||||
lodash "^4.0.0"
|
||||
slice-ansi "0.0.4"
|
||||
string-width "^2.0.0"
|
||||
|
||||
tapable@^0.2.7, tapable@~0.2.5:
|
||||
version "0.2.9"
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8"
|
||||
integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==
|
||||
|
||||
tar@^2.0.0:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
|
||||
integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
|
||||
dependencies:
|
||||
block-stream "*"
|
||||
fstream "^1.0.12"
|
||||
inherits "2"
|
||||
|
||||
tar@^4.4.10, tar@^4.4.12, tar@^4.4.19:
|
||||
version "4.4.19"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3"
|
||||
integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==
|
||||
dependencies:
|
||||
chownr "^1.1.4"
|
||||
fs-minipass "^1.2.7"
|
||||
minipass "^2.9.0"
|
||||
minizlib "^1.3.3"
|
||||
mkdirp "^0.5.5"
|
||||
safe-buffer "^5.2.1"
|
||||
yallist "^3.1.1"
|
||||
|
||||
term-size@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
|
||||
integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
|
||||
dependencies:
|
||||
execa "^0.7.0"
|
||||
|
||||
text-table@~0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
||||
|
||||
through2@^2.0.0:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
|
||||
integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
|
||||
dependencies:
|
||||
readable-stream "~2.3.6"
|
||||
xtend "~4.0.1"
|
||||
|
||||
"through@>=2.2.7 <3", through@^2.3.6:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||
|
||||
timed-out@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
|
||||
integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
|
||||
|
||||
timers-browserify@^2.0.4:
|
||||
version "2.0.12"
|
||||
resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee"
|
||||
integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==
|
||||
dependencies:
|
||||
setimmediate "^1.0.4"
|
||||
|
||||
tiny-relative-date@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07"
|
||||
integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==
|
||||
|
||||
tmp@^0.0.33:
|
||||
version "0.0.33"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
|
||||
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
|
||||
dependencies:
|
||||
os-tmpdir "~1.0.2"
|
||||
|
||||
to-arraybuffer@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
|
||||
integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
|
||||
|
||||
to-fast-properties@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
|
||||
integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
|
||||
|
||||
to-object-path@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
|
||||
integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
|
||||
dependencies:
|
||||
kind-of "^3.0.2"
|
||||
|
||||
to-regex-range@^2.1.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
|
||||
integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
|
||||
dependencies:
|
||||
is-number "^3.0.0"
|
||||
repeat-string "^1.6.1"
|
||||
|
||||
to-regex-range@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
|
||||
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
|
||||
dependencies:
|
||||
is-number "^7.0.0"
|
||||
|
||||
to-regex@^3.0.1, to-regex@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
|
||||
integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
|
||||
dependencies:
|
||||
define-property "^2.0.2"
|
||||
extend-shallow "^3.0.2"
|
||||
regex-not "^1.0.2"
|
||||
safe-regex "^1.1.0"
|
||||
|
||||
toidentifier@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
||||
|
||||
tough-cookie@~2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
|
||||
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
|
||||
dependencies:
|
||||
psl "^1.1.28"
|
||||
punycode "^2.1.1"
|
||||
|
||||
trim-newlines@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
|
||||
integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
|
||||
|
||||
trim-right@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
|
||||
integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
|
||||
|
||||
"true-case-path@^1.0.2":
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
|
||||
integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==
|
||||
dependencies:
|
||||
glob "^7.1.2"
|
||||
|
||||
tryer@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
|
||||
integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
|
||||
|
||||
tsconfig-paths@^3.12.0:
|
||||
version "3.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
|
||||
integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
|
||||
dependencies:
|
||||
"@types/json5" "^0.0.29"
|
||||
json5 "^1.0.1"
|
||||
minimist "^1.2.6"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
tty-browserify@0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
|
||||
integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
|
||||
|
||||
tunnel-agent@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
|
||||
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
||||
version "0.14.5"
|
||||
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
||||
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
|
||||
|
||||
type-check@~0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
|
||||
integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
|
||||
dependencies:
|
||||
prelude-ls "~1.1.2"
|
||||
|
||||
type-is@~1.6.18:
|
||||
version "1.6.18"
|
||||
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
|
||||
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
|
||||
dependencies:
|
||||
media-typer "0.3.0"
|
||||
mime-types "~2.1.24"
|
||||
|
||||
type@^1.0.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
|
||||
integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
|
||||
|
||||
type@^2.5.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f"
|
||||
integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==
|
||||
|
||||
typedarray@^0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
uc.micro@^1.0.1, uc.micro@^1.0.5:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
|
||||
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
|
||||
|
||||
uglify-js@^2.8.27:
|
||||
version "2.8.29"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
|
||||
integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
|
||||
dependencies:
|
||||
source-map "~0.5.1"
|
||||
yargs "~3.10.0"
|
||||
optionalDependencies:
|
||||
uglify-to-browserify "~1.0.0"
|
||||
|
||||
uglify-to-browserify@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
|
||||
integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
|
||||
|
||||
uid-number@0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
|
||||
integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
|
||||
|
||||
umask@^1.1.0, umask@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
|
||||
integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=
|
||||
|
||||
unbox-primitive@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
|
||||
integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
has-bigints "^1.0.1"
|
||||
has-symbols "^1.0.2"
|
||||
which-boxed-primitive "^1.0.2"
|
||||
|
||||
union-value@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
|
||||
integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
|
||||
dependencies:
|
||||
arr-union "^3.1.0"
|
||||
get-value "^2.0.6"
|
||||
is-extendable "^0.1.1"
|
||||
set-value "^2.0.1"
|
||||
|
||||
uniq@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
|
||||
integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
|
||||
|
||||
uniqs@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
|
||||
integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
|
||||
|
||||
unique-filename@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
|
||||
integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
|
||||
dependencies:
|
||||
unique-slug "^2.0.0"
|
||||
|
||||
unique-slug@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
|
||||
integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
|
||||
dependencies:
|
||||
imurmurhash "^0.1.4"
|
||||
|
||||
unique-string@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
|
||||
integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
|
||||
dependencies:
|
||||
crypto-random-string "^1.0.0"
|
||||
|
||||
universalify@^0.1.0:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
|
||||
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
|
||||
|
||||
unpipe@1.0.0, unpipe@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
|
||||
|
||||
unset-value@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
|
||||
integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
|
||||
dependencies:
|
||||
has-value "^0.3.1"
|
||||
isobject "^3.0.0"
|
||||
|
||||
unzip-response@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
|
||||
integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
|
||||
|
||||
upath@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
|
||||
integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
|
||||
|
||||
update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6"
|
||||
integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==
|
||||
dependencies:
|
||||
boxen "^1.2.1"
|
||||
chalk "^2.0.1"
|
||||
configstore "^3.0.0"
|
||||
import-lazy "^2.1.0"
|
||||
is-ci "^1.0.10"
|
||||
is-installed-globally "^0.1.0"
|
||||
is-npm "^1.0.0"
|
||||
latest-version "^3.0.0"
|
||||
semver-diff "^2.0.0"
|
||||
xdg-basedir "^3.0.0"
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.4.1"
|
||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
|
||||
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
|
||||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
urix@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
|
||||
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
|
||||
|
||||
url-loader@^0.6.2:
|
||||
version "0.6.2"
|
||||
resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7"
|
||||
integrity sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==
|
||||
dependencies:
|
||||
loader-utils "^1.0.2"
|
||||
mime "^1.4.1"
|
||||
schema-utils "^0.3.0"
|
||||
|
||||
url-parse-lax@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
|
||||
integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
|
||||
dependencies:
|
||||
prepend-http "^1.0.1"
|
||||
|
||||
url@^0.11.0:
|
||||
version "0.11.0"
|
||||
resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
|
||||
integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
|
||||
dependencies:
|
||||
punycode "1.3.2"
|
||||
querystring "0.2.0"
|
||||
|
||||
use@^3.1.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
|
||||
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
|
||||
|
||||
user-home@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
|
||||
integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8=
|
||||
dependencies:
|
||||
os-homedir "^1.0.0"
|
||||
|
||||
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||
|
||||
util-extend@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f"
|
||||
integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=
|
||||
|
||||
util-promisify@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53"
|
||||
integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=
|
||||
dependencies:
|
||||
object.getownpropertydescriptors "^2.0.3"
|
||||
|
||||
util@0.10.3:
|
||||
version "0.10.3"
|
||||
resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
|
||||
integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
|
||||
dependencies:
|
||||
inherits "2.0.1"
|
||||
|
||||
util@^0.10.3:
|
||||
version "0.10.4"
|
||||
resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
|
||||
integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==
|
||||
dependencies:
|
||||
inherits "2.0.3"
|
||||
|
||||
util@^0.11.0:
|
||||
version "0.11.1"
|
||||
resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
|
||||
integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
|
||||
dependencies:
|
||||
inherits "2.0.3"
|
||||
|
||||
utils-merge@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
||||
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
|
||||
|
||||
uuid@^3.3.2, uuid@^3.3.3:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
||||
|
||||
validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
|
||||
integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
|
||||
dependencies:
|
||||
spdx-correct "^3.0.0"
|
||||
spdx-expression-parse "^3.0.0"
|
||||
|
||||
validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e"
|
||||
integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34=
|
||||
dependencies:
|
||||
builtins "^1.0.3"
|
||||
|
||||
vary@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
|
||||
|
||||
vendors@^1.0.0:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
|
||||
integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
|
||||
|
||||
verror@1.10.0:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
|
||||
integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
|
||||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
core-util-is "1.0.2"
|
||||
extsprintf "^1.2.0"
|
||||
|
||||
vm-browserify@^1.0.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
||||
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
|
||||
|
||||
watchpack-chokidar2@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
|
||||
integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==
|
||||
dependencies:
|
||||
chokidar "^2.1.8"
|
||||
|
||||
watchpack@^1.3.1:
|
||||
version "1.7.5"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
|
||||
integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
neo-async "^2.5.0"
|
||||
optionalDependencies:
|
||||
chokidar "^3.4.1"
|
||||
watchpack-chokidar2 "^2.0.1"
|
||||
|
||||
wcwidth@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
|
||||
integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
|
||||
dependencies:
|
||||
defaults "^1.0.3"
|
||||
|
||||
webpack-bundle-analyzer@^3.6.0:
|
||||
version "3.9.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c"
|
||||
integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==
|
||||
dependencies:
|
||||
acorn "^7.1.1"
|
||||
acorn-walk "^7.1.1"
|
||||
bfj "^6.1.1"
|
||||
chalk "^2.4.1"
|
||||
commander "^2.18.0"
|
||||
ejs "^2.6.1"
|
||||
express "^4.16.3"
|
||||
filesize "^3.6.1"
|
||||
gzip-size "^5.0.0"
|
||||
lodash "^4.17.19"
|
||||
mkdirp "^0.5.1"
|
||||
opener "^1.5.1"
|
||||
ws "^6.0.0"
|
||||
|
||||
webpack-sources@^1.0.1:
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
|
||||
integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
|
||||
dependencies:
|
||||
source-list-map "^2.0.0"
|
||||
source-map "~0.6.1"
|
||||
|
||||
webpack@^2.6.1:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.7.0.tgz#b2a1226804373ffd3d03ea9c6bd525067034f6b1"
|
||||
integrity sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==
|
||||
dependencies:
|
||||
acorn "^5.0.0"
|
||||
acorn-dynamic-import "^2.0.0"
|
||||
ajv "^4.7.0"
|
||||
ajv-keywords "^1.1.1"
|
||||
async "^2.1.2"
|
||||
enhanced-resolve "^3.3.0"
|
||||
interpret "^1.0.0"
|
||||
json-loader "^0.5.4"
|
||||
json5 "^0.5.1"
|
||||
loader-runner "^2.3.0"
|
||||
loader-utils "^0.2.16"
|
||||
memory-fs "~0.4.1"
|
||||
mkdirp "~0.5.0"
|
||||
node-libs-browser "^2.0.0"
|
||||
source-map "^0.5.3"
|
||||
supports-color "^3.1.0"
|
||||
tapable "~0.2.5"
|
||||
uglify-js "^2.8.27"
|
||||
watchpack "^1.3.1"
|
||||
webpack-sources "^1.0.1"
|
||||
yargs "^6.0.0"
|
||||
|
||||
whet.extend@~0.9.9:
|
||||
version "0.9.9"
|
||||
resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
|
||||
integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=
|
||||
|
||||
which-boxed-primitive@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
|
||||
integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
|
||||
dependencies:
|
||||
is-bigint "^1.0.1"
|
||||
is-boolean-object "^1.1.0"
|
||||
is-number-object "^1.0.4"
|
||||
is-string "^1.0.5"
|
||||
is-symbol "^1.0.3"
|
||||
|
||||
which-module@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
|
||||
integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
|
||||
|
||||
which-module@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
|
||||
|
||||
which@1, which@^1.2.9, which@^1.3.0, which@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wide-align@^1.1.0:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
|
||||
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2 || 3 || 4"
|
||||
|
||||
widest-line@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
|
||||
integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
|
||||
dependencies:
|
||||
string-width "^2.1.1"
|
||||
|
||||
window-size@0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
|
||||
integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
|
||||
|
||||
word-wrap@~1.2.3:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
||||
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
|
||||
|
||||
wordwrap@0.0.2:
|
||||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
|
||||
integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
|
||||
|
||||
worker-farm@^1.6.0, worker-farm@^1.7.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
|
||||
integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
|
||||
dependencies:
|
||||
errno "~0.1.7"
|
||||
|
||||
wrap-ansi@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
||||
integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
|
||||
dependencies:
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
|
||||
wrap-ansi@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
|
||||
integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
|
||||
dependencies:
|
||||
ansi-styles "^3.2.0"
|
||||
string-width "^3.0.0"
|
||||
strip-ansi "^5.0.0"
|
||||
|
||||
wrap-ansi@^6.2.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
|
||||
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3:
|
||||
version "2.4.3"
|
||||
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
|
||||
integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
|
||||
dependencies:
|
||||
graceful-fs "^4.1.11"
|
||||
imurmurhash "^0.1.4"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
write@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
|
||||
integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
|
||||
dependencies:
|
||||
mkdirp "^0.5.1"
|
||||
|
||||
ws@^6.0.0:
|
||||
version "6.2.2"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
|
||||
integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==
|
||||
dependencies:
|
||||
async-limiter "~1.0.0"
|
||||
|
||||
xdg-basedir@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
|
||||
integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
|
||||
|
||||
xtend@^4.0.0, xtend@~4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
||||
|
||||
y18n@^3.2.1:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696"
|
||||
integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==
|
||||
|
||||
y18n@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
|
||||
integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
|
||||
|
||||
yallist@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
||||
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
|
||||
|
||||
yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
||||
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
|
||||
|
||||
yargs-parser@^13.1.2:
|
||||
version "13.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
|
||||
integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^15.0.1:
|
||||
version "15.0.3"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115"
|
||||
integrity sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^18.1.2:
|
||||
version "18.1.3"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
|
||||
integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^4.2.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
|
||||
integrity sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=
|
||||
dependencies:
|
||||
camelcase "^3.0.0"
|
||||
|
||||
yargs-parser@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
|
||||
integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k=
|
||||
dependencies:
|
||||
camelcase "^4.1.0"
|
||||
|
||||
yargs@^13.3.2:
|
||||
version "13.3.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
|
||||
integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
|
||||
dependencies:
|
||||
cliui "^5.0.0"
|
||||
find-up "^3.0.0"
|
||||
get-caller-file "^2.0.1"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^2.0.0"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^3.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^13.1.2"
|
||||
|
||||
yargs@^14.2.3:
|
||||
version "14.2.3"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
|
||||
integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
|
||||
dependencies:
|
||||
cliui "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
find-up "^3.0.0"
|
||||
get-caller-file "^2.0.1"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^2.0.0"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^3.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^15.0.1"
|
||||
|
||||
yargs@^15.4.1:
|
||||
version "15.4.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
|
||||
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
|
||||
dependencies:
|
||||
cliui "^6.0.0"
|
||||
decamelize "^1.2.0"
|
||||
find-up "^4.1.0"
|
||||
get-caller-file "^2.0.1"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^2.0.0"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^4.2.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^18.1.2"
|
||||
|
||||
yargs@^6.0.0:
|
||||
version "6.6.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
|
||||
integrity sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=
|
||||
dependencies:
|
||||
camelcase "^3.0.0"
|
||||
cliui "^3.2.0"
|
||||
decamelize "^1.1.1"
|
||||
get-caller-file "^1.0.1"
|
||||
os-locale "^1.4.0"
|
||||
read-pkg-up "^1.0.1"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^1.0.1"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^1.0.2"
|
||||
which-module "^1.0.0"
|
||||
y18n "^3.2.1"
|
||||
yargs-parser "^4.2.0"
|
||||
|
||||
yargs@^8.0.2:
|
||||
version "8.0.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
|
||||
integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A=
|
||||
dependencies:
|
||||
camelcase "^4.1.0"
|
||||
cliui "^3.2.0"
|
||||
decamelize "^1.1.1"
|
||||
get-caller-file "^1.0.1"
|
||||
os-locale "^2.0.0"
|
||||
read-pkg-up "^2.0.0"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^1.0.1"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^2.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^3.2.1"
|
||||
yargs-parser "^7.0.0"
|
||||
|
||||
yargs@~3.10.0:
|
||||
version "3.10.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
|
||||
integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
|
||||
dependencies:
|
||||
camelcase "^1.0.2"
|
||||
cliui "^2.1.0"
|
||||
decamelize "^1.0.0"
|
||||
window-size "0.1.0"
|