diff --git a/.bowerrc b/.bowerrc deleted file mode 100644 index 959e1696e7b2c9..00000000000000 --- a/.bowerrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "directory": "bower_components", - "analytics": false -} diff --git a/.editorconfig b/.editorconfig index 47c5438403ca87..b38e9e498bde53 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,7 +4,6 @@ root = true - [*] end_of_line = lf charset = utf-8 @@ -13,22 +12,8 @@ insert_final_newline = true indent_style = space indent_size = 2 -[*.js] -indent_style = space -indent_size = 2 - -[*.hbs] +[*.njk] insert_final_newline = false -indent_style = space -indent_size = 2 - -[*.css] -indent_style = space -indent_size = 2 - -[*.html] -indent_style = space -indent_size = 2 [*.{diff,md}] trim_trailing_whitespace = false diff --git a/.ember-cli b/.ember-cli deleted file mode 100644 index ee64cfed2a8905..00000000000000 --- a/.ember-cli +++ /dev/null @@ -1,9 +0,0 @@ -{ - /** - Ember CLI sends analytics information by default. The data is completely - anonymous, but there are times when you might want to disable this behavior. - - Setting `disableAnalytics` to true will prevent any data from being sent. - */ - "disableAnalytics": false -} diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000000000..80ba6a8b7bbe23 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +/bin/ +/dist/ +/tmp/ +/node-modules/ diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000000000..115e60ffd06f55 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,21 @@ +{ + "extends": "eslint:recommended", + "env": { + "es6": true, + "node": true, + "browser": true + }, + "globals": { + "Site": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2018 + }, + "rules": { + "indent": ["error", 2], + "linebreak-style": ["error", "unix"], + "quotes": ["error", "single"], + "semi": ["error", "never"], + "no-console": "off" + } +} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000000000..72229f64231e23 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,32 @@ +name: Lint + +on: [push] + +jobs: + ESLint: + runs-on: ubuntu-latest + steps: + - name: Checkout source code + uses: actions/checkout@v1 + - name: Set up Node 10.x + uses: actions/setup-node@v1 + with: + node-version: 10.x + - name: Set up ESLint + run: npm install --global eslint + - name: Run ESLint checks + run: eslint . + + Prettier: + runs-on: ubuntu-latest + steps: + - name: Checkout source code + uses: actions/checkout@v1 + - name: Setup up Node 10.x + uses: actions/setup-node@v1 + with: + node-version: 10.x + - name: Set up Prettier + run: npm install --global prettier + - name: Run Prettier checks + run: prettier -c "**/*.{md,scss,js,json}" diff --git a/.github/workflows/site-refresh.yml b/.github/workflows/site-refresh.yml index e90b9be4a09805..192fcf3e263db3 100644 --- a/.github/workflows/site-refresh.yml +++ b/.github/workflows/site-refresh.yml @@ -2,22 +2,29 @@ name: Refresh site in Surge on: schedule: - - cron: '*/15 * * * *' + - cron: "*/15 * * * *" jobs: refresh: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - name: Checkout source code + uses: actions/checkout@v1 + - name: Set up Node 10.x + uses: actions/setup-node@v1 with: - ref: metalsmith - - uses: actions/setup-node@v1 - with: - node-version: 12 - - run: yarn install - - run: yarn run build + node-version: 10.x + - name: Set up dependencies + run: yarn install + - name: Build site + run: yarn run build env: NODE_ENV: production - - run: npx surge --project $GITHUB_WORKSPACE/dist --domain vlctechhub-revamp.surge.sh + - name: Publish site to Surge + run: npx surge --project $GITHUB_WORKSPACE/dist --domain vlctechhub.org env: - SURGE_LOGIN: ${{secrets.SURGE_LOGIN}} + SURGE_LOGIN: ${{secrets.SURGE_LOGIN}} SURGE_TOKEN: ${{secrets.SURGE_TOKEN}} + - name: Report published items + run: yarn run report-published + env: + NODE_ENV: production diff --git a/.gitignore b/.gitignore index 373de6a29b1b9d..0832a562e7a66f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,14 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. +# See https://help.github.com/ignore-files/ for more about ignoring files. # compiled output -/dist -/tmp +/tmp/ +/dist/ # dependencies -/node_modules -/bower_components +/node_modules/ # misc /.sass-cache -/connect.lock -/coverage/* -/libpeerconnection.log -npm-debug.log* -testem.log +/testem.log +/yarn-error.log + diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index d421faa302f008..00000000000000 --- a/.jshintrc +++ /dev/null @@ -1,32 +0,0 @@ -{ - "predef": [ - "document", - "window", - "-Promise" - ], - "browser": true, - "boss": true, - "curly": true, - "debug": false, - "devel": true, - "eqeqeq": true, - "evil": true, - "forin": false, - "immed": false, - "laxbreak": false, - "newcap": true, - "noarg": true, - "noempty": false, - "nonew": false, - "nomen": false, - "onevar": false, - "plusplus": false, - "regexp": false, - "undef": true, - "sub": true, - "strict": false, - "white": false, - "eqnull": true, - "esversion": 6, - "unused": true -} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000000000..80ba6a8b7bbe23 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +/bin/ +/dist/ +/tmp/ +/node-modules/ diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000000000..b3977820d61863 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,5 @@ +{ + "printWidth": 120, + "singleQuote": true, + "semi": false +} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 39f874d9b9a1b8..00000000000000 --- a/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ ---- -language: node_js -node_js: - - "6.5" - -sudo: false - -cache: - directories: - - $HOME/.npm - - $HOME/.cache # includes bowers cache - -before_install: - - npm config set spin false - - npm install -g bower - - bower --version - - npm install phantomjs-prebuilt - - node_modules/phantomjs-prebuilt/bin/phantomjs --version - -install: - - npm install - - bower install - -script: - - npm test diff --git a/.watchmanconfig b/.watchmanconfig deleted file mode 100644 index e7834e3e4f39c1..00000000000000 --- a/.watchmanconfig +++ /dev/null @@ -1,3 +0,0 @@ -{ - "ignore_dirs": ["tmp", "dist"] -} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000000..fb0e246ef47d3b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,113 @@ +# Preguntas + +Esta es la web de http://vlctechhub.org. Si tienes alguna pregunta puedes contactar con el equipo en el canal #vlctchhub de https://slack.vlctechhub.org + +# Bugs y petición de funcionalidades + +Crees que has encontrado un bug o tienes una nueva funcionalidad que proponer? Háznoslo saber! + +## Cómo reportar un bug + +1. Actualiza al commit mas reciente de master. Es posible que el bug ya esté arreglado. + +2. Busca issues similares, es posible que alguien haya encontrado este bug antes. + +3. [Abre una issue](https://github.com/VLCTechHub/VLCTechHub-site/issues/new). Contra más información proveas, más fácil es para nosotros validar que se trata de un bug y así actuaremos lo más rápido posible. + +## Petición de funcionalidad + +1. Proporciona una explicación clara y detallada de la funcionalidad que quieres y por qué es importante anyadirla. Ten en cuenta que queremos funcionalidades que resulten útiles a la mayoría de usuarios en lugar de un pequenyo conjunto de estos. +2. Después de comentar la funcionalidad es posible que [pruebes a crear un Pull Request](https://help.github.com/en/articles/creating-a-pull-request). Si puedes, empieza escribiendo algo de código. Siempre tenemos más cosas que hacer que tiempo disponible para hacerlas. Si puedes escribir algo de código esto acelerará el proceso. + +# 🚀 Construyendo el sitio web + +La web de VLCTechHub está desarrollada como un sitio estático con el generador metalsmith. + +1. **Instala yarn** + + Yarn es un gestor de dependencias de proyectos en node. Para instalarlo en tu sistema sigue [sus instrucciones](https://yarnpkg.com/en/docs/install). + +2. **Clona este repo en tu máquina** + +```sh + git clone git@github.com:VLCTechHub/VLCTechHub-site.git +``` + +3. **Instala las dependencias con yarn** + +Entra en el directorio creado e instala las dependencias. + +```sh + cd VLCTechHub-site/ + yarn install +``` + +4. **Construye el sitio** + +Cuando ejecutas el comando `build` el sitio se contruye dentro del directorio _dist_. + +```sh + yarn run build +``` + +Cuando se construye el site, se usa la API de vlctechhub. Por defecto, usa la dirección local de desarrollo `localhost:5000` para hacer llamadas a la API y enviar los formularios de creación. + +Para construir el sitio contra producción hay que construir el sitio con la variable de entorno `NODE_ENV` con el valor `production`: + +```sh + NODE_ENV=production yarn run build +``` + +5. **Levanta un servidor para ver el sitio** + +Ya tienes construido el sitio estático! Puedes levantar un sencillo servidor con Python desde la linea de comandos. + +Con Python 2: + +```sh + cd dist/ + python -m SimpleHTTPServer --port=8080 +``` + +Con Python 3: + +```sh + cd dist/ + python3 -m http.server 8080 +``` + +Ahora el sitio esta corriendo en `http://localhost:8080`. + +# Contribuyendo con pull requests + +Nos encantan los pull requests! Aquí tienes una breve guía de como contribuir: + +1. Forkea el repositorio + +2. Introduce tus cambios siguiendo la guía de estilos de sintaxis: + +- Dos espacios, no tabs +- Sigue las convenciones que vas en el código + +3. Commitea tus cambios + +4. Pushea a tu fork y crea un pull request. Proporciona alguna explicación de por qué has hecho esos cambios. + +## 🎓 Aprendiendo MetalSmith y Nunjucks + +La documentación de MetalSmith se encuentra en [su web](https://metalsmith.io). + +El sistema de plantillas que usa este repo es [Nunjucks](https://mozilla.github.io/nunjucks/), un lenguaje de plantillas sencillo y potente desarrollado por Mozilla. + +La jerarquia de plantillas de Nunjucks esta basada en un artículo sobre [patrones de disenyo orientados a componentes](https://css-tricks.com/component-led-design-patterns-nunjucks-grunt/) sobre Nunjucks. + +## Creando una página nueva + +Para crear una página nueva se necesitan dos cosas: una plantilla y unos datos. +Por ejemplo: todos los eventos comparten la misma plantilla `templates/event.njk`, cada página de evento son los datos de un evento con la plantilla anterior. + +Si ya existe una plantilla para la página que quieres crear, tan solo deberas inclucir el fichero de los datos de la página. Normalmente sera un fichero markdown con extension `.md` dentro de la carpeta `data`. Ten en cuenta que la estructura que elijas determinará la url final. + +Si la plantilla no existe, puedes crearla dentro de `templates` y luego usarla siguiendo los pasos anteriores. + +Para modificar/anyadir css, javascript y/o imagenes usa la carpeta `assets` diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000000000..c31c9add550f31 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 VLCTechHub + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 6ce441cd64ccde..aacb09e7b5a41f 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,11 @@ -# VlcTechHub Client +# VLCTechHub site -VlcTechHub is a repository of technical events based in Valencia. -The site is divided in a backend project exposing an api written in ruby, and a frontend application written in javascript. +Repositorio del sitio web https://vlctechhub.org -This is the repository for the frontend application. Backend application can be found at [VLCTechHub-api](https://github.com/VLCTechHub/VLCTechHub-api) +## 🤝 Cómo contribuir -## Prerequisites - -You will need the following things properly installed on your computer: - -* [Git](https://git-scm.com/) -* [Node.js](https://nodejs.org/) -* [npm](https://www.npmjs.com/) - - -## Installation - -* `git clone ` this repository -* `cd VLCTechHub` change into the new directory -* `npm install -g bower` install bower -* `npm install -g ember-cli` install ember-cli -* `npm install` -* `bower install` - -## Test - -* `npm install -g phantomjs` -* `ember test` or `ember test --server` for liverload - -## Running / Development - -* `ember serve` -* Visit your app at [http://localhost:4200](http://localhost:4200). - -__Note__: When run on linux, you might have a watch problem. You may need to [increment the number of files that can be watched by your user](https://discourse.roots.io/t/gulp-watch-error-on-ubuntu-14-04-solved/3453/2). - -## Deploy - - Production runs on surge.sh server - - * `npm install -g surge` - * `npm run deploy` - - To send a message to slack about the new release, set the environment variable `SLACK_WEBHOOK` with the Incoming Webhook url. It will send the message to #vlctechhub channel. - -## Further Reading / Useful Links - -* [ember.js](https://emberjs.com/) -* [ember-cli](https://www.ember-cli.com/) -* Development Browser Extensions - * [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi) - * [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/) - --- - -[![Build Status](https://travis-ci.org/VLCTechHub/VLCTechHub.svg?branch=master)](https://travis-ci.org/VLCTechHub/VLCTechHub) +Ver la [guía de colaboración](./CONTRIBUTING.md) +## :memo: License +Licensed under the [MIT License](./LICENSE). diff --git a/app/app.js b/app/app.js deleted file mode 100644 index 831ad6106dd44d..00000000000000 --- a/app/app.js +++ /dev/null @@ -1,18 +0,0 @@ -import Ember from 'ember'; -import Resolver from './resolver'; -import loadInitializers from 'ember-load-initializers'; -import config from './config/environment'; - -let App; - -Ember.MODEL_FACTORY_INJECTIONS = true; - -App = Ember.Application.extend({ - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix, - Resolver -}); - -loadInitializers(App, config.modulePrefix); - -export default App; diff --git a/app/helpers/.gitkeep b/app/helpers/.gitkeep deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/app/helpers/linkify-text.js b/app/helpers/linkify-text.js deleted file mode 100644 index 6a737b927928db..00000000000000 --- a/app/helpers/linkify-text.js +++ /dev/null @@ -1,21 +0,0 @@ -import Ember from 'ember'; - -export function linkfy([text]) { - if(Ember.isEmpty(text)) { return text; } - - text = text.replace(/\n/g, "
"); - text = text.replace(/https?:\/\/\S+[.][^\s.,;:<>)\]\\]+/gi, function (s) { - return '' + s + ''; - }); - - text = text.replace(/(^|)@(\w+)/gi, function (s) { - return '' + s + ''; - }); - - text = text.replace(/(^|)#(\w+)/gi, function (s) { - return '' + s + ''; - }); - return text; -} - -export default Ember.Helper.helper(linkfy); diff --git a/app/helpers/shorten-text.js b/app/helpers/shorten-text.js deleted file mode 100644 index 79e020172a9012..00000000000000 --- a/app/helpers/shorten-text.js +++ /dev/null @@ -1,10 +0,0 @@ -import Ember from 'ember'; - -export function shorten([text, size]) { - if(!text || text.length <= size) { - return text; - } - return text.substring(0,size) + '...'; -} - -export default Ember.Helper.helper(shorten); diff --git a/app/index.html b/app/index.html deleted file mode 100644 index cfba46784cb010..00000000000000 --- a/app/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - VLCTechHub - - - - - - - - - - - - - - - - - - - - - - - - - - {{content-for 'head'}} - - - - - {{content-for 'tracking'}} - {{content-for 'head-footer'}} - - - {{content-for 'body'}} - - - - - {{content-for 'body-footer'}} - - diff --git a/app/initializers/register-autosize.js b/app/initializers/register-autosize.js deleted file mode 100644 index 669646477de196..00000000000000 --- a/app/initializers/register-autosize.js +++ /dev/null @@ -1,9 +0,0 @@ -export function initialize(app) { - app.register('autosize:main', window.autosize, {instantiate: false}); - app.inject('component:event/form-field', 'autosize', 'autosize:main'); -} - -export default { - name: 'register-autosize', - initialize -}; diff --git a/app/instance-initializers/config-moment.js b/app/instance-initializers/config-moment.js deleted file mode 100644 index 28ec24061bb516..00000000000000 --- a/app/instance-initializers/config-moment.js +++ /dev/null @@ -1,10 +0,0 @@ -export function initialize(appInstance) { - let moment = appInstance.lookup('service:moment'); - moment.changeLocale('es'); - moment.changeTimeZone('Europe/Madrid'); -} - -export default { - name: 'config-moment', - initialize: initialize -}; diff --git a/app/pods/application/adapter.js b/app/pods/application/adapter.js deleted file mode 100644 index dd4fe747aa16a0..00000000000000 --- a/app/pods/application/adapter.js +++ /dev/null @@ -1,7 +0,0 @@ -import DS from 'ember-data'; -import ENV from 'vlc-tech-hub/config/environment'; - -export default DS.RESTAdapter.extend({ - host: ENV.APP.API_HOST, - namespace: 'v1' -}); diff --git a/app/pods/application/controller.js b/app/pods/application/controller.js deleted file mode 100644 index 4f9e4ca81b47f9..00000000000000 --- a/app/pods/application/controller.js +++ /dev/null @@ -1,19 +0,0 @@ -import Ember from 'ember'; -import moment from 'moment'; - -export default Ember.Controller.extend({ - menu: Ember.inject.service(), - mobileMenuExpanded: false, - currentMonth: Ember.computed(function(){ - return moment().format('MM'); - }), - currentYear: Ember.computed(function(){ - return moment().format('YYYY'); - }), - totalJobs: Ember.computed('model.jobs.@each', function(){ - return this.get('model.jobs').filterBy('isPublished').get('length'); - }), - menuAction: Ember.computed('menu.actionComponent', function() { - return this.get('menu.actionComponent'); - }) -}); diff --git a/app/pods/application/route.js b/app/pods/application/route.js deleted file mode 100644 index 7377cc46d821a2..00000000000000 --- a/app/pods/application/route.js +++ /dev/null @@ -1,37 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - title: function(tokens) { - tokens.unshift('VLCTechHub'); - return tokens.reverse().join(' | '); - }, - headTags: function() { - return [{ - type: 'meta', - tagId: 'meta-description-tag', - attrs: { - name: 'description', - content: "VLCTechHub es el hub de eventos y empleo tecnológico en Valencia: eventos de programación, coding dojos, talleres, workshops o quedadas informales para fomentar una comunidad o compartir información de base tecnológica en Valencia o Castellón." - } - }]; - }, - model: function(){ - return Ember.Object.create({ - jobs: this.store.findAll('job') - }); - }, - actions: { - toggleMobileMenu: function(){ - this.controller.toggleProperty('mobileMenuExpanded'); - }, - loading: function(){ - if(!Ember.isEmpty(this.controller)) { - this.controller.set('mobileMenuExpanded', false); - } - return true; - }, - didTransition: function(){ - this.controller.set('mobileMenuExpanded', false); - } - } -}); diff --git a/app/pods/application/serializer.js b/app/pods/application/serializer.js deleted file mode 100644 index 98118fd83988e7..00000000000000 --- a/app/pods/application/serializer.js +++ /dev/null @@ -1,5 +0,0 @@ -import DS from 'ember-data'; - -export default DS.RESTSerializer.extend({ - primaryKey: 'id' -}); diff --git a/app/pods/application/template.hbs b/app/pods/application/template.hbs deleted file mode 100644 index 8b2bc34b762d6e..00000000000000 --- a/app/pods/application/template.hbs +++ /dev/null @@ -1,34 +0,0 @@ -
- - {{#if mobileMenuExpanded}} - - {{/if}} - - {{common/app-desktop-menu - currentPath=currentPath - totalJobs=totalJobs - actionComponent=menuAction - }} - -
-
- {{outlet}} -
-
- - {{common/app-footer}} -
diff --git a/app/pods/components/common/app-desktop-menu/component.js b/app/pods/components/common/app-desktop-menu/component.js deleted file mode 100644 index eae4ffd23ab0a4..00000000000000 --- a/app/pods/components/common/app-desktop-menu/component.js +++ /dev/null @@ -1,11 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - tagName: 'header', - classNames: ['menu', '-desktop'], - totalJobs: 0, - actionComponent: null, - isAgendaActive: Ember.computed('currentPath', function() { - return this.get('currentPath') === 'events.upcoming'; - }) -}); diff --git a/app/pods/components/common/app-desktop-menu/style.scss b/app/pods/components/common/app-desktop-menu/style.scss deleted file mode 100644 index ea9a4b6e2b50fd..00000000000000 --- a/app/pods/components/common/app-desktop-menu/style.scss +++ /dev/null @@ -1,52 +0,0 @@ -& { - display: none; - @include breakpoint($screen-sm-min) { - display: block; - } - - &.menu.-desktop { - margin-bottom: 1em; - - - > ul { - @include cf() - margin: 1em auto; - max-width: 64rem; - > li { - @include col(1/3, $cycle: 3); - } - .button-menu-list { - & .button { - padding: 0; - padding-bottom: 2px; - line-height: 3rem; - - & .badge { - display: inline-block; - min-width: 10px; - padding: 4px 5px; - font-size: 12px; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: super; - background-color: #f00; - border-radius: 10px; - } - } - } - & .logo { - text-align: center; - & img { - width:100px; - } - } - - & .action { - text-align: right; - margin-top: 1rem; - } - } - } -} diff --git a/app/pods/components/common/app-desktop-menu/template.hbs b/app/pods/components/common/app-desktop-menu/template.hbs deleted file mode 100644 index 2267cff83dc9d4..00000000000000 --- a/app/pods/components/common/app-desktop-menu/template.hbs +++ /dev/null @@ -1,30 +0,0 @@ - - diff --git a/app/pods/components/common/app-footer/component.js b/app/pods/components/common/app-footer/component.js deleted file mode 100644 index 926b613009c0bc..00000000000000 --- a/app/pods/components/common/app-footer/component.js +++ /dev/null @@ -1,4 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ -}); diff --git a/app/pods/components/common/app-footer/template.hbs b/app/pods/components/common/app-footer/template.hbs deleted file mode 100644 index 35e6c0602d9f25..00000000000000 --- a/app/pods/components/common/app-footer/template.hbs +++ /dev/null @@ -1,51 +0,0 @@ - diff --git a/app/pods/components/common/create-event-button/component.js b/app/pods/components/common/create-event-button/component.js deleted file mode 100644 index 926b613009c0bc..00000000000000 --- a/app/pods/components/common/create-event-button/component.js +++ /dev/null @@ -1,4 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ -}); diff --git a/app/pods/components/common/create-event-button/template.hbs b/app/pods/components/common/create-event-button/template.hbs deleted file mode 100644 index d5f21c627055d0..00000000000000 --- a/app/pods/components/common/create-event-button/template.hbs +++ /dev/null @@ -1,3 +0,0 @@ -{{#link-to 'event.new' classNames='button -primary'}} - Da de alta un evento -{{/link-to}} diff --git a/app/pods/components/common/create-job-button/component.js b/app/pods/components/common/create-job-button/component.js deleted file mode 100644 index 926b613009c0bc..00000000000000 --- a/app/pods/components/common/create-job-button/component.js +++ /dev/null @@ -1,4 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ -}); diff --git a/app/pods/components/common/create-job-button/template.hbs b/app/pods/components/common/create-job-button/template.hbs deleted file mode 100644 index 2cc58e060a04de..00000000000000 --- a/app/pods/components/common/create-job-button/template.hbs +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/pods/components/event/archive-dropdown-month/component.js b/app/pods/components/event/archive-dropdown-month/component.js deleted file mode 100644 index e80b72406dac45..00000000000000 --- a/app/pods/components/event/archive-dropdown-month/component.js +++ /dev/null @@ -1,18 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - months: [ - { id: '01', text: 'Enero' }, - { id: '02', text: 'Febrero' }, - { id: '03', text: 'Marzo' }, - { id: '04', text: 'Abril' }, - { id: '05', text: 'Mayo' }, - { id: '06', text: 'Junio' }, - { id: '07', text: 'Julio' }, - { id: '08', text: 'Agosto' }, - { id: '09', text: 'Septiembre' }, - { id: '10', text: 'Octubre' }, - { id: '11', text: 'Noviembre' }, - { id: '12', text: 'Diciembre' } - ] -}); diff --git a/app/pods/components/event/archive-dropdown-month/template.hbs b/app/pods/components/event/archive-dropdown-month/template.hbs deleted file mode 100644 index ec03166db59da6..00000000000000 --- a/app/pods/components/event/archive-dropdown-month/template.hbs +++ /dev/null @@ -1,8 +0,0 @@ -
- -
- diff --git a/app/pods/components/event/archive-dropdown-year/component.js b/app/pods/components/event/archive-dropdown-year/component.js deleted file mode 100644 index 0b8d2508aabbf0..00000000000000 --- a/app/pods/components/event/archive-dropdown-year/component.js +++ /dev/null @@ -1,12 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - years: Ember.computed(function(){ - var years = []; - var currentYear = new Date().getFullYear(); - for(var i=2013; i <= currentYear; i++){ - years.push(i); - } - return years; - }) -}); diff --git a/app/pods/components/event/archive-dropdown-year/template.hbs b/app/pods/components/event/archive-dropdown-year/template.hbs deleted file mode 100644 index f70cb513805769..00000000000000 --- a/app/pods/components/event/archive-dropdown-year/template.hbs +++ /dev/null @@ -1,7 +0,0 @@ -
- -
diff --git a/app/pods/components/event/event-avatar/component.js b/app/pods/components/event/event-avatar/component.js deleted file mode 100644 index 28a980ca4a46e6..00000000000000 --- a/app/pods/components/event/event-avatar/component.js +++ /dev/null @@ -1,27 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - event: null, - classNames: "event-avatar", - hasLinktoTwitter: false, - avatar: Ember.computed('event.hashtag', function() { - var handle = this.get('event.hashtag') || ''; - if(handle.indexOf('@') === 0) { - return 'https://res.cloudinary.com/vlctechhub/image/twitter_name/w_240/' + - handle.substring(1) + - '.jpg'; - } - return 'https://dummyimage.com/256x256/000/fff.gif&text=%23' + handle.substring(1); - }), - href: Ember.computed('event.hashtag', function(){ - var handler = this.get('event.hashtag'); - if(Ember.isEmpty(handler)) { return ''; } - var userURL = 'https://twitter.com/'; - var hashtagURL = 'https://twitter.com/hashtag/'; - var uriHandler = handler.substring(1, handler.length); - if(handler.indexOf('#') === 0) { - return hashtagURL + uriHandler; - } - return userURL + uriHandler; - }) -}); diff --git a/app/pods/components/event/event-avatar/style.scss b/app/pods/components/event/event-avatar/style.scss deleted file mode 100644 index 351611e705ef39..00000000000000 --- a/app/pods/components/event/event-avatar/style.scss +++ /dev/null @@ -1,4 +0,0 @@ -img { - width: 100%; - max-width: 240px; -} diff --git a/app/pods/components/event/event-avatar/template.hbs b/app/pods/components/event/event-avatar/template.hbs deleted file mode 100644 index 9b6b182fb94dc9..00000000000000 --- a/app/pods/components/event/event-avatar/template.hbs +++ /dev/null @@ -1,7 +0,0 @@ -{{#if hasLinkToTwitter}} - - - -{{else}} - -{{/if}} diff --git a/app/pods/components/event/event-calendar/component.js b/app/pods/components/event/event-calendar/component.js deleted file mode 100644 index e4c891acbc4e9f..00000000000000 --- a/app/pods/components/event/event-calendar/component.js +++ /dev/null @@ -1,34 +0,0 @@ -import Ember from 'ember'; -import moment from 'moment'; - -export default Ember.Component.extend({ - classNames: ['monthly'], - events: Ember.computed(() => []), - sanitizedEvents: Ember.computed('events', function() { - return this.get('events').map((e) => { - return { - id: e.get('id'), - name: this._getEventName(e), - startdate: moment(e.get('date')).format('YYYY-MM-DD'), - starttime: moment(e.get('date')).format('HH:mm'), - url: e.get('slug'), - color: '#9f4b99' - }; - }); - }), - didInsertElement() { - var events = this.get('sanitizedEvents'); - this.$().monthly({ - weekStart: 'Mon', - mode: 'event', - stylePast: true, - locale: 'es', - dataType: 'json', - events: { monthly: events } - }); - }, - _getEventName(e) { - if(!e.get('hashtag')) { return e.get('title'); } - return e.get('hashtag') + ' - ' + e.get('title'); - } -}); diff --git a/app/pods/components/event/event-calendar/template.hbs b/app/pods/components/event/event-calendar/template.hbs deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/app/pods/components/event/event-card/component.js b/app/pods/components/event/event-card/component.js deleted file mode 100644 index 83f10d29be4540..00000000000000 --- a/app/pods/components/event/event-card/component.js +++ /dev/null @@ -1,6 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - event: null, - classNames: ['box'] -}); diff --git a/app/pods/components/event/event-card/style.scss b/app/pods/components/event/event-card/style.scss deleted file mode 100644 index 79b12cd05deaa0..00000000000000 --- a/app/pods/components/event/event-card/style.scss +++ /dev/null @@ -1,19 +0,0 @@ -& { - height: 400px; -} - -.avatar { - text-align: center; -} - -.date { - color: #7F7F2B; -} - -.title a { - font-family: 'Open Sans',sans-serif; - font-size: 22px; - font-weight: 100; - line-height: 1.65; - color: #000; -} diff --git a/app/pods/components/event/event-card/template.hbs b/app/pods/components/event/event-card/template.hbs deleted file mode 100644 index 5336ff56b127f0..00000000000000 --- a/app/pods/components/event/event-card/template.hbs +++ /dev/null @@ -1,21 +0,0 @@ -
-
-
- {{event/event-avatar event=event}} -
-
- -
- {{#link-to 'event.detail' event}} - {{event.title}} - {{/link-to}} -
-
-
-
- diff --git a/app/pods/components/event/event-detail/component.js b/app/pods/components/event/event-detail/component.js deleted file mode 100644 index 926b613009c0bc..00000000000000 --- a/app/pods/components/event/event-detail/component.js +++ /dev/null @@ -1,4 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ -}); diff --git a/app/pods/components/event/event-detail/style.scss b/app/pods/components/event/event-detail/style.scss deleted file mode 100644 index 74c60bbb3d89e3..00000000000000 --- a/app/pods/components/event/event-detail/style.scss +++ /dev/null @@ -1,33 +0,0 @@ -.header { - margin-bottom: 1em; - @include cf(); - .event-avatar { - @include breakpoint($screen-sm-min) { - @include col(1/3); - } - } - .summary { - @include breakpoint($screen-sm-min) { - @include col(2/3); - @include cf(); - } - .title { - margin-bottom:1em; - font-family: 'Helvetica Neue',Helvetica,sans-serif; - font-size: 1.75rem; - } - .date { - font-size: 1.5rem; - color: #7F7F2B; - } - } -} - -.description { - margin-bottom: 1em; - font-family: 'Open Sans',sans-serif; - font-size: 18px; - font-weight: 100; - line-height: 1.65; -} - diff --git a/app/pods/components/event/event-detail/template.hbs b/app/pods/components/event/event-detail/template.hbs deleted file mode 100644 index 918638f0c412b5..00000000000000 --- a/app/pods/components/event/event-detail/template.hbs +++ /dev/null @@ -1,29 +0,0 @@ -
-
- {{event/event-avatar - hasLinkToTwitter=true - event=model - }} -
- -

{{model.title }}

-
- Ver fuente - {{#unless model.isPastEvent}} - Añadir al calendario - {{/unless}} -
-
-
-
-

{{{ linkify-text model.description }}}

-
- -
diff --git a/app/pods/components/event/event-list/component.js b/app/pods/components/event/event-list/component.js deleted file mode 100644 index ca61b6be1d9bb6..00000000000000 --- a/app/pods/components/event/event-list/component.js +++ /dev/null @@ -1,7 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - tagName: 'ul', - classNames: ['event-cards'], - events: Ember.computed(() => []) -}); diff --git a/app/pods/components/event/event-list/style.scss b/app/pods/components/event/event-list/style.scss deleted file mode 100644 index 8863b722207f17..00000000000000 --- a/app/pods/components/event/event-list/style.scss +++ /dev/null @@ -1,10 +0,0 @@ -&.event-cards { - @include cf() - > li { - @include col(1, $cycle: 1); - @include breakpoint($screen-sm-min) { - @include col(1/3, $cycle: 3); - } - margin-bottom: 1em; - } -} diff --git a/app/pods/components/event/event-list/template.hbs b/app/pods/components/event/event-list/template.hbs deleted file mode 100644 index c71feb1fa7986a..00000000000000 --- a/app/pods/components/event/event-list/template.hbs +++ /dev/null @@ -1,3 +0,0 @@ -{{#each events as |event|}} -
  • {{event/event-card event=event}}
  • -{{/each}} diff --git a/app/pods/components/event/event-row/component.js b/app/pods/components/event/event-row/component.js deleted file mode 100644 index 3a98d240c419ab..00000000000000 --- a/app/pods/components/event/event-row/component.js +++ /dev/null @@ -1,19 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - item:null, - selectedItem:null, - isExpanded: Ember.computed('item', 'selectedItem', function(){ - if(this.get('item') === null || this.get('selectedItem') === null) { return false; } - return this.get('item.id') === this.get('selectedItem.id'); - }), - hasHashtag: Ember.computed('item', function(){ - return !Ember.isEmpty(this.get('item.hashtag')); - }), - actions: { - toggleExpand: function(item){ - var action = this.get('isExpanded')? 'collapseAction':'expandAction'; - this.sendAction(action, item); - } - } -}); diff --git a/app/pods/components/event/event-row/style.scss b/app/pods/components/event/event-row/style.scss deleted file mode 100644 index a50ad42752eab1..00000000000000 --- a/app/pods/components/event/event-row/style.scss +++ /dev/null @@ -1,13 +0,0 @@ -& { - - .header > ul { - display: flex; - } - .event-title { - font-size: 1.25rem; - } - - .date { - color: #9E9E9E; - } -} diff --git a/app/pods/components/event/event-row/template.hbs b/app/pods/components/event/event-row/template.hbs deleted file mode 100644 index 35b03231042cf8..00000000000000 --- a/app/pods/components/event/event-row/template.hbs +++ /dev/null @@ -1,39 +0,0 @@ -
    -
    -
      -
    • - -
    • -
    • -

      - - {{shorten-text item.title 55}} - -

      -
    • -
    • - {{#if hasHashtag}} - - por {{event/link-to-twitter hashtag=item.hashtag}} - - {{/if}} -
    • -
    -
    - {{#if isExpanded}} -
    - Ver fuente - {{#unless item.isPastEvent}} - Añadir al calendario - {{/unless}} -
    -

    - {{{ linkify-text item.description }}} -

    - {{/if}} -
    diff --git a/app/pods/components/event/form-field/component.js b/app/pods/components/event/form-field/component.js deleted file mode 100644 index a008d8c2bd81e7..00000000000000 --- a/app/pods/components/event/form-field/component.js +++ /dev/null @@ -1,53 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - elementClass: 'field', - autosize: Ember.K, - tagAsString: '', - isTextarea: Ember.computed('type', function(){ - return this.get('type') === 'textarea'; - }), - isDate: Ember.computed('type', function(){ - return this.get('type') === 'date'; - }), - isTime: Ember.computed('type', function(){ - return this.get('type') === 'time'; - }), - isTag: Ember.computed('type', function(){ - return this.get('type') === 'tag'; - }), - isInput: Ember.computed('type', function(){ - return !this.get('isTextarea') && - !this.get('isDate') && - !this.get('isTime') && - !this.get('isTag'); - }), - didUpdateAttrs: function() { - if(this.get('isTag')) { - this.set('tagAsString', this.get('value').join(',')); - } - }, - didInsertElement: function(){ - if(this.get('isTime')) { - this.initializeTime(); - } - if(this.get('isTextarea')) { - this.initializeTextarea(); - } - }, - initializeTime: function(){ - var input = Ember.$("input[name='" + this.get('name') + "']"); - input.timepicker({'minTime': '9:00', 'maxTime': '21:00', 'forceRoundTime': false, step: 30, timeFormat: 'H:i', 'roundingFunction' : function(i) { return i; } }); - }, - initializeTextarea: function(){ - var autosize = this.get('autosize'); - autosize(this.$('textarea')); - }, - actions: { - setTag: function() { - var tagAsString = this.get('tagAsString'); - var tags = tagAsString.replace(/\s+/g,'').split(','); - this.set('value', tags); - } - } -}); diff --git a/app/pods/components/event/form-field/template.hbs b/app/pods/components/event/form-field/template.hbs deleted file mode 100644 index 0f1d707a11af63..00000000000000 --- a/app/pods/components/event/form-field/template.hbs +++ /dev/null @@ -1,25 +0,0 @@ - -{{#if isTextarea }} - {{textarea name=name value=value class=elementClass}} -{{/if}} - -{{#if isDate}} - {{pikaday-input name=name value=value format="DD/MM/YYYY" class=elementClass useUTC=true}} -{{/if}} - -{{#if isTime}} - {{input type='text' value=value name=name class=elementClass}} -{{/if}} - -{{#if isInput}} - {{input type=type value=value name=name class=elementClass}} -{{/if}} - -{{#if isTag}} - {{input type='text' value=tagAsString name=name class=elementClass focus-out="setTag"}} -{{/if}} - - {{helpText}} - - - diff --git a/app/pods/components/event/link-to-calendar/component.js b/app/pods/components/event/link-to-calendar/component.js deleted file mode 100644 index d5642e6f95862f..00000000000000 --- a/app/pods/components/event/link-to-calendar/component.js +++ /dev/null @@ -1,28 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - tagName: 'a', - classNames: ['link-to-calendar'], - attributeBindings: ['href', 'title', 'target'], - title: 'Añadir a Google Calendar', - target: '_blank', - href: Ember.computed('title', 'uri', 'date', function() { - var zeroPad = function(number) { - return ("0" + number).slice(-2); - }; - var isoDate = function(date) { - return date.getUTCFullYear() + zeroPad(date.getUTCMonth() + 1) + zeroPad(date.getUTCDate()) + 'T' + - zeroPad(date.getUTCHours()) + zeroPad(date.getUTCMinutes()) + zeroPad(date.getUTCSeconds()) + 'Z'; - }; - - var title = encodeURIComponent(this.get('title')); - var details = encodeURIComponent('Más info: ' + this.get('uri')); - var startDate = new Date(this.get('date')); - var endDate = new Date(this.get('date')); - endDate.setHours(endDate.getHours() + 1); - var dates = isoDate(startDate) + '/' + isoDate(endDate); - - var url = 'https://www.google.com/calendar/event?action=TEMPLATE&text=' + title + '&dates=' + dates + '&details='+ details; - return url; - }) -}); diff --git a/app/pods/components/event/link-to-calendar/template.hbs b/app/pods/components/event/link-to-calendar/template.hbs deleted file mode 100644 index df7fbf5f1ca306..00000000000000 --- a/app/pods/components/event/link-to-calendar/template.hbs +++ /dev/null @@ -1 +0,0 @@ -Añadir a Google Calendar diff --git a/app/pods/components/event/link-to-event/component.js b/app/pods/components/event/link-to-event/component.js deleted file mode 100644 index f8f7b6f903943b..00000000000000 --- a/app/pods/components/event/link-to-event/component.js +++ /dev/null @@ -1,10 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - tagName: 'a', - classNames: ['ml1'], - attributeBindings: ['href', 'target', 'title'], - title: 'Ver fuente', - target: '_blank', - href: Ember.computed.alias('uri') -}); diff --git a/app/pods/components/event/link-to-event/template.hbs b/app/pods/components/event/link-to-event/template.hbs deleted file mode 100644 index 6b7a54d332ec32..00000000000000 --- a/app/pods/components/event/link-to-event/template.hbs +++ /dev/null @@ -1 +0,0 @@ -Visitar fuente diff --git a/app/pods/components/event/link-to-twitter/component.js b/app/pods/components/event/link-to-twitter/component.js deleted file mode 100644 index ed8a1d1463a319..00000000000000 --- a/app/pods/components/event/link-to-twitter/component.js +++ /dev/null @@ -1,18 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - tagName: 'a', - classNames: ['black'], - attributeBindings: ['href', 'target'], - target: '_blank', - href: Ember.computed('hashtag', function(){ - var handler = this.get('hashtag'); - var userURL = 'https://twitter.com/'; - var hashtagURL = 'https://twitter.com/hashtag/'; - var uriHandler = handler.substring(1, handler.length); - if(handler.indexOf('#') === 0) { - return hashtagURL + uriHandler; - } - return userURL + uriHandler; - }) -}); diff --git a/app/pods/components/event/link-to-twitter/template.hbs b/app/pods/components/event/link-to-twitter/template.hbs deleted file mode 100644 index 5d21f837186939..00000000000000 --- a/app/pods/components/event/link-to-twitter/template.hbs +++ /dev/null @@ -1 +0,0 @@ -{{hashtag}} diff --git a/app/pods/components/event/new-event-form/component.js b/app/pods/components/event/new-event-form/component.js deleted file mode 100644 index 8d6049bc9f70d7..00000000000000 --- a/app/pods/components/event/new-event-form/component.js +++ /dev/null @@ -1,31 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - event: null, - isSubmitting: false, - onSubmit: Ember.K, - buttonText: Ember.computed('isSubmitting', function(){ - var text = 'Publicar'; - if(this.get('isSubmitting')) { - text = 'Publicando...'; - } - return text; - }), - isButtonDisabled: Ember.computed('event.isValid', 'isSubmitting', function(){ - if(!this.get('event.isValid') || this.get('isSubmitting')) { return true; } - return false; - }), - isChromeExtensionHintVisible: Ember.computed('event.link', function(){ - var supportedSites = ['http://www.meetup.com/', 'http://www.eventbrite.es/e/']; - var link = this.get('event.link') || ''; - return supportedSites.some(function(site){ return link.indexOf(site) === 0; }); - }), - actions: { - submit: function(params) { - if(!this.get('isSubmitting')){ - this.set('isSubmitting', true); - return this.get('onSubmit')(params); - } - } - } -}); diff --git a/app/pods/components/event/new-event-form/style.scss b/app/pods/components/event/new-event-form/style.scss deleted file mode 100644 index cc4f36a8fceaca..00000000000000 --- a/app/pods/components/event/new-event-form/style.scss +++ /dev/null @@ -1,6 +0,0 @@ -.hint { - display: inline-block; - a { - text-decoration: underline; - } -} diff --git a/app/pods/components/event/new-event-form/template.hbs b/app/pods/components/event/new-event-form/template.hbs deleted file mode 100644 index 293f961cc01186..00000000000000 --- a/app/pods/components/event/new-event-form/template.hbs +++ /dev/null @@ -1,16 +0,0 @@ -
    - {{event/form-field name='title' label="Título *" value=event.title type="text"}} - {{event/form-field name='description' label="Descripción *" value=event.description type="textarea"}} - {{event/form-field name='link' label="Link *" value=event.link type="text"}} - {{event/form-field name='date' label="Fecha *(dd/mm/yyyy)" value=event.date type="date"}} - {{event/form-field name='time' label="Hora *(hh:mm)" type="time" value=event.time}} - {{event/form-field name='hashtag' label="Hashtag o mención" value=event.hashtag type="text"}} - - -{{#if isChromeExtensionHintVisible }} -
    - o prueba la extension de Chrome para publicar este evento. -
    -{{/if}} - -
    diff --git a/app/pods/components/event/section-title/component.js b/app/pods/components/event/section-title/component.js deleted file mode 100644 index 926b613009c0bc..00000000000000 --- a/app/pods/components/event/section-title/component.js +++ /dev/null @@ -1,4 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ -}); diff --git a/app/pods/components/event/section-title/style.scss b/app/pods/components/event/section-title/style.scss deleted file mode 100644 index de99aefbb9c75a..00000000000000 --- a/app/pods/components/event/section-title/style.scss +++ /dev/null @@ -1,14 +0,0 @@ -.main-title { - font-size: 1.5rem; - margin-bottom:1rem; -} - -@media (min-width: 700px) { - - .main-title:before { - content: ">"; - padding-right: 5px - } -} - - diff --git a/app/pods/components/event/section-title/template.hbs b/app/pods/components/event/section-title/template.hbs deleted file mode 100644 index a333489797be02..00000000000000 --- a/app/pods/components/event/section-title/template.hbs +++ /dev/null @@ -1,5 +0,0 @@ -
    - {{text}} - {{yield}} -   -
    diff --git a/app/pods/components/job/job-row/component.js b/app/pods/components/job/job-row/component.js deleted file mode 100644 index 0096bdf93e57cf..00000000000000 --- a/app/pods/components/job/job-row/component.js +++ /dev/null @@ -1,12 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - item: null, - selectedItem:null, - onExpand: Ember.K, - onCollapse: Ember.K, - isExpanded: Ember.computed('item', 'selectedItem', function(){ - if(this.get('item') === null || this.get('selectedItem') === null) { return false; } - return this.get('selectedItem.id') === this.get('item.id'); - }), -}); diff --git a/app/pods/components/job/job-row/template.hbs b/app/pods/components/job/job-row/template.hbs deleted file mode 100644 index 80eb965a28b0d7..00000000000000 --- a/app/pods/components/job/job-row/template.hbs +++ /dev/null @@ -1,49 +0,0 @@ -
    -
    -
    -
    - {{#link-to 'job.list.detail' item class="title" title=item.title}} - {{shorten-text item.title 55}} - {{/link-to}} -
    -
    - - {{item.company.name}} - -
    -
    - {{#each item.tags as |tag|}} - {{tag}} - {{/each}} -
    -
    -
    - {{moment-from-now item.published_at}} -
    -
    - {{#if isExpanded}} -
    -
    -
    Descripción
    - {{{ linkify-text item.description }}} -
    -
    -
    Sueldo
    - {{ item.salary }} -
    -
    -
    Cómo contactar
    - {{#if item.how_to_apply}} - {{ item.how_to_apply }} - {{else}} - Instrucciones en la oferta - {{/if}} -
    - {{#if item.link }} - - {{/if}} -
    - {{/if}} -
    diff --git a/app/pods/components/job/new-form/component.js b/app/pods/components/job/new-form/component.js deleted file mode 100644 index 610471bc99727d..00000000000000 --- a/app/pods/components/job/new-form/component.js +++ /dev/null @@ -1,11 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - job: null, - onSubmit: Ember.K, - actions: { - submit: function() { - return this.get('onSubmit')(); - } - } -}); diff --git a/app/pods/components/job/new-form/template.hbs b/app/pods/components/job/new-form/template.hbs deleted file mode 100644 index adfbec19283050..00000000000000 --- a/app/pods/components/job/new-form/template.hbs +++ /dev/null @@ -1,88 +0,0 @@ -
    - {{event/form-field - name="title" - label="Puesto *" - value=job.title - type="text" - helpText="Ej: 'Desarrollador ruby', 'Diseñador UX', 'Programador senior .Net'" - }} - - {{event/form-field - name="description" - label="Descripción *" - value=job.description - type="textarea" - helpText="Describe con detalle lo que implica el puesto, qué tipo de candidato buscas, cómo se trabaja en tu empresa y qué beneficios ofrecéis." - }} - - {{event/form-field - name="tag" - label="Palabras clave" - value=job.tags - type="tag" - helpText="Breve listado separado por comas. Ej: javascript, aws, marketing, photoshop" - }} - - {{event/form-field - name="salary" - label="Sueldo o banda salarial *" - value=job.salary - type="text" - helpText="Los candidatos contactan más con empresas que publican el sueldo en la oferta." - }} - - {{event/form-field - name="how-to-apply" - label="Cómo inscribirse" - value=job.how_to_apply - type="text" - helpText="Escribe las instrucciones para inscribirte a tu oferta aquí. Ej: 'Mándanos una carta de presentación y tu cv a la direccion de correo xxx@xxx.com. Cuéntanos por qué eres el candidato ideal!'" - }} - - {{event/form-field - name="link" - label="URL de la oferta" - value=job.link - type="text" - helpText="Si tienes publicada la oferta en tu página web puedes poder aquí el link." - }} - - - {{event/form-field - name="company-name" - label="Nombre de la empresa *" - value=job.company.name - type="text" - }} - - {{event/form-field - name="company-link" - label="Web de la empresa *" - value=job.company.link - type="text" - }} - - {{event/form-field - name="company-twitter" - label="Twitter de la empresa" - value=job.company.twitter - type="text" - helpText="Te nombraremos cuando se publique la oferta. Ej: @mozilla" - }} - - {{event/form-field - name="email" - label="Email de contacto *" - value=job.contactEmail - type="text" - helpText="Email contacto en caso de tener alguna duda con la oferta. Este email no se publicará con la oferta." - }} - - -
    diff --git a/app/pods/event/archive/index/route.js b/app/pods/event/archive/index/route.js deleted file mode 100644 index 02bee174ee443b..00000000000000 --- a/app/pods/event/archive/index/route.js +++ /dev/null @@ -1,10 +0,0 @@ -import Ember from 'ember'; -import moment from 'moment'; - -export default Ember.Route.extend({ - beforeModel() { - var year = moment().format('YYYY'); - var month = moment().format('MM'); - this.transitionTo('event.archive.month', year, month); - } -}); diff --git a/app/pods/event/archive/month/controller.js b/app/pods/event/archive/month/controller.js deleted file mode 100644 index b461f2cd320169..00000000000000 --- a/app/pods/event/archive/month/controller.js +++ /dev/null @@ -1,5 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Controller.extend({ - -}); diff --git a/app/pods/event/archive/month/detail/route.js b/app/pods/event/archive/month/detail/route.js deleted file mode 100644 index 851e86cde63898..00000000000000 --- a/app/pods/event/archive/month/detail/route.js +++ /dev/null @@ -1,25 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - titleToken: function(model) { - return model.get('title'); - }, - headTags: function() { - let model = this.modelFor(this.routeName); - return [{ - type: 'meta', - tagId: 'meta-description-tag', - attrs: { - name: 'description', - content: model.get('excerpt') - } - }]; - }, - model: function(params){ - return this.modelFor('event.archive.month').get('events').findBy('id', params.event_id); - }, - setupController: function(controller, model) { - this.controllerFor('event.archive.month').set('selected', model); - this._super.apply(this, arguments); - } -}); diff --git a/app/pods/event/archive/month/route.js b/app/pods/event/archive/month/route.js deleted file mode 100644 index add25752a6dc9b..00000000000000 --- a/app/pods/event/archive/month/route.js +++ /dev/null @@ -1,31 +0,0 @@ -import Ember from 'ember'; -import moment from 'moment'; - -export default Ember.Route.extend({ - titleToken: 'Archivo', - model: function(params) { - const date = { year: params.year, month: params.month }; - this.set('date', date); - - return this.store.query('event', date).then( - events => (Ember.Object.create({ - year: params.year, - month: params.month, - monthName: moment.months(parseInt(params.month) - 1), - events: events })) - ); - }, - actions: { - expand(event){ - this.transitionTo('event.archive.month.detail', this.get('date.year'), this.get('date.month'), event); - }, - - collapse(){ - this.transitionTo('event.archive.month', this.get('date.year'), this.get('date.month')); - }, - - willTransition(){ - this.controller.set('selected', null); - } - } -}); diff --git a/app/pods/event/archive/month/template.hbs b/app/pods/event/archive/month/template.hbs deleted file mode 100644 index 59b6c9104c6c6c..00000000000000 --- a/app/pods/event/archive/month/template.hbs +++ /dev/null @@ -1,17 +0,0 @@ -{{event/archive-dropdown-month dropdown-id="jq-dropdown-month" year=model.year}} -{{event/archive-dropdown-year dropdown-id="jq-dropdown-year" month=model.month}} - -{{#event/section-title}} -Archivo {{model.monthName}}, {{model.year}} -{{/event/section-title}} - -
    - {{#each model.events as |event| }} - {{event/event-row - item=event - selectedItem=selected - expandAction='expand' - collapseAction='collapse' - }} - {{/each}} -
    diff --git a/app/pods/event/archive/route.js b/app/pods/event/archive/route.js deleted file mode 100644 index 0883ec2c14aac0..00000000000000 --- a/app/pods/event/archive/route.js +++ /dev/null @@ -1,12 +0,0 @@ -import Ember from 'ember'; -import moment from 'moment'; - -export default Ember.Route.extend({ - beforeModel(transition) { - if(transition.targetName === 'event.archive.month.detail') { return;} - - var year = moment().format('YYYY'); - var month = moment().format('MM'); - this.transitionTo('event.archive.month', year, month); - } -}); diff --git a/app/pods/event/detail/route.js b/app/pods/event/detail/route.js deleted file mode 100644 index dd05e55dc56258..00000000000000 --- a/app/pods/event/detail/route.js +++ /dev/null @@ -1,7 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - model: function(params) { - return this.store.find('event', params.slug); - } -}); diff --git a/app/pods/event/detail/template.hbs b/app/pods/event/detail/template.hbs deleted file mode 100644 index 214e6af3415398..00000000000000 --- a/app/pods/event/detail/template.hbs +++ /dev/null @@ -1 +0,0 @@ -{{event/event-detail model=model}} diff --git a/app/pods/event/loading/template.hbs b/app/pods/event/loading/template.hbs deleted file mode 100644 index ae95060935ed72..00000000000000 --- a/app/pods/event/loading/template.hbs +++ /dev/null @@ -1 +0,0 @@ -{{event/section-title text="Leyendo eventos..."}} \ No newline at end of file diff --git a/app/pods/event/model.js b/app/pods/event/model.js deleted file mode 100644 index 61e4ef1016577d..00000000000000 --- a/app/pods/event/model.js +++ /dev/null @@ -1,61 +0,0 @@ -import Ember from 'ember'; -import DS from 'ember-data'; -import moment from 'moment'; - -export default DS.Model.extend({ - title: DS.attr('string'), - description: DS.attr('string'), - link: DS.attr('string'), - date: DS.attr('date'), - hashtag: DS.attr('string'), - slug: DS.attr('string'), - isPastEvent: Ember.computed('date', function(){ - if(this.get('date') < Date.now() ) { return true; } - return false; - }), - time: Ember.computed('date', { - get() { - if(Ember.isEmpty(this.get('date'))) { return null; } - return this.get('date').toISOString().substring(11,16); - }, - set(key, value) { - var timeRegex = /([01]\d|2[0-3]):([0-5]\d)/; - var isValid = timeRegex.test(value); - if (!isValid) { return '';} - var formattedDate = moment(this.get('date')).format('YYYY-MM-DD'); - var datetime = `${formattedDate} ${value}`; - this.set('date', new Date(moment.tz(datetime,'YYYY-MM-DD HH:mm','Europe/Madrid'))); - return value; - } - }), - excerpt: Ember.computed('description', function(){ - let exp = new RegExp('.*'); - return exp.exec(this.get('description'))[0]; - }), - isValid: Ember.computed('title', 'description', 'link', 'date', 'time', function(){ - var required = ['title', 'description', 'link', 'date', 'time' ]; - var isValid = required.every(function(property) { - return !Ember.isEmpty(this.get(property)); - }, this); - return isValid; - }), - calendarURL: Ember.computed('title', 'link', 'date', function() { - var zeroPad = function(number) { - return ("0" + number).slice(-2); - }; - var isoDate = function(date) { - return date.getUTCFullYear() + zeroPad(date.getUTCMonth() + 1) + zeroPad(date.getUTCDate()) + 'T' + - zeroPad(date.getUTCHours()) + zeroPad(date.getUTCMinutes()) + zeroPad(date.getUTCSeconds()) + 'Z'; - }; - - var title = encodeURIComponent(this.get('title')); - var details = encodeURIComponent('Más info: ' + this.get('link')); - var startDate = new Date(this.get('date')); - var endDate = new Date(this.get('date')); - endDate.setHours(endDate.getHours() + 1); - var dates = isoDate(startDate) + '/' + isoDate(endDate); - - var url = 'https://www.google.com/calendar/event?action=TEMPLATE&text=' + title + '&dates=' + dates + '&details='+ details; - return url; - }) -}); diff --git a/app/pods/event/new/controller.js b/app/pods/event/new/controller.js deleted file mode 100644 index f83ab3e64d9a19..00000000000000 --- a/app/pods/event/new/controller.js +++ /dev/null @@ -1,34 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Controller.extend({ - actions: { - saveEvent: function(newEvent){ - var self = this; - self.preSave(); - newEvent.save().then(function() { - self.set('model', self.store.createRecord('event')); - self.postSave(true); - }, function(){ - self.postSave(false); - }); - } - }, - preSave: function(){ - this.set('saved', false); - this.set('saveFailed', false); - this.set('isSaving', true); - }, - postSave: function(success) { - if(success) { - this.set('saved', true); - } else { - this.set('saveFailed', true); - } - this.set('isSaving', false); - window.scrollTo(0,0); - }, - reset: function() { - this.set('saved', false); - this.set('saveFailed', false); - } -}); diff --git a/app/pods/event/new/route.js b/app/pods/event/new/route.js deleted file mode 100644 index 587a51cfdde0a4..00000000000000 --- a/app/pods/event/new/route.js +++ /dev/null @@ -1,13 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - titleToken: 'Publicar evento', - model() { - return this.store.createRecord('event'); - }, - actions: { - willTransition: function(){ - this.controller.reset(); - } - }, -}); diff --git a/app/pods/event/new/template.hbs b/app/pods/event/new/template.hbs deleted file mode 100644 index c5900ce0987d77..00000000000000 --- a/app/pods/event/new/template.hbs +++ /dev/null @@ -1,21 +0,0 @@ -{{event/section-title text="Nuevo evento"}} - -

    -Si organizas un evento, taller, charla o quedada informal para fomentar una comunidad o compartir información de base tecnológica. Si quieres formar parte de VlcTechHub, da de alta tu evento.
    Si organizas una conferencia y quieres darla de alta en VLCTechHub debe tener un código de conducta. -

    - -{{#if saveFailed}} -
    -
    ¡Ups! Houston, tenemos un problema
    -
    No hemos podido crear el evento, por favor, revisa que los datos son correctos
    -
    -{{/if}} - -{{#if saved }} -
    -
    ¡Yuju! ¡Evento dado de alta!
    -
    Hemos dado de alta tu evento, pero ten en cuenta que la publicación no es inmediata.
    -
    -{{/if}} - -{{event/new-event-form event=model onSubmit=(action 'saveEvent') isSaving=isSaving}} diff --git a/app/pods/event/upcoming/controller.js b/app/pods/event/upcoming/controller.js deleted file mode 100644 index f72a9b903b47fc..00000000000000 --- a/app/pods/event/upcoming/controller.js +++ /dev/null @@ -1,16 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Controller.extend({ - queryParams: ['view'], - isListVisible: Ember.computed('view', function() { - return this.get('view') !== 'calendar'; - }), - isCalendarVisible: Ember.computed('view', function() { - return this.get('view') === 'calendar'; - }), - isAnnouncementVisible: Ember.computed(function() { - var endDate = new Date(2018, 5, 3); - var now = new Date(); - return now < endDate; - }) -}); diff --git a/app/pods/event/upcoming/route.js b/app/pods/event/upcoming/route.js deleted file mode 100644 index 5a12429eff09a9..00000000000000 --- a/app/pods/event/upcoming/route.js +++ /dev/null @@ -1,15 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - menu: Ember.inject.service(), - titleToken: 'Próximos eventos', - model: function(){ - return this.store.query('event', { 'category': 'next' }); - }, - activate() { - this.get('menu').set('actionComponent', 'common/create-event-button'); - }, - deactivate() { - this.get('menu').set('actionComponent', null); - } -}); diff --git a/app/pods/event/upcoming/template.hbs b/app/pods/event/upcoming/template.hbs deleted file mode 100644 index 8507cfffd4d52f..00000000000000 --- a/app/pods/event/upcoming/template.hbs +++ /dev/null @@ -1,40 +0,0 @@ - - -
    -
    - {{event/section-title text="Agenda"}} -
    -
    -
      -
    • - {{link-to 'Listado' 'event.upcoming' - (query-params view='list') - classNames='button -submenu'}} -
    • -
    • - {{link-to 'Calendario' 'event.upcoming' - (query-params view='calendar') - classNames='button -submenu'}} -
    • -
    -
    -
    - -{{#if isAnnouncementVisible}} -
    - - PSST! No te pierdas VLCTechFest el próximo 2 de junio, organizado por VLCTechHub! - -
    -{{/if}} - -{{event/event-list - events=model - isVisible=isListVisible -}} - -{{event/event-calendar - events=model - isVisible=isCalendarVisible -}} - diff --git a/app/pods/index/route.js b/app/pods/index/route.js deleted file mode 100644 index 605774c81f63b7..00000000000000 --- a/app/pods/index/route.js +++ /dev/null @@ -1,8 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - beforeModel: function() { - this.transitionTo('event.upcoming', {queryParams:{view: 'list'}}); - }, - model: function() {} -}); diff --git a/app/pods/job/list/controller.js b/app/pods/job/list/controller.js deleted file mode 100644 index ff224b0f158e12..00000000000000 --- a/app/pods/job/list/controller.js +++ /dev/null @@ -1,8 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Controller.extend({ - sortCriteria: ['published_at:desc'], - jobs: Ember.computed('model', function() { - return this.get('model').filterBy('isPublished').sortBy('published_at').reverse(); - }), -}); diff --git a/app/pods/job/list/detail/route.js b/app/pods/job/list/detail/route.js deleted file mode 100644 index 89f9725f9618ab..00000000000000 --- a/app/pods/job/list/detail/route.js +++ /dev/null @@ -1,25 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - titleToken: function(model) { - return model.get('title'); - }, - headTags: function() { - let model = this.modelFor(this.routeName); - return [{ - type: 'meta', - tagId: 'meta-description-tag', - attrs: { - name: 'description', - content: model.get('excerpt') - } - }]; - }, - model: function(params){ - return this.modelFor('job.list').findBy('id', params.job_id); - }, - setupController: function(controller, model) { - this.controllerFor('job.list').set('selected', model); - this._super.apply(this, arguments); - } -}); diff --git a/app/pods/job/list/route.js b/app/pods/job/list/route.js deleted file mode 100644 index 5a0ed1ed38b735..00000000000000 --- a/app/pods/job/list/route.js +++ /dev/null @@ -1,28 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - menu: Ember.inject.service(), - titleToken: function(){ - return 'Empleos tecnológicos'; - }, - headTags: function() { - return [{ - type: 'meta', - tagId: 'meta-description-tag', - attrs: { - name: 'description', - content: "VLCTechHub es el hub de eventos tecnológicos en Valencia. Encuentra tu nuevo empleo en VLCTechHub. Oferta empleos de software orientados a programadores, diseñadores, administradores de sistemas..." - } - }]; - }, - model: function() { - return this.modelFor('application').get('jobs'); - }, - activate() { - this.get('menu').set('actionComponent', 'common/create-job-button'); - }, - deactivate() { - this.get('menu').set('actionComponent', null); - this.controller.set('selected', null); - } -}); diff --git a/app/pods/job/list/template.hbs b/app/pods/job/list/template.hbs deleted file mode 100644 index 32042db3bb2c22..00000000000000 --- a/app/pods/job/list/template.hbs +++ /dev/null @@ -1,20 +0,0 @@ -{{event/section-title text="Empleo"}} - -{{#if jobs}} -
    - {{#each jobs as |job|}} - {{job/job-row - item=job - selectedItem=selected - }} - {{/each}} -
    -

    - ~ Ofertas publicadas en los últimos 30 días ~ -

    -{{else}} -
    -

    ¿Estás buscando perfiles técnicos para tu empresa?

    - {{#link-to 'job.new' class='button -primary'}}Da de alta una oferta{{/link-to}} -
    -{{/if}} diff --git a/app/pods/job/loading/template.hbs b/app/pods/job/loading/template.hbs deleted file mode 100644 index 6710131f09d462..00000000000000 --- a/app/pods/job/loading/template.hbs +++ /dev/null @@ -1 +0,0 @@ -{{event/section-title text="Leyendo ofertas..."}} diff --git a/app/pods/job/model.js b/app/pods/job/model.js deleted file mode 100644 index 948177f8ba01c1..00000000000000 --- a/app/pods/job/model.js +++ /dev/null @@ -1,24 +0,0 @@ -import DS from 'ember-data'; -import Ember from 'ember'; - -export default DS.Model.extend({ - title: DS.attr('string'), - description: DS.attr('string'), - company: DS.attr({'defaultValue': () => {return {}; } }), - link: DS.attr('string'), - tags: DS.attr({'defaultValue': () => [] }), - how_to_apply: DS.attr('string'), - published_at: DS.attr('date'), - salary: DS.attr('string'), - excerpt: Ember.computed('description', function(){ - let exp = new RegExp('.*'); - return exp.exec(this.get('description'))[0]; - }), - isValid: Ember.computed('title', 'description','company.name', 'company.link', 'contactEmail', 'salary', function() { - var requiredFields = ['title', 'description', 'company.name', 'company.link', 'contactEmail', 'salary']; - return requiredFields.every((key) => !Ember.isEmpty(this.get(key))); - }), - isPublished: Ember.computed.notEmpty('published_at'), - contactEmail: Ember.computed.alias('contact_email'), - contact_email: DS.attr('string') -}); diff --git a/app/pods/job/new/controller.js b/app/pods/job/new/controller.js deleted file mode 100644 index 262856dad56ac5..00000000000000 --- a/app/pods/job/new/controller.js +++ /dev/null @@ -1,37 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Controller.extend({ - saved: false, - saveFailed: false, - - saveJob: function() { - var job = this.get('model'); - return job.save() - .then(() => this.showSuccess()) - .then(() => this.resetModel()) - .catch(() => this.showFailure()); - }, - - resetModel: function() { - this.set('model', this.get('store').createRecord('job')); - }, - - showSuccess: function() { - this.showMessage('saved'); - }, - - showFailure: function() { - this.showMessage('saveFailed'); - }, - - showMessage: function(prop) { - this.hideMessages(); - this.set(prop, true); - window.scrollTo(0,0); - }, - - hideMessages: function(){ - this.set('saved', false); - this.set('saveFailed', false); - } -}); diff --git a/app/pods/job/new/route.js b/app/pods/job/new/route.js deleted file mode 100644 index d4cb7abe5da009..00000000000000 --- a/app/pods/job/new/route.js +++ /dev/null @@ -1,15 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - model() { - return this.store.createRecord('job'); - }, - - actions: { - willTransition() { - this.get('controller.model').rollbackAttributes(); - this.get('controller').hideMessages(); - } - } - -}); diff --git a/app/pods/job/new/template.hbs b/app/pods/job/new/template.hbs deleted file mode 100644 index 081b763d47798d..00000000000000 --- a/app/pods/job/new/template.hbs +++ /dev/null @@ -1,22 +0,0 @@ -{{event/section-title text="Nuevo empleo"}} - -

    -Recomendamos seguir esta guía para publicar. Revisamos cada oferta, ten en cuenta que la publicación no es inmediata. -

    - -{{#if saveFailed}} - -
    -
    ¡Ups! Houston, tenemos un problema
    -
    No hemos podido crear la oferta, por favor, revisa que los datos son correctos
    -
    -{{/if}} - -{{#if saved }} -
    -
    ¡Yuju! ¡Oferta dada de alta!
    -
    Hemos dado de alta tu oferta, pero ten en cuenta que la publicación no es inmediata.
    -
    -{{/if}} - -{{job/new-form job=model onSubmit=(action saveJob)}} diff --git a/app/resolver.js b/app/resolver.js deleted file mode 100644 index 2fb563d6c0488f..00000000000000 --- a/app/resolver.js +++ /dev/null @@ -1,3 +0,0 @@ -import Resolver from 'ember-resolver'; - -export default Resolver; diff --git a/app/router.js b/app/router.js deleted file mode 100644 index 080b60704279ed..00000000000000 --- a/app/router.js +++ /dev/null @@ -1,31 +0,0 @@ -import Ember from 'ember'; -import config from './config/environment'; - -var Router = Ember.Router.extend({ - location: config.locationType, - rootURL: config.rootURL -}); - -Router.map(function() { - this.route('index', {path: '/'}); - - this.route('event', { path: 'events' }, function(){ - this.route('archive', function(){ - this.route('month', { path: '/:year/:month'}, function(){ - this.route('detail', { path: '/:event_id'}); - }); - }); - this.route('new'); - this.route('upcoming'); - this.route('detail', { path: '/:slug' }); - }); - - this.route('job', function() { - this.route('list', { path: '/board' }, function() { - this.route('detail', { path: '/:job_id' }); - }); - this.route('new'); - }); -}); - -export default Router; diff --git a/app/services/menu.js b/app/services/menu.js deleted file mode 100644 index 21460a6caf3d84..00000000000000 --- a/app/services/menu.js +++ /dev/null @@ -1,5 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Service.extend({ - actionComponent: null -}); diff --git a/app/styles/_buttons.scss b/app/styles/_buttons.scss deleted file mode 100644 index 6d5ab69adc2e96..00000000000000 --- a/app/styles/_buttons.scss +++ /dev/null @@ -1,145 +0,0 @@ -.button { - font-size: 16px; - font-weight: bold; - cursor: pointer; - display: inline; - line-height: 1.125rem; - padding: .5rem 1rem; - height: auto; - text-decoration: none; - background: #fff; - color: #666; - border: 1px solid #ddd; - border-radius: 3px; - - &:hover { - text-decoration: none; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#1a000000',GradientType=0); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(40%, rgba(0, 0, 0, 0.05)), to(rgba(0, 0, 0, 0.1))); - background-image: -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05) 40%, rgba(0, 0, 0, 0.1)); - background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.1)); - background-image: -o-linear-gradient(transparent, rgba(0, 0, 0, 0.05) 40%, rgba(0, 0, 0, 0.1)); - background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.05) 40%, rgba(0, 0, 0, 0.1)); - - } -} -.button-menu-list { - display: flex; - > li { - margin-right: 20px; - } -} -.button { - &.-menu { - background: transparent; - color: #111; - border: 1px solid transparent; - } - &.-menu:hover { - border-bottom: 3px solid #ccc; - } - - &.-menu.active { - border-bottom: 3px solid #fa0; - } - - &.-submenu { - background: transparent; - border: 1px solid transparent; - color: #111; - font-weight: normal; - display: inline-block; - padding: 0; - padding-bottom: 2px; - border-radius: 0; - } - - &.-submenu:hover { - border-bottom: 2px solid #ccc; - } - - &.-submenu.active { - border-bottom: 2px solid #fa0; - } -} - -.button { - &.-primary { - color: #fff; - background-color: #fa0; - border-color: darken(#fa0, 3%); - - &:disabled { - opacity: 0.5; - } - } -} - -.button { - &.-link { - color: #888; - background-color: transparent; - - &:hover { - color: #444; - background-color: #ccc; - } - } -} - - -.button-ribbon { - display: block; - margin-bottom: 1.5rem; - @include breakpoint($screen-sm-min) { - display: flex; - justify-content: space-between; - margin-bottom: 0; - } -} - -.label { - border-radius: 1.25em; - padding: .3em .5em; - font-size: .65rem; - color: #fff; - background-color: #777; - text-align: center; - vertical-align: text-bottom; - white-space: nowrap; - line-height: 2.5em; -} - -.label { - &.-danger { - background-color: #ff4136; - } - &.-ghost { - background-color: transparent; - border: 1px solid #9E9E9E; - color: #9E9E9E; - } -} - -.new-item-link { - text-align: right; -} - -.actions { - margin-bottom: 1em; - - .button { - display: block; - margin-bottom: 1em; - } - - @include breakpoint($screen-sm-min) { - .button { - display: inline; - margin-right: 20px; - margin-bottom: 0px; - } - } - -} - diff --git a/app/styles/_expandable-list.scss b/app/styles/_expandable-list.scss deleted file mode 100644 index 2b3eb336d9e330..00000000000000 --- a/app/styles/_expandable-list.scss +++ /dev/null @@ -1,55 +0,0 @@ -.expandable-list { - padding: 0.5rem 1rem; - - header { - @include cf(); - } - - &.-expanded { - border-top: 5px solid #FFAA00; - background-color: whitesmoke; - box-shadow: 0px 8px 20px #9E9E9E; - - header { - margin-bottom: 20px; - } - } - - .who { - @include breakpoint($screen-sm-min) { - @include span(2/3); - } - } - - .when { - @include breakpoint($screen-sm-min) { - @include span(1/3); - } - } - - .job-title { - color: #111; - text-transform: uppercase; - letter-spacing: 0; - font-size: 1.25rem; - } - - .when { - @include breakpoint($screen-sm-min) { - text-align: right; - } - } - .source-link { - text-align: right; - margin-bottom: 1rem; - } - - .item-summary > div { - font-size: 1.5rem; - color: #9E9E9E; - } - - .item-summary { - margin-bottom: 20px; - } -} diff --git a/app/styles/_form.scss b/app/styles/_form.scss deleted file mode 100644 index 1e0f5ba92846c0..00000000000000 --- a/app/styles/_form.scss +++ /dev/null @@ -1,37 +0,0 @@ - -form { - padding: 2rem; - - label { - color: #4c4c4c; - vertical-align: middle; - } -} - - -.field:focus { - outline: 0; -} - -input.field, textarea.field { - border: none!important; - box-shadow: none!important; - border-bottom: 1px solid #ccc!important; - background-color: transparent; - width: 100%; - margin-bottom: 0.5rem; - display:block; - font-size: 1rem; -} - -.help-text { - color: #999; - margin-bottom: 2rem; - display: block; - font-size: 0.8rem; -} - -input[type=date], input[type=datetime-local], input[type=datetime], input[type=email], input[type=month], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], input[type=week] { - height: 2.25rem; - -webkit-appearance: none; -} diff --git a/app/styles/_reset.scss b/app/styles/_reset.scss deleted file mode 100644 index f0462aeddb492a..00000000000000 --- a/app/styles/_reset.scss +++ /dev/null @@ -1,46 +0,0 @@ -// http://meyerweb.com/eric/tools/css/reset/ -// v2.0 | 20110126 -// License: none (public domain) - -@mixin meyer-reset { - html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; - } - - // HTML5 display-role reset for older browsers - article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { - display: block; - } - body { - line-height: 1; - } - ol, ul { - list-style: none; - } - blockquote, q { - quotes: none; - } - blockquote { - &:before, &:after { - content: ""; - content: none; - } - } - q { - &:before, &:after { - content: ""; - content: none; - } - } - table { - border-collapse: collapse; - border-spacing: 0; - } -} - -@include meyer-reset; diff --git a/app/styles/_structure.scss b/app/styles/_structure.scss deleted file mode 100644 index 8c10e869c34e74..00000000000000 --- a/app/styles/_structure.scss +++ /dev/null @@ -1,128 +0,0 @@ - -body { - background: #ececec url('/img/bg.png'); -} - -.site { - display: flex; - flex-direction: column; - min-height: 100vh; -} - -main { - flex: 1 1 auto; - min-height: 0; - min-width: 0; -} - -.container { - max-width: 64rem; - margin-left: auto; - margin-right: auto; - margin-bottom: 2rem; - padding-left: 2em; - padding-right: 2em; -} - -.menu { - background-color: #f5f5f5; - border-bottom: 1px solid #ccc; - -} - - -.menu:after { - clear: both; - content: ""; - display: block; -} - -.menu.-mobile { - position: relative; - display: block; - @include breakpoint($screen-sm-min) { - display: none; - } - - & .logo { - padding-left: 1em; - padding-top: 0.5em; - padding-bottom: 0.5em; - - > img { - width:120px; - } - } - & .hamburger { - position: absolute; - top: 30px; - right: 10px; - & img { - width: 32px; - } - } -} - -.menu-options.-mobile { - position: absolute; - width: 100%; - z-index: 1; - background-color: white; - - display: block; - @include breakpoint($screen-sm-min) { - display: none; - } - - & li { - padding: 1em; - text-align: center; - border-bottom: 1px solid whitesmoke; - - & .active { - font-weight: bold; - } - } -} - - - -.footer { - background-color: #001f3f; - padding-top: 1rem; - padding-bottom: 1rem; - color: #ddd; - - a { - color: #ddd; - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } -} - -.footer { - - .grid { - @include cf(); - margin-left: 6em; - } - - .grid > ul { - @include col(1, $cycle: 1); - @include breakpoint($screen-sm-min) { - @include col(1/4, $cycle: 4); - } - } - - .list-header { - letter-spacing: 0; - text-transform: uppercase; - margin-bottom: 0.5rem; - } - - .list-item { - } -} diff --git a/app/styles/_typography.scss b/app/styles/_typography.scss deleted file mode 100644 index c34b1e52152fc1..00000000000000 --- a/app/styles/_typography.scss +++ /dev/null @@ -1,29 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Open+Sans); - -body { - font-size: 12pt; - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; - line-height: 1.5; - color: #111; -} - -a { - color: #000; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -a.link { - text-decoration: underline; -} - -strong { - font-weight: bold; -} - -p { - margin-bottom: 1rem; -} diff --git a/app/styles/_variables.scss b/app/styles/_variables.scss deleted file mode 100644 index c37f7c8d44884f..00000000000000 --- a/app/styles/_variables.scss +++ /dev/null @@ -1 +0,0 @@ -$screen-sm-min:768px; diff --git a/app/styles/app.scss b/app/styles/app.scss deleted file mode 100644 index e8428714c92d1d..00000000000000 --- a/app/styles/app.scss +++ /dev/null @@ -1,91 +0,0 @@ -@import 'jeet'; -@import 'breakpoint'; - -@import "reset"; -@import "variables"; -@import "structure"; -@import "typography"; -@import "buttons"; -@import "form"; -@import "expandable-list"; -@import "pod-styles"; - -.box { - padding: 2em; - margin-bottom: 1em; - border-radius: 3px; - border: 1px solid rgba(0, 0, 0, 0.125); - background-color: white; - - &.-expandable-list { - padding: 0; - } -} - -.job-info { - text-align: center; - opacity: .5; - font-size: .875rem; -} - -.job-empty { - text-align: center; - font-size: 1.5em; -} - - -.dropdown { - padding: 5px; - - &:hover { - background-color: #ccc; - border-radius: 10px; - cursor: pointer; - } - - &:after { - content: '↓'; - font-size: .5em; - margin-left: 5px; - } -} - -.alert { - border: 1px solid black; - border-radius: 3px; - margin-bottom: 1em; - padding: 0.5em; - - &.-danger { - color: white; - background-color: #ff4124; - border-color: darken(#ff4124, 15%); - } - - &.-confirm { - color: white; - background-color: #00b31e; - border-color: darken(#00b31e, 15%); - } -} - -.monthly { - max-width: 600px; - margin: 0 auto; -} - -.announcement { - padding: 15px; - background: #fa0; - @include breakpoint($screen-sm-min) { - clip-path: polygon(100% 0, 97% 50%, 100% 100%, 0% 100%, 3% 50%, 0% 0%); - } - font-family: "font_condensed"; - letter-spacing: 0.12em; - font-size: 19px; - display: flex; - justify-content: center; - align-items: center; - width: 100%; - margin-bottom: 20px; -} diff --git a/avatar_vlctechhub.png b/avatar_vlctechhub.png deleted file mode 100644 index 545bb53cd3252e..00000000000000 Binary files a/avatar_vlctechhub.png and /dev/null differ diff --git a/bower.json b/bower.json deleted file mode 100644 index 4f7d0ed6b904c1..00000000000000 --- a/bower.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "vlc-tech-hub", - "dependencies": { - "moment-timezone": ">= 0.1.0", - "pikaday": "~1.5.1", - "jquery-dropdown": "~2.0.2", - "jt.timepicker": "https://github.com/jonthornton/jquery-timepicker.git#~1.8.8", - "autosize": "~3.0.15" - }, - "devDependencies": { - } -} diff --git a/build.js b/build.js new file mode 100644 index 00000000000000..1e91dcf3924ce8 --- /dev/null +++ b/build.js @@ -0,0 +1,127 @@ +const Metalsmith = require('metalsmith') +const markdown = require('metalsmith-markdown') +const layouts = require('metalsmith-layouts') +const permalinks = require('metalsmith-permalinks') +const inplace = require('metalsmith-in-place') +const collections = require('metalsmith-collections') +const uglify = require('metalsmith-uglify') +const sass = require('metalsmith-sass') +const writemetadata = require('metalsmith-writemetadata') +const nunjucksDate = require('nunjucks-moment-timezone-filter') +const moment = require('moment') +const git = require('git-rev-sync') +const rss = require('./lib/rss.js') +const events = require('./lib/events.js') +const jobs = require('./lib/jobs.js') + +moment.locale('es') + +function fromNow(date) { + return moment(date).fromNow() +} + +const devBuild = (process.env.NODE_ENV || '').trim().toLowerCase() !== 'production' +const apiRoot = devBuild ? 'http://localhost:5000/v2' : 'https://api.vlctechhub.org/v2' +const version = git.short() + +Metalsmith(__dirname) + .metadata({ + seo: { + ogTitle: 'VLCTechHub', + ogDescription: + 'VLCTechHub es el hub de eventos y empleo tecnológico en Valencia: eventos de programación, coding dojos, talleres, workshops o quedadas informales para fomentar una comunidad o compartir información de base tecnológica en Valencia.', + ogUrl: 'https://vlctechhub.org/' + }, + apiRoot: apiRoot, + version: git.short(), + nonce: Buffer.from(Math.random().toString()).toString('base64') + }) + .source('./data') + .destination('./dist') + .clean(true) + .use(events({ apiRoot: apiRoot, collection: 'events' })) + .use(jobs({ apiRoot: apiRoot, collection: 'jobs' })) + .use( + collections({ + jobs: { sortBy: 'publishedAt', reverse: true }, + events: { sortBy: 'startDate' } + }) + ) + .use(markdown({ sanitize: true })) + .use( + inplace({ + engineOptions: { + filters: { date: nunjucksDate.dateFilter, newDate: nunjucksDate.newDate, fromNow: fromNow } + } + }) + ) + .use( + layouts({ + engineOptions: { + filters: { date: nunjucksDate.dateFilter, newDate: nunjucksDate.newDate, fromNow: fromNow } + }, + directory: 'templates/' + }) + ) + .use(permalinks({})) + .use( + sass({ + outputDir: 'assets/css/' + }) + ) + .use((files, metalsmith, done) => { + //fingerprint css based on commit + files[`assets/css/vlctechhub-${version}-min.css`] = files['assets/css/main.css'] + done() + }) + .use( + uglify({ + // build + fingerprint js based on commmit + es: true, + concat: { + file: `vlctechhub-${version}-min.js`, + root: 'assets/js' + }, + removeOriginal: true + }) + ) + .use( + rss({ + collection: 'events', + description: 'El feed de los próximos eventos.', + customTitleFn: item => { + let title = moment(item.titlte).format('dddd DD [de] MMMM') + ' | ' + item.title + if (item.twitter.handle) { + title = title + ' por @' + item.twitter.handle + } + return title[0].toUpperCase() + title.slice(1) + }, + pubDateAttributeName: 'startDate', + destination: 'events/upcoming/feed.xml' + }) + ) + .use( + rss({ + collection: 'jobs', + description: 'El feed de las ofertas de trabajo.', + customTitleFn: item => { + let title = item.title + ' | ' + item.companyName + return title + }, + pubDateAttributeName: 'publishedAt', + destination: 'job/board/feed.xml' + }) + ) + .use( + writemetadata({ + collections: { + events: { output: { path: '.events-published.json' }, ignorekeys: ['contents', 'next', 'previous'] }, + jobs: { output: { path: '.jobs-published.json' }, ignorekeys: ['contents', 'next', 'previous'] } + } + }) + ) + .build(function(err) { + if (err) { + throw err + } + }) diff --git a/config/environment.js b/config/environment.js deleted file mode 100644 index 01d77be9892f02..00000000000000 --- a/config/environment.js +++ /dev/null @@ -1,71 +0,0 @@ -/* jshint node: true */ - -module.exports = function(environment) { - var ENV = { - modulePrefix: 'vlc-tech-hub', - podModulePrefix: 'vlc-tech-hub/pods', - environment: environment, - rootURL: '/', - locationType: 'auto', - EmberENV: { - FEATURES: { - // Here you can enable experimental features on an ember canary build - // e.g. 'with-controller': true - }, - EXTEND_PROTOTYPES: { - // Prevent Ember Data from overriding Date.parse. - Date: false - } - }, - APP: { - // Here you can pass flags/options to your application instance - // when it is created - API_HOST: 'https://vlctechhub-api.herokuapp.com' - } - }; - - if (environment === 'development') { - ENV.APP.API_HOST = 'http://localhost:5000'; - - ENV.APP.LOG_RESOLVER = false; - ENV.APP.LOG_ACTIVE_GENERATION = false; - ENV.APP.LOG_TRANSITIONS = false; - ENV.APP.LOG_TRANSITIONS_INTERNAL = false; - ENV.APP.LOG_VIEW_LOOKUPS = false; - } - - if (environment === 'test') { - // Testem prefers this... - ENV.rootURL = '/'; - ENV.locationType = 'none'; - - ENV.APP.API_HOST = 'http://localhost:4200'; - - // keep test console output quieter - ENV.APP.LOG_ACTIVE_GENERATION = false; - ENV.APP.LOG_VIEW_LOOKUPS = false; - - ENV.APP.rootElement = '#ember-testing'; - } - - if (environment === 'production') { - - } - - ENV.contentSecurityPolicy = { - 'default-src': "'none'", - 'script-src': "'self'", - 'font-src': "'self'", - 'connect-src': "'self' vlctechhub-api.herokuapp.com localhost:5000", - 'img-src': "'self' data:", - 'style-src': "'self' 'unsafe-inline'", - 'media-src': "'self'" - }; - - ENV.moment = { - includeLocales: ['es'], - includeTimezone: 'all' - }; - - return ENV; -}; diff --git a/config/tracking.js b/config/tracking.js deleted file mode 100644 index e42b04fd2250a9..00000000000000 --- a/config/tracking.js +++ /dev/null @@ -1,17 +0,0 @@ -(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ -(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), -m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) -})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - -ga('create', 'UA-27446417-1', 'auto'); -ga('send', 'pageview'); - -var _rollbarConfig = { - accessToken: "93868918054f4f18972c272b8f7d7592", - captureUncaught: true, - payload: { - environment: "production" - } -}; -!function(r){function o(e){if(n[e])return n[e].exports;var t=n[e]={exports:{},id:e,loaded:!1};return r[e].call(t.exports,t,t.exports,o),t.loaded=!0,t.exports}var n={};return o.m=r,o.c=n,o.p="",o(0)}([function(r,o,n){"use strict";var e=n(1),t=n(4);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.0.4/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=e.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=e.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,o,n){"use strict";function e(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}function t(r,o){this.options=r,this._rollbarOldOnError=null;var n=s++;this.shimId=function(){return n},window&&window._rollbarShims&&(window._rollbarShims[n]={handler:o,messages:[]})}function a(r,o){var n=o.globalAlias||"Rollbar";if("object"==typeof r[n])return r[n];r._rollbarShims={},r._rollbarWrappedError=null;var t=new d(o);return e(function(){return o.captureUncaught&&(t._rollbarOldOnError=r.onerror,i.captureUncaughtExceptions(r,t,!0),i.wrapGlobals(r,t,!0)),o.captureUnhandledRejections&&i.captureUnhandledRejections(r,t,!0),r[n]=t,t})()}function l(r){return e(function(){var o=this,n=Array.prototype.slice.call(arguments,0),e={shim:o,method:r,args:n,ts:new Date};window._rollbarShims[this.shimId()].messages.push(e)})}var i=n(2),s=0,c=n(3),p=function(r,o){return new t(r,o)},d=c.bind(null,p);t.prototype.loadFull=function(r,o,n,t,a){var l=function(){var o;if(void 0===r._rollbarDidLoad){o=new Error("rollbar.js did not load");for(var n,e,t,l,i=0;n=r._rollbarShims[i++];)for(n=n.messages||[];e=n.shift();)for(t=e.args||[],i=0;i label { + display: block; + margin-bottom: $space-small; + text-transform: uppercase; + font-weight: bold; + } + + .hint { + display: block; + margin-top: $space-small; + color: $text-color-secondary; + font-size: 0.9rem; + } +} + +input[type='text'], +input[type='time'], +input[type='date'], +textarea, +fieldset { + padding: $space-small; + width: 100%; + border: 3px solid $black; + + &:focus { + outline: none; + border: 3px solid $brand-color; + } + + &:invalid { + box-shadow: none; + } +} + +form[data-submit-attempted='true'] { + input[type='text'], + input[type='time'], + input[type='date'], + textarea, + fieldset { + &:invalid { + border: 3px solid firebrick; + box-shadow: none; + } + &:focus:invalid { + border: 3px solid $brand-color; + } + } +} + +.notification { + padding: 2rem 1rem; + color: #111; + &.success { + background: #a9e7bb; + border-left: 5px solid #42a85f; + } + &.error { + background: #fca7a0; + border-left: 5px solid #b82e24; + } +} diff --git a/data/assets/css/components/_tag.scss b/data/assets/css/components/_tag.scss new file mode 100644 index 00000000000000..988ca3b1acd60c --- /dev/null +++ b/data/assets/css/components/_tag.scss @@ -0,0 +1,9 @@ +.tag { + padding: 0.15rem 0.25rem; + border: 1px solid $brand-color; + border-radius: 3px; + font-size: 0.75rem; + color: $text-color-secondary; + text-transform: lowercase; + white-space: nowrap; +} diff --git a/data/assets/css/layout/_footer.scss b/data/assets/css/layout/_footer.scss new file mode 100644 index 00000000000000..353cde201e6ab0 --- /dev/null +++ b/data/assets/css/layout/_footer.scss @@ -0,0 +1,45 @@ +.main-footer { + display: none; + + @include size-medium { + display: block; + + margin-top: $space-large; + margin-bottom: $space-large; + + .footer-content { + display: flex; + justify-content: space-evenly; + flex-wrap: wrap; + border-top: 3px solid black; + margin: 0 auto; + padding-top: $space-large; + max-width: 73rem; + width: 100%; + } + + a { + @include on-event { + color: $brand-color; + } + } + + h1 { + font-size: 1em; + font-weight: bold; + margin-bottom: $space-medium; + } + + ul, + ul li { + margin: 0; + padding: 0; + text-indent: 0; + list-style: none; + } + + ul li { + margin-bottom: $space-small; + } + } +} diff --git a/data/assets/css/layout/_header.scss b/data/assets/css/layout/_header.scss new file mode 100644 index 00000000000000..3376e4287ad5ee --- /dev/null +++ b/data/assets/css/layout/_header.scss @@ -0,0 +1,62 @@ +.main-header { + display: flex; + padding: $space-medium $space-large $space-medium $space-large; + align-items: center; + + .logo img { + width: 50%; + height: auto; + + @include size-medium { + width: 120px; + height: 55px; + } + } + + ul { + display: none; + } + + @include size-medium { + ul { + display: block; + } + + ul, + ul li { + margin: 0; + padding: 0; + text-indent: 0; + list-style: none; + } + + nav ul li { + display: inline; + margin-left: $space-large; + padding: $space-small; + text-transform: uppercase; + font-weight: bold; + + a { + color: $text-color; + padding: 4px 8px; + transition: background-color 120ms ease-in-out; + @include on-event { + background-color: $brand-color; + } + } + + &.current a { + background-color: $brand-color; + } + } + + .social-links { + margin-left: auto; + + li { + display: inline; + } + } + } +} diff --git a/data/assets/css/main.scss b/data/assets/css/main.scss new file mode 100644 index 00000000000000..37e5c1bf500ed1 --- /dev/null +++ b/data/assets/css/main.scss @@ -0,0 +1,11 @@ +@charset 'UTF-8'; + +@import 'abstract/functions', 'abstract/variables', 'abstract/mixins'; + +@import 'base/reset', 'base/base', 'base/fonts', 'base/typography'; + +@import 'layout/header', 'layout/footer'; + +@import 'components/button', 'components/event-summary', 'components/form', 'components/tag'; + +@import 'pages/event-new', 'pages/event-next', 'pages/event', 'pages/job-board', 'pages/job-new', 'pages/job'; diff --git a/data/assets/css/pages/_event-new.scss b/data/assets/css/pages/_event-new.scss new file mode 100644 index 00000000000000..7a0ab2d1393293 --- /dev/null +++ b/data/assets/css/pages/_event-new.scss @@ -0,0 +1,5 @@ +#new-event { + .notification { + display: none; + } +} diff --git a/data/assets/css/pages/_event-next.scss b/data/assets/css/pages/_event-next.scss new file mode 100644 index 00000000000000..f1b4edd53c6e4c --- /dev/null +++ b/data/assets/css/pages/_event-next.scss @@ -0,0 +1,19 @@ +#next-events { + > header { + display: flex; + justify-content: space-between; + align-items: baseline; + flex-direction: column-reverse; + + @include size-medium { + flex-direction: row; + } + + .button { + margin: 4rem 0 1.5rem 0; + @include size-medium { + margin: 0; + } + } + } +} diff --git a/data/assets/css/pages/_event.scss b/data/assets/css/pages/_event.scss new file mode 100644 index 00000000000000..767eecc83eccca --- /dev/null +++ b/data/assets/css/pages/_event.scss @@ -0,0 +1,72 @@ +#event-page { + display: grid; + width: 100%; + + grid-template-areas: + 'header' + 'details' + 'description'; + + @include size-medium { + grid-template-areas: + 'header header' + 'details description'; + grid-template-columns: 1/3fr 2/3fr; + } + + header { + grid-area: header; + padding-bottom: $space-large; + margin-bottom: $space-large; + border-bottom: 3px solid black; + h1 { + text-transform: uppercase; + } + } + + .event-details { + grid-area: details; + margin-bottom: $space-medium; + text-align: center; + + @include size-medium { + padding-right: $space-large; + border-right: 1px solid black; + text-align: left; + } + + img { + width: 100%; + max-width: 300px; + } + + .details { + display: none; + @include size-medium { + display: block; + margin: $space-larger auto; + font-weight: bold; + max-width: 300px; + text-align: left; + } + } + } + + .event-description { + grid-area: description; + + @include size-medium { + margin-left: $space-large; + } + + p:first-child { + margin-top: 0; + } + } + + .actions .button { + display: block; + width: 100%; + margin: $space-medium 0; + } +} diff --git a/data/assets/css/pages/_job-board.scss b/data/assets/css/pages/_job-board.scss new file mode 100644 index 00000000000000..927d78c645338d --- /dev/null +++ b/data/assets/css/pages/_job-board.scss @@ -0,0 +1,49 @@ +#job-board { + > header { + display: flex; + justify-content: space-between; + align-items: baseline; + flex-direction: column-reverse; + + @include size-medium { + flex-direction: row; + } + + .button { + margin: 4rem 0 1.5rem 0; + @include size-medium { + margin: 0; + } + } + } + + .job-detail { + padding-bottom: $space-large; + margin-bottom: $space-medium; + border-bottom: 3px solid black; + + header p { + font-size: 0.9rem; + } + header a { + text-transform: uppercase; + font-weight: bold; + font-size: 1.1rem; + } + + .freshness { + font-size: 0.7rem; + color: $text-color-secondary; + text-align: right; + } + + .tags { + margin-top: $space-medium; + } + } + + .job-detail:last-child { + border-bottom: none; + margin-bottom: none; + } +} diff --git a/data/assets/css/pages/_job-new.scss b/data/assets/css/pages/_job-new.scss new file mode 100644 index 00000000000000..72bb72844a9943 --- /dev/null +++ b/data/assets/css/pages/_job-new.scss @@ -0,0 +1,5 @@ +#new-job { + .notification { + display: none; + } +} diff --git a/data/assets/css/pages/_job.scss b/data/assets/css/pages/_job.scss new file mode 100644 index 00000000000000..a19b057c320dc9 --- /dev/null +++ b/data/assets/css/pages/_job.scss @@ -0,0 +1,26 @@ +#job-page { + header { + padding-bottom: $space-large; + margin-bottom: $space-large; + border-bottom: 3px solid black; + + h1 { + text-transform: uppercase; + } + } + + .job-description { + column-width: 25rem; + column-gap: 4em; + column-rule: 1px solid black; + + code { + display: block; + overflow: auto; + } + + section { + break-inside: avoid; + } + } +} diff --git a/public/favicon/android-chrome-144x144.png b/data/assets/favicon/android-chrome-144x144.png similarity index 100% rename from public/favicon/android-chrome-144x144.png rename to data/assets/favicon/android-chrome-144x144.png diff --git a/public/favicon/android-chrome-192x192.png b/data/assets/favicon/android-chrome-192x192.png similarity index 100% rename from public/favicon/android-chrome-192x192.png rename to data/assets/favicon/android-chrome-192x192.png diff --git a/public/favicon/android-chrome-36x36.png b/data/assets/favicon/android-chrome-36x36.png similarity index 100% rename from public/favicon/android-chrome-36x36.png rename to data/assets/favicon/android-chrome-36x36.png diff --git a/public/favicon/android-chrome-48x48.png b/data/assets/favicon/android-chrome-48x48.png similarity index 100% rename from public/favicon/android-chrome-48x48.png rename to data/assets/favicon/android-chrome-48x48.png diff --git a/public/favicon/android-chrome-72x72.png b/data/assets/favicon/android-chrome-72x72.png similarity index 100% rename from public/favicon/android-chrome-72x72.png rename to data/assets/favicon/android-chrome-72x72.png diff --git a/public/favicon/android-chrome-96x96.png b/data/assets/favicon/android-chrome-96x96.png similarity index 100% rename from public/favicon/android-chrome-96x96.png rename to data/assets/favicon/android-chrome-96x96.png diff --git a/public/favicon/apple-touch-icon-114x114.png b/data/assets/favicon/apple-touch-icon-114x114.png similarity index 100% rename from public/favicon/apple-touch-icon-114x114.png rename to data/assets/favicon/apple-touch-icon-114x114.png diff --git a/public/favicon/apple-touch-icon-120x120.png b/data/assets/favicon/apple-touch-icon-120x120.png similarity index 100% rename from public/favicon/apple-touch-icon-120x120.png rename to data/assets/favicon/apple-touch-icon-120x120.png diff --git a/public/favicon/apple-touch-icon-144x144.png b/data/assets/favicon/apple-touch-icon-144x144.png similarity index 100% rename from public/favicon/apple-touch-icon-144x144.png rename to data/assets/favicon/apple-touch-icon-144x144.png diff --git a/public/favicon/apple-touch-icon-152x152.png b/data/assets/favicon/apple-touch-icon-152x152.png similarity index 100% rename from public/favicon/apple-touch-icon-152x152.png rename to data/assets/favicon/apple-touch-icon-152x152.png diff --git a/public/favicon/apple-touch-icon-180x180.png b/data/assets/favicon/apple-touch-icon-180x180.png similarity index 100% rename from public/favicon/apple-touch-icon-180x180.png rename to data/assets/favicon/apple-touch-icon-180x180.png diff --git a/public/favicon/apple-touch-icon-57x57.png b/data/assets/favicon/apple-touch-icon-57x57.png similarity index 100% rename from public/favicon/apple-touch-icon-57x57.png rename to data/assets/favicon/apple-touch-icon-57x57.png diff --git a/public/favicon/apple-touch-icon-60x60.png b/data/assets/favicon/apple-touch-icon-60x60.png similarity index 100% rename from public/favicon/apple-touch-icon-60x60.png rename to data/assets/favicon/apple-touch-icon-60x60.png diff --git a/public/favicon/apple-touch-icon-72x72.png b/data/assets/favicon/apple-touch-icon-72x72.png similarity index 100% rename from public/favicon/apple-touch-icon-72x72.png rename to data/assets/favicon/apple-touch-icon-72x72.png diff --git a/public/favicon/apple-touch-icon-76x76.png b/data/assets/favicon/apple-touch-icon-76x76.png similarity index 100% rename from public/favicon/apple-touch-icon-76x76.png rename to data/assets/favicon/apple-touch-icon-76x76.png diff --git a/public/favicon/apple-touch-icon-precomposed.png b/data/assets/favicon/apple-touch-icon-precomposed.png similarity index 100% rename from public/favicon/apple-touch-icon-precomposed.png rename to data/assets/favicon/apple-touch-icon-precomposed.png diff --git a/public/favicon/apple-touch-icon.png b/data/assets/favicon/apple-touch-icon.png similarity index 100% rename from public/favicon/apple-touch-icon.png rename to data/assets/favicon/apple-touch-icon.png diff --git a/data/assets/favicon/browserconfig.xml b/data/assets/favicon/browserconfig.xml new file mode 100644 index 00000000000000..0114bd94676af9 --- /dev/null +++ b/data/assets/favicon/browserconfig.xml @@ -0,0 +1,12 @@ + + + + + + + + + #da532c + + + diff --git a/public/favicon/favicon-16x16.png b/data/assets/favicon/favicon-16x16.png similarity index 100% rename from public/favicon/favicon-16x16.png rename to data/assets/favicon/favicon-16x16.png diff --git a/public/favicon/favicon-32x32.png b/data/assets/favicon/favicon-32x32.png similarity index 100% rename from public/favicon/favicon-32x32.png rename to data/assets/favicon/favicon-32x32.png diff --git a/public/favicon/favicon-96x96.png b/data/assets/favicon/favicon-96x96.png similarity index 100% rename from public/favicon/favicon-96x96.png rename to data/assets/favicon/favicon-96x96.png diff --git a/public/favicon/favicon.ico b/data/assets/favicon/favicon.ico similarity index 100% rename from public/favicon/favicon.ico rename to data/assets/favicon/favicon.ico diff --git a/data/assets/favicon/manifest.json b/data/assets/favicon/manifest.json new file mode 100644 index 00000000000000..80e9d67f9227c0 --- /dev/null +++ b/data/assets/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "VLCTechHub", + "icons": [ + { + "src": "/favicon/android-chrome-36x36.png", + "sizes": "36x36", + "type": "image/png", + "density": 0.75 + }, + { + "src": "/favicon/android-chrome-48x48.png", + "sizes": "48x48", + "type": "image/png", + "density": 1 + }, + { + "src": "/favicon/android-chrome-72x72.png", + "sizes": "72x72", + "type": "image/png", + "density": 1.5 + }, + { + "src": "/favicon/android-chrome-96x96.png", + "sizes": "96x96", + "type": "image/png", + "density": 2 + }, + { + "src": "/favicon/android-chrome-144x144.png", + "sizes": "144x144", + "type": "image/png", + "density": 3 + }, + { + "src": "/favicon/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png", + "density": 4 + } + ] +} diff --git a/public/favicon/mstile-144x144.png b/data/assets/favicon/mstile-144x144.png similarity index 100% rename from public/favicon/mstile-144x144.png rename to data/assets/favicon/mstile-144x144.png diff --git a/public/favicon/mstile-150x150.png b/data/assets/favicon/mstile-150x150.png similarity index 100% rename from public/favicon/mstile-150x150.png rename to data/assets/favicon/mstile-150x150.png diff --git a/public/favicon/mstile-310x150.png b/data/assets/favicon/mstile-310x150.png similarity index 100% rename from public/favicon/mstile-310x150.png rename to data/assets/favicon/mstile-310x150.png diff --git a/public/favicon/mstile-310x310.png b/data/assets/favicon/mstile-310x310.png similarity index 100% rename from public/favicon/mstile-310x310.png rename to data/assets/favicon/mstile-310x310.png diff --git a/public/favicon/mstile-70x70.png b/data/assets/favicon/mstile-70x70.png similarity index 100% rename from public/favicon/mstile-70x70.png rename to data/assets/favicon/mstile-70x70.png diff --git a/public/favicon/safari-pinned-tab.svg b/data/assets/favicon/safari-pinned-tab.svg similarity index 100% rename from public/favicon/safari-pinned-tab.svg rename to data/assets/favicon/safari-pinned-tab.svg diff --git a/data/assets/fonts/OpenSans-Bold.ttf b/data/assets/fonts/OpenSans-Bold.ttf new file mode 100644 index 00000000000000..efdd5e84a0397e Binary files /dev/null and b/data/assets/fonts/OpenSans-Bold.ttf differ diff --git a/data/assets/fonts/OpenSans-ExtraBold.ttf b/data/assets/fonts/OpenSans-ExtraBold.ttf new file mode 100644 index 00000000000000..67fcf0fb2af0c0 Binary files /dev/null and b/data/assets/fonts/OpenSans-ExtraBold.ttf differ diff --git a/data/assets/fonts/OpenSans-Light.ttf b/data/assets/fonts/OpenSans-Light.ttf new file mode 100644 index 00000000000000..6580d3a169e895 Binary files /dev/null and b/data/assets/fonts/OpenSans-Light.ttf differ diff --git a/data/assets/fonts/OpenSans-Regular.ttf b/data/assets/fonts/OpenSans-Regular.ttf new file mode 100644 index 00000000000000..29bfd35a2bfdd9 Binary files /dev/null and b/data/assets/fonts/OpenSans-Regular.ttf differ diff --git a/public/img/title.png b/data/assets/img/vlctechhub.png similarity index 100% rename from public/img/title.png rename to data/assets/img/vlctechhub.png diff --git a/data/assets/js/events-new.js b/data/assets/js/events-new.js new file mode 100644 index 00000000000000..cb6a943f1c9f9e --- /dev/null +++ b/data/assets/js/events-new.js @@ -0,0 +1,105 @@ +Site.Events = Site.Events || {} +Site.Events.New = {} +Site.Events.New.init = function() { + let DST = { + 2019: { start: new Date(2019, 2, 31), end: new Date(2019, 9, 27) }, + 2020: { start: new Date(2020, 2, 29), end: new Date(2020, 9, 25) }, + 2021: { start: new Date(2021, 2, 28), end: new Date(2021, 9, 31) }, + 2022: { start: new Date(2022, 2, 27), end: new Date(2022, 9, 30) }, + 2023: { start: new Date(2023, 2, 26), end: new Date(2023, 9, 29) }, + 2024: { start: new Date(2024, 2, 31), end: new Date(2024, 9, 27) }, + 2025: { start: new Date(2025, 2, 30), end: new Date(2025, 9, 26) }, + 2026: { start: new Date(2026, 2, 29), end: new Date(2026, 9, 25) }, + 2027: { start: new Date(2027, 2, 28), end: new Date(2027, 9, 31) }, + 2028: { start: new Date(2028, 2, 26), end: new Date(2028, 9, 29) }, + 2029: { start: new Date(2029, 2, 25), end: new Date(2029, 9, 28) } + } + + function $E(selector) { + return document.querySelector(selector) + } + + function getUTCOffset(date) { + let utcOffset = 1 + + let dst = DST[date.getUTCFullYear()] + if (dst && date > dst.start && date < dst.end) { + utcOffset = 2 + } + return utcOffset + } + + function buildEventDateTime() { + let date = $E('#startDate').value + let time = $E('#startTime').value + let offset = getUTCOffset(new Date(date)) + return `${date}T${time}+0${offset}:00` + } + + function buildEventAPIData() { + let data = { + title: $E('#title').value, + description: $E('#description').value, + link: $E('#sourceUrl').value, + hashtag: $E('#hashtag').value, + date: buildEventDateTime() + } + return data + } + + function clearForm() { + let fields = ['#title', '#description', '#startDate', '#startTime', '#sourceUrl', '#hashtag'] + fields.forEach(field => { + $E(field).value = '' + }) + $form.removeAttribute('data-submit-attempted') + } + + function showValidationErrors() { + $form.setAttribute('data-submit-attempted', true) + $form.querySelector(':invalid').focus() + } + + function showOKMessage() { + $E('.notification.success').style.display = 'block' + $E('.notification.error').style.display = 'none' + $E('header .title').scrollIntoView({ behaviour: 'smooth', block: 'end' }) + } + + function showKOMessage() { + $E('.notification.success').style.display = 'none' + $E('.notification.error').style.display = 'block' + $E('header .title').scrollIntoView({ behaviour: 'smooth', block: 'end' }) + } + + function submitEvent() { + if (!$form.checkValidity()) { + showValidationErrors() + return false + } + + fetch(Site.API_ROOT + '/events/', { + method: 'POST', + mode: 'cors', + cache: 'no-cache', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(buildEventAPIData()) + }) + .then(response => { + if (!response.ok) { + throw new Error('Response not ok') + } + }) + .then(() => { + clearForm() + showOKMessage() + }) + .catch(() => { + showKOMessage() + }) + return false + } + + let $form = $E('#new-event form') + $form.querySelector('button[data-type="submit"]').addEventListener('click', submitEvent) +} diff --git a/data/assets/js/job-new.js b/data/assets/js/job-new.js new file mode 100644 index 00000000000000..6570169b7c3cfd --- /dev/null +++ b/data/assets/js/job-new.js @@ -0,0 +1,92 @@ +Site.Job = Site.Job || {} +Site.Job.New = {} +Site.Job.New.init = function() { + function $E(selector) { + return document.querySelector(selector) + } + + function buildJobAPIData() { + let data = { + title: $E('#title').value, + description: $E('#description').value, + how_to_apply: $E('#howToApply').value, + link: $E('#sourceUrl').value, + salary: $E('#salary').value, + company: { + name: $E('#companyName').value, + link: $E('#companyWeb').value, + twitter: $E('#companyTwitter').value + }, + tags: ($E('#keywords').value || '').split(','), + contact_email: $E('#companyContact').value + } + return data + } + + function clearForm() { + let fields = [ + '#title', + '#description', + '#keywords', + '#salary', + '#howToApply', + '#sourceUrl', + '#companyName', + '#companyWeb', + '#companyTwitter', + '#companyContact' + ] + fields.forEach(field => { + $E(field).value = '' + }) + $form.removeAttribute('data-submit-attempted') + } + + function showValidationErrors() { + $form.setAttribute('data-submit-attempted', true) + $form.querySelector(':invalid').focus() + } + + function showOKMessage() { + $E('.notification.success').style.display = 'block' + $E('.notification.error').style.display = 'none' + $E('header .title').scrollIntoView({ behaviour: 'smooth', block: 'end' }) + } + + function showKOMessage() { + $E('.notification.success').style.display = 'none' + $E('.notification.error').style.display = 'block' + $E('header .title').scrollIntoView({ behaviour: 'smooth', block: 'end' }) + } + + function submitEvent() { + if (!$form.checkValidity()) { + showValidationErrors() + return false + } + + fetch(Site.API_ROOT + '/jobs/', { + method: 'POST', + mode: 'cors', + cache: 'no-cache', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(buildJobAPIData()) + }) + .then(response => { + if (!response.ok) { + throw new Error('Response not ok') + } + }) + .then(() => { + clearForm() + showOKMessage() + }) + .catch(() => { + showKOMessage() + }) + return false + } + + let $form = $E('#new-job form') + $form.querySelector('button[data-type="submit"]').addEventListener('click', submitEvent) +} diff --git a/data/events/new.njk b/data/events/new.njk new file mode 100644 index 00000000000000..ed06ad5cb33e43 --- /dev/null +++ b/data/events/new.njk @@ -0,0 +1,37 @@ +{% set pageTitle = "Publicar evento" %} +{% extends "./templates/default.njk" %} + +{% from "./templates/macros/form.njk" import textInput, timeInput, dateInput, textArea %} + +{% block main %} +
    +
    +

    publicar un evento

    +

    + Si organizas un evento, conferencia, taller, charla o quedada informal para fomentar una comunidad o compartir información de base tecnológica publica tu evento de forma gratuita. Sólo publicamos conferencias con código de conducta y te animamos a que también lo incluyas en tus eventos. +

    +
    + +
    + ¡Evento recibido con éxito! Hemos dado de alta tu evento, pero ten en cuenta que la publicación no es inmediata. +
    + +
    + No hemos podido crear el evento, por favor revisa que los datos son correctos y prueba más tarde. +
    + +
    + {% set required = true %} + {{textInput('title', 'Título', required)}} + {{dateInput('startDate', 'Fecha', required)}} + {{timeInput('startTime', 'Hora', required, 'Formato hh:mm. Si el control pide tres valores, el tercer valor establece AM o PM.')}} + {{textArea('description', 'Descripción', required)}} + {{textInput('sourceUrl', 'Link', required)}} + {{textInput('hashtag', 'Usuario de twitter', notRequired, 'Por ejemplo: @vlctechhub. Si no tienes usuario de twitter puedes usar un hashtag como por ejemplo #eventoparatodos. De aquí se genera la imagen cuando se publique el evento.')}} + +
    +
    + +{% endblock %} diff --git a/data/index.njk b/data/index.njk new file mode 100644 index 00000000000000..51521b5c091b56 --- /dev/null +++ b/data/index.njk @@ -0,0 +1,32 @@ +{% set pageTitle = "Agenda" %} +{% set navItem = "events" %} + +{% extends "./templates/default.njk" %} +{% from "./templates/macros/event.njk" import image, dayOfWeek, time, shortDate %} + +{% block main %} + +{% endblock %} diff --git a/data/job/board.njk b/data/job/board.njk new file mode 100644 index 00000000000000..3684c8a27d8731 --- /dev/null +++ b/data/job/board.njk @@ -0,0 +1,34 @@ +{% set pageTitle = "Empleo" %} +{% set navItem = "jobs" %} + +{% extends "./templates/default.njk" %} + +{% block main %} +
    +
    +

    Empleo

    + Publicar una oferta +
    +
    + {% for job in collections.jobs %} +
    +
    +
    + {{job.publishedAt | newDate | fromNow }} +
    +
    +

    {{job.title}}

    +

    {{job.companyName}}

    +
    +
    +
    + {% for tag in job.tags %} + {{tag}} + {% endfor %} +
    +
    + {% endfor %} +
    +
    +{% endblock %} + diff --git a/data/job/new.njk b/data/job/new.njk new file mode 100644 index 00000000000000..090295ebbb97c8 --- /dev/null +++ b/data/job/new.njk @@ -0,0 +1,41 @@ +{% set pageTitle = "Publicar oferta" %} +{% extends "./templates/default.njk" %} + +{% from "./templates/macros/form.njk" import textInput, textArea %} + +{% block main %} +
    +
    +

    publicar una oferta

    +

    + Recomendamos seguir esta guía para publicar. Revisamos cada oferta, ten en cuenta que la publicación no es inmediata. +

    +
    + +
    + ¡Oferta recibida con éxito! Hemos dado de alta tu oferta, pero ten en cuenta que la publicación no es inmediata. +
    + +
    + No hemos podido crear la oferta, por favor revisa que los datos son correctos y prueba más tarde. +
    + +
    + {% set required = true %} + {{textInput('title', 'Puesto', required, "Ej: 'Desarrollador ruby', 'Diseñador UX', 'Programador senior .Net'")}} + {{textArea('description', 'Descripción', required, "Describe con detalle lo que implica el puesto, qué tipo de candidato buscas, cómo se trabaja en tu empresa y qué beneficios ofrecéis.")}} + {{textInput('keywords', 'Palabras clave', required, "Breve listado separado por comas. Ej: javascript, aws, marketing, photoshop")}} + {{textInput('salary', 'Sueldo', required, "Los candidatos contactan más con empresas que publican el sueldo en la oferta.")}} + {{textArea('howToApply', 'Cómo aplicar', required, "Escribe las instrucciones para inscribirte a tu oferta aquí. Ej: 'Mándanos una carta de presentación y tu cv a la direccion de correo xxx@xxx.com. Cuéntanos por qué eres el candidato ideal!'")}} + {{textInput('sourceUrl', 'URL de la oferta', notRequired, "Si tienes publicada la oferta en tu página web puedes poder aquí el link.")}} + {{textInput('companyName', 'Nombre de la empresa', required)}} + {{textInput('companyWeb', 'Web de la empresa', required)}} + {{textInput('companyTwitter', 'Twitter de la empresa', notRequired, "Te nombraremos cuando se publique la oferta. Ej: @mozilla")}} + {{textInput('companyContact', 'Email de contacto', notRequired, "Email contacto en caso de tener alguna duda con la oferta. Este email no se publicará con la oferta.")}} + +
    +
    + +{% endblock %} diff --git a/ember-cli-build.js b/ember-cli-build.js deleted file mode 100644 index 5eedb80ebcfb72..00000000000000 --- a/ember-cli-build.js +++ /dev/null @@ -1,63 +0,0 @@ -/*jshint node:true*/ -/* global require, module */ -var EmberApp = require('ember-cli/lib/broccoli/ember-app'); - -module.exports = function(defaults) { - var app = new EmberApp(defaults, { - 'ember-cli-mocha': { - useLintTree: false - }, - fingerprint: { - exclude: ['apple-touch-icon', 'favicon', 'mstile'] - }, - sassOptions: { - includePaths: [ - 'node_modules/breakpoint-sass/stylesheets', - 'node_modules/jeet/scss/jeet' - ] - } - }); - - var extendedOptions = {}; - - if (app.env === 'production') { - extendedOptions = { - inlineContent: { - 'tracking': './config/tracking.js' - }, - pretender: { - 'enabled': false - } - }; - } - - for (var key in extendedOptions) { - if (hasOwnProperty.call(extendedOptions, key)) { - app.options[key] = extendedOptions[key]; - } - } - - // Use `app.import` to add additional libraries to the generated - // output files. - // - // If you need to use different assets in different - // environments, specify an object as the first parameter. That - // object's keys should be the environment name and the values - // should be the asset to use in that environment. - // - // If the library that you are including contains AMD or ES6 - // modules that you would like to import into your application - // please specify an object with the list of modules as keys - // along with the exports of each module as its value. - - app.import('bower_components/jquery-dropdown/jquery.dropdown.js'); - app.import('bower_components/jquery-dropdown/jquery.dropdown.min.css'); - app.import('bower_components/jt.timepicker/jquery.timepicker.js'); - app.import('bower_components/jt.timepicker/jquery.timepicker.css'); - app.import('bower_components/autosize/dist/autosize.min.js'); - app.import('vendor/css/monthly.css'); - app.import('vendor/js/monthly.js'); - //app.import('vendor/css/basscss.css'); - - return app.toTree(); -}; diff --git a/img/arrow-24.png b/img/arrow-24.png deleted file mode 100644 index 080460adf8c3dd..00000000000000 Binary files a/img/arrow-24.png and /dev/null differ diff --git a/img/calendar-24.png b/img/calendar-24.png deleted file mode 100644 index 1e6a03da986fdf..00000000000000 Binary files a/img/calendar-24.png and /dev/null differ diff --git a/lib/app/vlctechhub/app.1.0.js b/lib/app/vlctechhub/app.1.0.js deleted file mode 100644 index 0f7f4d96a87c84..00000000000000 --- a/lib/app/vlctechhub/app.1.0.js +++ /dev/null @@ -1,259 +0,0 @@ -var baseURL = 'http://vlctechhub-api.herokuapp.com/v0/'; -//var baseURL = 'http://api.vlctechhub.org/v0/'; -//var baseURL = 'http://localhost:5000/v0/'; - -Ember.onLoad('Ember.Application', function(Application) { - -}); - -window.App = Ember.Application.create(); - -Ember.Handlebars.registerBoundHelper('prettyDate', function(aDate) { - return moment(aDate).tz('Europe/Madrid').format('DD MMMM YY - HH:mm[h]'); -}); - -Ember.Handlebars.registerBoundHelper('linkify', function (text) { - text = text.replace(/\n/g, "
    "); - text = text.replace(/(https?:\/\/\S+)/gi, function (s) { - return '' + s + ''; - }); - - text = text.replace(/(^|)@(\w+)/gi, function (s) { - return '' + s + ''; - }); - - text = text.replace(/(^|)#(\w+)/gi, function (s) { - return '' + s + ''; - }); - return new Handlebars.SafeString(text); -}); - -Ember.Handlebars.registerBoundHelper('linkToCalendar', function(anEvent) { - var zeroPad = function(number) { - return ("0" + number).slice(-2); - }; - var isoDate = function(date) { - return date.getUTCFullYear() + zeroPad(date.getUTCMonth() + 1) + zeroPad(date.getUTCDate()) + 'T' + - zeroPad(date.getUTCHours()) + zeroPad(date.getUTCMinutes()) + zeroPad(date.getUTCSeconds()) + 'Z'; - }; - - var title = encodeURIComponent(anEvent.title); - var details = encodeURIComponent('Más info: ' + anEvent.link); - var startDate = new Date(anEvent.date); - var endDate = new Date(anEvent.date); - endDate.setHours(endDate.getHours() + 1); - var dates = isoDate(startDate) + '/' + isoDate(endDate); - var link = 'Añadir a Google Calendar'; - - return new Handlebars.SafeString(link); -}); - -Ember.MonthButton = Ember.View.extend({ - tagName : "input", - type : "radio", - classNames: ["month-picker-label"], - attributeBindings : [ "name", "type", "value", "checked:checked:" ], - click : function(evt) { - this.set("selection", this.$().val()); - this.get('controller').send('setMonth', this.get('selection')); - }, - checked : function() { - return this.get("value") == this.get("selection"); - }.property() -}); - -Ember.YearButton = Ember.View.extend({ - tagName : "input", - type : "radio", - classNames: ["year-picker-label"], - attributeBindings : [ "name", "type", "value", "checked:checked:" ], - click : function(evt) { - this.set("selection", this.$().val()); - this.get('controller').send('setYear', this.get('selection')); - }, - checked : function() { - return this.get("value") == this.get("selection"); - }.property() -}); - -App.Router.map(function() { - this.resource("events", { path: "/" }, function() { - this.route("upcoming", { path: "/upcoming"}); - this.route("new", { path: "/new" }); - this.route("past", { path: "/past" }); - }); - this.resource('archive', { path: '/archive' }, function(){ - this.route('month', { path: '/:year/:month' }); - }); -}); - -App.BaseURL = baseURL; - -App.IndexRoute = Ember.Route.extend({}); - -App.EventsIndexRoute = Ember.Route.extend({ - renderTemplate: function() { - this.render('events.upcoming'); - }, - model: function(){ - return Ember.$.getJSON(App.BaseURL + 'events/upcoming'); - } -}); - -App.EventsUpcomingRoute = Ember.Route.extend({ - model: function(){ - return Ember.$.getJSON(App.BaseURL + 'events/upcoming'); - } -}); - -App.EventsPastRoute = Ember.Route.extend({ - model: function(){ - return Ember.$.getJSON(App.BaseURL + 'events/past'); - } -}); - -App.ArchiveRoute = Ember.Route.extend({ - beforeModel: function(params) { - var now = new Date(); - this.transitionTo('archive.month', now.getFullYear(), now.getMonth() + 1); - }, - model: function(params) { return [] } -}); - -App.ArchiveMonthRoute = Ember.Route.extend({ - actions:{ - changeMonth: function(month){ - this.set('month', month); - this.transitionTo('archive.month', this.getYear(), this.getMonth()); - }, - changeYear: function(year){ - this.set('year', year); - this.transitionTo('archive.month', this.getYear(), this.getMonth()); - } - }, - model: function(params){ - this.updateData(params); - return this.fetch(); - }, - updateData: function(params){ - this.set('year', params.year); - this.set('month', params.month); - }, - fetch: function(){ - var month = this.getMonth().toString(); - var pad = "00"; - month = pad.substring(0, pad.length - month.length) + month; - return Ember.$.getJSON(App.BaseURL + 'events/' + this.getYear() + '/' + month); - }, - setupController: function(controller, model){ - controller.set('model', model); - controller.set('year', this.getYear()); - controller.set('month', this.getMonth()); - }, - getYear: function(){ - var year = parseInt(this.get('year')); - var valid = [2013, 2014].indexOf(year) > -1; - return valid ? year : this.getActualYear(); - }, - getActualYear: function(){ - var now = new Date(); - return now.getFullYear(); - }, - getMonth: function(){ - var month = parseInt(this.get('month')); - var valid = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) > -1; - return valid ? month : this.getActualMonth(); - }, - getActualMonth: function(){ - var now = new Date(); - return now.getMonth() + 1; - } -}); - -App.ArchiveMonthController = Ember.ArrayController.extend({ - actions: { - setMonth: function(month){ - this.set('month', month); - this.get('target').send('changeMonth', month); - }, - setYear: function(year){ - this.set('year', year); - this.get('target').send('changeYear', year); - } - } -}); - -App.EventsNewView = Ember.View.extend({ - templateName: 'events/new', - didInsertElement: function() { - Ember.$("#new-event-start-date").datetimepicker({ - lang: 'es', - timepicker:false, - format:'d/m/Y', - closeOnDateSelect:true, - dayOfWeekStart: 1, - yearStart: 2014 - }); - Ember.$("#new-event-start-time").datetimepicker({ - lang: 'es', - datepicker:false, - format:'H:i', - closeOnDateSelect:true, - allowTimes:['09:00','10:00','12:00','17:00', '17:30','18:00','18:30','19:00','20:00'] - }); - } -}); - - -App.EventsNewController = Ember.Controller.extend({ - actions: { - create: function() { this.createEvent(); }, - reset: function() { this.resetMessages(); } - }, - - getNewEventDate: function(){ - var date = this.get('date').split('/'); - if(date.length < 3) return; - var time = this.get('time') || '00:00'; - var datetime = "%@-%@-%@T%@:00".fmt(date[2],date[1],date[0], time); - return moment.tz(datetime,'Europe/Madrid'); - }, - - createEvent:function(){ - - this.resetMessages(); - - var newEvent = { - title: this.get('title'), - description: this.get('description'), - link: this.get('link'), - date: this.getNewEventDate().utc().format(), - hashtag: this.get('hashtag') - } - - Ember.$.post(App.BaseURL + 'events/new', newEvent).then(this.showSuccessMessage.bind(this), this.showErrorMessage.bind(this)); - }, - - resetModel: function(){ - this.set('title', ''); - this.set('description', ''); - this.set('link', ''); - this.set('date', ''); - this.set('time', ''); - this.set('hashtag', ''); - }, - - resetMessages: function(){ - this.set('success', false); - this.set('error', false); - }, - - showSuccessMessage: function() { - this.set('success', true); - this.resetModel(); - }, - - showErrorMessage: function() { - this.set('error', true); - } -}); diff --git a/lib/events.js b/lib/events.js new file mode 100644 index 00000000000000..14a89e16929ef1 --- /dev/null +++ b/lib/events.js @@ -0,0 +1,66 @@ +const http = require('http') +const https = require('https') + +const createTwitterInfo = function(txt) { + let twitter = {} + if (txt && txt[0] === '@') { + twitter.handle = txt.substring(1) + } else if (txt && txt[0] === '#') { + twitter.hashtag = txt.substring(1) + } else { + twitter.hashtag = txt + } + return twitter +} + +module.exports = (options = {}) => { + const { apiRoot, collection, layout } = { + apiRoot: 'uri-goes-here', + collection: 'events', + layout: 'event.njk', + ...options + } + + return function(files, metalsmith, done) { + let url = `${apiRoot}/events/upcoming` + + console.log('Consuming', url) + + let protocol = apiRoot.startsWith('https://') ? https : http + const req = protocol.get(url, res => { + let body = '' + res.on('data', chunk => { + body += chunk + }) + res.on('end', () => { + let events = JSON.parse(body) + events.forEach(e => { + let page = { + id: e.id, + file: 'events/' + e.slug + '.md', + layout: layout, + collection: collection, + title: e.title, + contents: Buffer.from(e.description), + startDate: e.date.toString(), + twitter: createTwitterInfo(e.hashtag), + slug: e.slug, + sourceUrl: e.link, + pageTitle: e.title, + seo: { + ogTitle: e.title, + ogDescription: e.description, + ogUrl: apiRoot + 'events/' + e.slug + '/' + } + } + files[page.file] = page + }) + done() + }) + }) + req.on('error', error => { + console.error(error) + }) + req.end() + } +} diff --git a/lib/jobs.js b/lib/jobs.js new file mode 100644 index 00000000000000..71cdb5ffd407ef --- /dev/null +++ b/lib/jobs.js @@ -0,0 +1,58 @@ +const http = require('http') +const https = require('https') +const marked = require('marked') + +module.exports = (options = {}) => { + const { apiRoot, collection, layout } = { + apiRoot: 'uri-goes-here', + collection: 'jobs', + layout: 'job.njk', + ...options + } + + return function(files, metalsmith, done) { + let url = `${apiRoot}/jobs` + + console.log('Consuming', url) + + let protocol = apiRoot.startsWith('https://') ? https : http + const req = protocol.get(url, res => { + let body = '' + res.on('data', chunk => { + body += chunk + }) + res.on('end', () => { + let jobs = JSON.parse(body) + jobs.forEach(j => { + let page = { + id: j.id, + file: 'job/board/' + j.id + '.md', + layout: layout, + collection: collection, + title: j.title, + contents: Buffer.from(j.description), + howToApply: marked(j.how_to_apply || '', { sanitize: true, smartLists: true }), + salary: j.salary, + publishedAt: j.published_at.toString(), + sourceUrl: j.link, + tags: j.tags, + slug: j.id, + companyName: j.company.name, + pageTitle: j.title, + seo: { + ogTitle: j.title, + ogDescription: j.description, + ogUrl: apiRoot + 'job/board/' + j.id + '/' + } + } + files[page.file] = page + }) + done() + }) + }) + req.on('error', error => { + console.error(error) + }) + req.end() + } +} diff --git a/lib/rss.js b/lib/rss.js new file mode 100644 index 00000000000000..db3c66a3fd4940 --- /dev/null +++ b/lib/rss.js @@ -0,0 +1,44 @@ +const Feed = require('feed').Feed +const marked = require('marked') + +module.exports = (options = {}) => { + const { encoding, description, destination, collection, customTitleFn, pubDateAttributeName } = { + encoding: 'utf8', + description: '', + destination: 'feed.xml', + collection: 'posts', + customTitleFn: null, + pubDateAttributeName: 'date', + ...options + } + + return function(files, metalsmith, done) { + const metadata = metalsmith.metadata() + const collectionItems = metadata.collections[collection] + + const feed = new Feed({ + title: 'VLCTechHub Feed', + description, + language: 'es', + link: metadata.seo.ogUrl, + generator: 'VLCTechHub' + }) + + collectionItems.forEach(item => { + feed.addItem({ + title: customTitleFn ? customTitleFn(item) : item.title, + description: item.seo.ogDescription, + content: marked(item.seo.ogDescription || '', { sanitize: true, smartLists: true }), + id: metadata.seo.ogUrl + item.path, + link: metadata.seo.ogUrl + item.path, + date: new Date(item[pubDateAttributeName]) + }) + }) + files[destination] = { + contents: Buffer.from(feed.rss2()), + encoding + } + + return done() + } +} diff --git a/package.json b/package.json index 71cc848bddee66..a011b5b3522b82 100644 --- a/package.json +++ b/package.json @@ -1,62 +1,34 @@ { - "name": "vlc-tech-hub", - "version": "3.0.32", - "description": "Small description for client goes here", - "private": true, - "directories": { - "doc": "doc", - "test": "tests" + "name": "VLCTechHub-site", + "version": "1.0.0", + "main": "build.js", + "repository": "git@github.com:VLCTechHub/VLCTechHub-site.git", + "license": "MIT", + "dependencies": { + "feed": "^4.0.0", + "git-rev-sync": "^1.12.0", + "jstransformer-nunjucks": "^1.0.0", + "metalsmith": "^2.3.0", + "metalsmith-collections": "^0.9.0", + "metalsmith-in-place": "^4.4.0", + "metalsmith-layouts": "^2.3.1", + "metalsmith-markdown": "^1.2.0", + "metalsmith-permalinks": "^2.2.0", + "metalsmith-sass": "^1.6.0", + "metalsmith-uglify": "^2.3.2", + "metalsmith-writemetadata": "^0.4.5", + "moment-timezone": "^0.5.26", + "node-fetch": "^2.6.0", + "nunjucks-moment-timezone-filter": "^1.0.1", + "swig": "^1.4.2", + "transliteration": "^2.1.3" }, "scripts": { - "build": "ember build", - "start": "ember server", - "test": "ember test", - "deploy": "bash ./scripts/deploy.sh" - }, - "repository": "", - "engines": { - "node": ">= 0.10.0" + "build": "node build.js", + "report-published": "node report-published.js" }, - "author": "", - "license": "MIT", "devDependencies": { - "breakpoint-sass": "^2.7.0", - "broccoli-asset-rev": "2.5.0", - "ember-ajax": "3.0.0", - "ember-cli": "2.11.0", - "ember-cli-app-version": "3.0.0", - "ember-cli-babel": "6.0.0", - "ember-cli-chai": "0.3.2", - "ember-cli-dependency-checker": "1.4.0", - "ember-cli-document-title": "0.3.3", - "ember-cli-htmlbars": "1.3.0", - "ember-cli-htmlbars-inline-precompile": "0.4.0", - "ember-cli-inject-live-reload": "1.6.1", - "ember-cli-inline-content": "0.4.1", - "ember-cli-jshint": "2.0.1", - "ember-cli-meta-tags": "3.0.4", - "ember-cli-mocha": "0.13.3", - "ember-cli-moment-shim": "3.1.0", - "ember-cli-pretender": "1.0.1", - "ember-cli-release": "0.2.9", - "ember-cli-sass": "^7.0.0", - "ember-cli-shims": "1.1.0", - "ember-cli-sri": "2.1.1", - "ember-cli-test-loader": "2.1.0", - "ember-cli-uglify": "1.2.0", - "ember-component-css": "0.3.2", - "ember-data": "2.11.3", - "ember-disable-proxy-controllers": "1.0.1", - "ember-export-application-global": "2.0.0", - "ember-load-initializers": "1.0.0", - "ember-moment": "7.3.0", - "ember-pikaday": "1.1.0", - "ember-resolver": "4.1.0", - "ember-route-action-helper": "2.0.3", - "ember-sinon": "0.7.0", - "ember-source": "2.11.3", - "jeet": "6.1.4", - "loader.js": "4.3.0" - }, - "dependencies": {} + "eslint": "^6.4.0", + "prettier": "^1.18.2" + } } diff --git a/public/CNAME b/public/CNAME deleted file mode 100644 index 85b87738223f04..00000000000000 --- a/public/CNAME +++ /dev/null @@ -1 +0,0 @@ -vlctechhub.org diff --git a/public/crossdomain.xml b/public/crossdomain.xml deleted file mode 100644 index 0c16a7a07b37e5..00000000000000 --- a/public/crossdomain.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - diff --git a/public/favicon/browserconfig.xml b/public/favicon/browserconfig.xml deleted file mode 100644 index 9ecd3500334938..00000000000000 --- a/public/favicon/browserconfig.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - #da532c - - - diff --git a/public/favicon/manifest.json b/public/favicon/manifest.json deleted file mode 100644 index 53daf84324df82..00000000000000 --- a/public/favicon/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "VLCTechHub", - "icons": [ - { - "src": "\/favicon\/android-chrome-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": 0.75 - }, - { - "src": "\/favicon\/android-chrome-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": 1 - }, - { - "src": "\/favicon\/android-chrome-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": 1.5 - }, - { - "src": "\/favicon\/android-chrome-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": 2 - }, - { - "src": "\/favicon\/android-chrome-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": 3 - }, - { - "src": "\/favicon\/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": 4 - } - ] -} diff --git a/public/font/ubuntu-mono.woff b/public/font/ubuntu-mono.woff deleted file mode 100644 index bcb2790f75a1d7..00000000000000 Binary files a/public/font/ubuntu-mono.woff and /dev/null differ diff --git a/public/img/arrow-24.png b/public/img/arrow-24.png deleted file mode 100644 index 080460adf8c3dd..00000000000000 Binary files a/public/img/arrow-24.png and /dev/null differ diff --git a/public/img/bg.png b/public/img/bg.png deleted file mode 100644 index fee58e131a532e..00000000000000 Binary files a/public/img/bg.png and /dev/null differ diff --git a/public/img/calendar-24.png b/public/img/calendar-24.png deleted file mode 100644 index 1e6a03da986fdf..00000000000000 Binary files a/public/img/calendar-24.png and /dev/null differ diff --git a/public/img/email.png b/public/img/email.png deleted file mode 100644 index e0a10136c6023d..00000000000000 Binary files a/public/img/email.png and /dev/null differ diff --git a/public/img/g3615.png b/public/img/g3615.png deleted file mode 100644 index 3c5e87fac08e94..00000000000000 Binary files a/public/img/g3615.png and /dev/null differ diff --git a/public/img/groups.png b/public/img/groups.png deleted file mode 100644 index b20c20085f53e0..00000000000000 Binary files a/public/img/groups.png and /dev/null differ diff --git a/public/img/icon-menu.png b/public/img/icon-menu.png deleted file mode 100644 index 01d6835d7c36dd..00000000000000 Binary files a/public/img/icon-menu.png and /dev/null differ diff --git a/public/img/icon.png b/public/img/icon.png deleted file mode 100644 index 0889cec755a267..00000000000000 Binary files a/public/img/icon.png and /dev/null differ diff --git a/public/img/iconoff.png b/public/img/iconoff.png deleted file mode 100644 index 9db7baac904ee4..00000000000000 Binary files a/public/img/iconoff.png and /dev/null differ diff --git a/public/img/twitter.png b/public/img/twitter.png deleted file mode 100644 index f4f971fe9786be..00000000000000 Binary files a/public/img/twitter.png and /dev/null differ diff --git a/public/robots.txt b/public/robots.txt deleted file mode 100644 index f5916452e5ff6c..00000000000000 --- a/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# http://www.robotstxt.org -User-agent: * -Disallow: diff --git a/public/sitemap.xml b/public/sitemap.xml deleted file mode 100644 index 838e3db9c1c464..00000000000000 --- a/public/sitemap.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - http://vlctechhub.org/job/board - daily - 0.8 - - - http://vlctechhub.org/events/archive - daily - - - http://vlctechhub.org - daily - 0.8 - - diff --git a/report-published.js b/report-published.js new file mode 100644 index 00000000000000..95049c3364416d --- /dev/null +++ b/report-published.js @@ -0,0 +1,52 @@ +const fs = require('fs') +const fetch = require('node-fetch') + +const devBuild = (process.env.NODE_ENV || '').trim().toLowerCase() !== 'production' +const apiRoot = devBuild ? 'http://localhost:5000/v2' : 'https://api.vlctechhub.org/v2' + +fs.readFile('dist/.events-published.json', async (err, data) => { + try { + if (err) throw err + + const publishedEvents = JSON.parse(data).map(event => ({ id: event.id })) + + const response = await fetch(`${apiRoot}/events/posted`, { + method: 'patch', + headers: { 'Content-type': 'application/json', Accept: 'application/json', 'Accept-Charset': 'utf-8' }, + body: JSON.stringify({ events: publishedEvents }) + }) + + if (response.status !== 204) { + console.error(`Invalid response status ${response.status}.`) + const json = await response.json() + throw json.error + } + + console.log('Events have been succesfully reported.') + } catch (err) { + console.error(err) + } +}) + +fs.readFile('dist/.jobs-published.json', async (err, data) => { + try { + if (err) throw err + + const publishedJobs = JSON.parse(data).map(job => ({ id: job.id })) + + const response = await fetch(`${apiRoot}/jobs/posted`, { + method: 'patch', + headers: { 'Content-type': 'application/json', Accept: 'application/json', 'Accept-Charset': 'utf-8' }, + body: JSON.stringify({ jobs: publishedJobs }) + }) + + if (response.status !== 204) { + console.error(`Invalid response status ${response.status}.`) + const json = await response.json() + throw json.error + } + console.log('Job offers have been succesfully reported.') + } catch (err) { + console.error(err) + } +}) diff --git a/scripts/deploy.sh b/scripts/deploy.sh deleted file mode 100755 index fdde808b369902..00000000000000 --- a/scripts/deploy.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -function build { - git checkout master - git pull origin master - rm -rf dist - ember build --environment production - # Make sure we're in a good state. - [ "$?" -ne "0" ] && echo "ERROR: Could not build ember project. Aborting..." && exit 1 -} - -function tag { - ember release --local false --yes true -} - -function publish { - echo 'Publishing...' - cp dist/index.html dist/200.html - surge ./dist -} - -function version_published () { - git tag --sort=-v:refname | head -n 1 -} - -function say_in_slack { - if [ -z "$SLACK_WEBHOOK" ]; then - echo "WARN: Set SLACK_WEBHOOK to publish a message about this deploy" - else - echo 'Communicating with slack...' - request_body=$(< <(cat < /dev/null - fi -} - -function say_in_command_line { -echo '' -echo '+=========================+' -echo "| Tada! $(version_published) published! |" -echo '+=========================+' -} - -build -tag -publish -say_in_slack -say_in_command_line diff --git a/templates/default.njk b/templates/default.njk new file mode 100644 index 00000000000000..2eb878c3f78346 --- /dev/null +++ b/templates/default.njk @@ -0,0 +1,56 @@ + + + + {{pageTitle}} | VLCTechHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% include "./layout/header.njk" %} + + + +
    +
    + {% block main %} + This is the default content for body. It should be overriden. + {% endblock %} +
    +
    + {% block footer %} + {% include "./layout/footer.njk" %} + {% endblock %} + + diff --git a/templates/event.njk b/templates/event.njk new file mode 100644 index 00000000000000..e9e65e3300016f --- /dev/null +++ b/templates/event.njk @@ -0,0 +1,25 @@ +{% extends "./default.njk" %} +{% from "./macros/event.njk" import image, longDate, time, googleCalendarLink %} + +{% block main %} +
    +
    +

    {{title}}

    +

    {{longDate(startDate)}} | {{time(startDate)}}

    +
    +
    + {{ image(twitter) }} +
    +

    {{longDate(startDate)}}

    +

    {{time(startDate)}}

    +
    +
    + Ver fuente + Añadir al calendario +
    +
    +
    + {{contents | safe}} +
    +
    +{% endblock %} diff --git a/templates/job.njk b/templates/job.njk new file mode 100644 index 00000000000000..6f82455bacdb49 --- /dev/null +++ b/templates/job.njk @@ -0,0 +1,39 @@ +{% extends "./default.njk" %} + +{% block main %} +
    +
    +

    {{title}}

    +

    {{companyName}}

    +
    + {% for tag in tags %} + {{tag}} + {% endfor %} +
    +
    +
    +
    +

    Descripción

    + {{contents | safe}} +
    +
    +

    Sueldo

    + {% if salary %} + {{salary}} + {% else %} + No hay información. + {% endif %} +
    +
    +

    Cómo aplicar

    + {{howToApply | safe }} +
    + {% if sourceUrl %} +
    +

    Más infomación

    +

    Más información de la oferta en {{sourceUrl}}.

    +
    + {% endif %} +
    +
    +{% endblock %} diff --git a/templates/layout/footer.njk b/templates/layout/footer.njk new file mode 100644 index 00000000000000..bc29bb2e9f6da9 --- /dev/null +++ b/templates/layout/footer.njk @@ -0,0 +1,37 @@ + diff --git a/templates/layout/header.njk b/templates/layout/header.njk new file mode 100644 index 00000000000000..6e959594d8676d --- /dev/null +++ b/templates/layout/header.njk @@ -0,0 +1,12 @@ +
    + + + +
    diff --git a/templates/layout/nav.njk b/templates/layout/nav.njk new file mode 100644 index 00000000000000..6116dd4561d5c1 --- /dev/null +++ b/templates/layout/nav.njk @@ -0,0 +1,14 @@ +{% set navItems = [ + {name: 'Agenda', uri: '/', id:'events'}, + {name: 'Empleo', uri: '/job/board/',id:'jobs'} +] +%} + + diff --git a/templates/macros/event.njk b/templates/macros/event.njk new file mode 100644 index 00000000000000..f2a514fb10143c --- /dev/null +++ b/templates/macros/event.njk @@ -0,0 +1,30 @@ +{% macro image(twitterInfo, width=350) %} + {% if twitterInfo.handle %} + + {% else %} + + {% endif %} +{% endmacro %} + + +{% macro dayOfWeek(d) %} + {{d | newDate | date('dddd') | capitalize }} +{% endmacro %} + +{% macro shortDate(d) %} + {{d | newDate | date('DD MMMM') | capitalize }} +{% endmacro %} + +{% macro longDate(d) %} + {{d | newDate | date('dddd DD [de] MMMM') | capitalize }} +{% endmacro %} + +{% macro time(d) %} + {{d | newDate | date('tz', 'Europe/Madrid') | date('HH:mm')}}h +{% endmacro %} + +{% macro googleCalendarLink(title, link, startDate) %} + https://www.google.com/calendar/event?action=TEMPLATE&text={{title | urlencode}}&details={{link | urlencode}}&dates={{startDate}}/{{ startDate | newDate | date("add", 1, "hours") | date}} +{% endmacro %} + + diff --git a/templates/macros/form.njk b/templates/macros/form.njk new file mode 100644 index 00000000000000..9ebd9c2e42ffac --- /dev/null +++ b/templates/macros/form.njk @@ -0,0 +1,45 @@ +{% macro textInput(name, label, required, hint) %} + {{_input("text", name, label, required, hint)}} +{% endmacro %} + +{% macro timeInput(name, label, required, hint) %} + {{_input("time", name, label, required, hint)}} +{% endmacro %} + +{% macro dateInput(name, label, required, hint) %} + {{_input("date", name, label, required, hint)}} +{% endmacro %} + +{% macro textArea(name, label, required, hint) %} +

    + + + {% if hint %} + {{hint}} + {% endif %} + +

    +{% endmacro %} + +{% macro _input(type, name, label, required, hint) %} +

    + + + {% if hint %} + {{hint}} + {% endif %} + +

    +{% endmacro %} + + diff --git a/testem.js b/testem.js deleted file mode 100644 index 7d0a32a937a94c..00000000000000 --- a/testem.js +++ /dev/null @@ -1,14 +0,0 @@ -/*jshint node:true*/ -module.exports = { - "framework": "mocha", - "test_page": "tests/index.html", - "disable_watching": true, - "reporter":"dot", - "launch_in_ci": [ - "PhantomJS" - ], - "launch_in_dev": [ - "PhantomJS", - "Chrome" - ] -}; diff --git a/tests/.jshintrc b/tests/.jshintrc deleted file mode 100644 index d2bd11343b8385..00000000000000 --- a/tests/.jshintrc +++ /dev/null @@ -1,52 +0,0 @@ -{ - "predef": [ - "document", - "window", - "location", - "setTimeout", - "$", - "-Promise", - "define", - "console", - "visit", - "exists", - "fillIn", - "click", - "keyEvent", - "triggerEvent", - "find", - "findWithAssert", - "wait", - "DS", - "andThen", - "currentURL", - "currentPath", - "currentRouteName" - ], - "node": false, - "browser": false, - "boss": true, - "curly": true, - "debug": false, - "devel": false, - "eqeqeq": true, - "evil": true, - "forin": false, - "immed": false, - "laxbreak": false, - "newcap": true, - "noarg": true, - "noempty": false, - "nonew": false, - "nomen": false, - "onevar": false, - "plusplus": false, - "regexp": false, - "undef": true, - "sub": true, - "strict": false, - "white": false, - "eqnull": true, - "esversion": 6, - "unused": true -} diff --git a/tests/acceptance/.next-events-test.js.swp b/tests/acceptance/.next-events-test.js.swp deleted file mode 100644 index 682c9b7ca538f4..00000000000000 Binary files a/tests/acceptance/.next-events-test.js.swp and /dev/null differ diff --git a/tests/acceptance/archive-events-test.js b/tests/acceptance/archive-events-test.js deleted file mode 100644 index 1dc8101060cf20..00000000000000 --- a/tests/acceptance/archive-events-test.js +++ /dev/null @@ -1,53 +0,0 @@ - /* jshint expr:true */ -import { - describe, - it, - beforeEach, - afterEach -} from 'mocha'; -import { expect } from 'chai'; -import startApp from '../helpers/start-app'; -import Ember from 'ember'; -import Pretender from 'pretender'; -import {addRoutes, eventRoutes, jobRoutes} from "../fixtures/routes"; - - -describe('Acceptance: Archive events', function() { - let application; - let server; - - beforeEach(function() { - application = startApp(); - server = new Pretender(); - addRoutes(server, [eventRoutes, jobRoutes]); - }); - - afterEach(function() { - server.shutdown(); - Ember.run(application, 'destroy'); - }); - - - it('can visit /events/archive', function() { - - visit('/events/archive/2001/01'); - - andThen(function() { - expect(currentPath()).to.equal('event.archive.month.index'); - - let event = find('.expandable-list').first(); - expect(event.find('.title').text()).to.contain('a title'); - }); - }); - - it('can visit /events/archive/:year/:month/:id', function() { - - visit('/events/archive/2001/01/1'); - - andThen(function() { - let event = find('.expandable-list').first(); - expect(event.find('.item-summary').text()).to.contain('an event description'); - }); - }); -}); - diff --git a/tests/acceptance/job-board-test.js b/tests/acceptance/job-board-test.js deleted file mode 100644 index 9faa88e990499a..00000000000000 --- a/tests/acceptance/job-board-test.js +++ /dev/null @@ -1,49 +0,0 @@ -/* jshint expr:true */ -import { - describe, - it, - beforeEach, - afterEach -} from 'mocha'; -import { expect } from 'chai'; -import startApp from '../helpers/start-app'; -import destroyApp from '../helpers/destroy-app'; -import Pretender from 'pretender'; -import {addRoutes, jobRoutes} from "../fixtures/routes"; - - -describe('Acceptance: JobBoardTest.Js', function() { - let application; - let server; - - beforeEach(function() { - application = startApp(); - server = new Pretender(); - addRoutes(server, [jobRoutes]); - }); - - afterEach(function() { - server.shutdown(); - destroyApp(application); - }); - - it('can visit /job/board', function() { - visit('/job/board'); - - andThen(function() { - expect(currentPath()).to.equal('job.list.index'); - - let event = find('.expandable-list').first(); - expect(event.find('.title').text()).to.contain('a title'); - }); - }); - - it('can visit /job/board/id', function() { - visit('/job/board/1'); - - andThen(function() { - let event = find('.expandable-list').first(); - expect(event.find('.item-summary').text()).to.contain('a job description'); - }); - }); -}); diff --git a/tests/acceptance/upcoming-events-test.js b/tests/acceptance/upcoming-events-test.js deleted file mode 100644 index 3328f2bad3a6f0..00000000000000 --- a/tests/acceptance/upcoming-events-test.js +++ /dev/null @@ -1,62 +0,0 @@ - /* jshint expr:true */ -import { - describe, - it, - beforeEach, - afterEach -} from 'mocha'; -import { expect } from 'chai'; -import startApp from '../helpers/start-app'; -import Ember from 'ember'; -import Pretender from 'pretender'; -import {addRoutes, eventRoutes, jobRoutes} from "../fixtures/routes"; - - -describe('Acceptance: Upcoming events', function() { - let application; - let server; - - beforeEach(function() { - application = startApp(); - server = new Pretender(); - addRoutes(server, [eventRoutes, jobRoutes]); - }); - - afterEach(function() { - server.shutdown(); - Ember.run(application, 'destroy'); - }); - - - it('can visit /events/upcoming', function() { - - visit('/events/upcoming'); - - andThen(function() { - expect(currentPath()).to.equal('event.upcoming'); - - let event = find('.event-card').first(); - expect(event.find('.title').text()).to.contain('a title'); - }); - }); - - it('can visit /events/slug', function() { - - visit('/events/slug-1'); - - andThen(function() { - expect(find('.description').text()).to.contain('an event description'); - }); - }); - - it('renders how many job offers are', function(){ - visit('/events/upcoming'); - - andThen(function() { - let menu = find('.menu .button.-menu'); - let NUMBER_OF_JOB_OFFERS_IN_FIXTURES = 1; - expect(menu.text()).to.contain('Empleo ' + NUMBER_OF_JOB_OFFERS_IN_FIXTURES); - }); - }); -}); - diff --git a/tests/fixtures/routes.js b/tests/fixtures/routes.js deleted file mode 100644 index 7d6c8b82e9b9fa..00000000000000 --- a/tests/fixtures/routes.js +++ /dev/null @@ -1,46 +0,0 @@ -import config from '../../config/environment'; - -export function addRoutes(server, routes) { - routes.forEach(r => server.map(r)); - server.prepareBody = (body) => JSON.stringify(body); - server.prepareHeaders = (headers) => headers['content-type'] = 'application/json'; -} - -export function eventRoutes(){ - var event = { - 'id': 1, - 'slug': 'slug-1', - 'title': 'a title', - 'description': 'an event description', - 'link': 'a link', - 'hashtag':'#hashtag', - 'date':'2001-01-01T12:00:00Z' - }; - - this.get(`${config.APP.API_HOST}/v1/events`, function(){ - return [200, {}, {'events':[event]}]; - }); - - this.get(`${config.APP.API_HOST}/v1/events/slug-1`, function(){ - return [200, {}, {'event': event}]; - }); -} - -export function jobRoutes(){ - this.get(`${config.APP.API_HOST}/v1/jobs`, function(){ - var job = { - 'id': 1, - 'title': 'a title', - 'description': 'a job description', - 'link': 'a link', - 'company': { - 'name': 'awesome inc.', - 'link': 'www.awesome.inc' - }, - 'how_to_apply': 'this is how to apply', - 'salary': 'a good salary', - 'published_at':'2001-01-01T12:00:00Z' - }; - return [200, {}, {'jobs':[job]}]; - }); -} diff --git a/tests/helpers/destroy-app.js b/tests/helpers/destroy-app.js deleted file mode 100644 index c3d4d1abb5d467..00000000000000 --- a/tests/helpers/destroy-app.js +++ /dev/null @@ -1,5 +0,0 @@ -import Ember from 'ember'; - -export default function destroyApp(application) { - Ember.run(application, 'destroy'); -} diff --git a/tests/helpers/resolver.js b/tests/helpers/resolver.js deleted file mode 100644 index b208d38d097bed..00000000000000 --- a/tests/helpers/resolver.js +++ /dev/null @@ -1,11 +0,0 @@ -import Resolver from '../../resolver'; -import config from '../../config/environment'; - -const resolver = Resolver.create(); - -resolver.namespace = { - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix -}; - -export default resolver; diff --git a/tests/helpers/start-app.js b/tests/helpers/start-app.js deleted file mode 100644 index 54c33c16cb89c1..00000000000000 --- a/tests/helpers/start-app.js +++ /dev/null @@ -1,18 +0,0 @@ -import Ember from 'ember'; -import Application from '../../app'; -import config from '../../config/environment'; - -export default function startApp(attrs) { - let application; - - // use defaults, but you can override - let attributes = Ember.assign({}, config.APP, attrs); - - Ember.run(() => { - application = Application.create(attributes); - application.setupForTesting(); - application.injectTestHelpers(); - }); - - return application; -} diff --git a/tests/index.html b/tests/index.html deleted file mode 100644 index 614300be477c18..00000000000000 --- a/tests/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - VLCTechHub Tests - - - - {{content-for 'head'}} - {{content-for 'test-head'}} - - - - {{content-for 'head-footer'}} - {{content-for 'test-head-footer'}} - - - - {{content-for 'body'}} - {{content-for 'test-body'}} - - - - - - - - {{content-for 'body-footer'}} - {{content-for 'test-body-footer'}} - - diff --git a/tests/integration/pods/event/event-row/component-test.js b/tests/integration/pods/event/event-row/component-test.js deleted file mode 100644 index 888ac7e775d3fb..00000000000000 --- a/tests/integration/pods/event/event-row/component-test.js +++ /dev/null @@ -1,94 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupComponentTest } from 'ember-mocha'; -import hbs from 'htmlbars-inline-precompile'; -import Ember from 'ember'; - -describe('Integration: EventEventRowComponent', function() { - setupComponentTest('event/event-row', { - integration: true - }); - - it('should render an event', function() { - var event = Ember.Object.create({ - date: new Date(2001, 0, 1), - title: 'a title', - description: 'a description', - link: 'a link' - }); - this.set('model', event); - this.render(hbs`{{event/event-row item=model}}`); - var renderedText = this.$('.expandable-list').text(); - expect(renderedText).to.contain('a title'); - expect(renderedText).to.contain('lun. 01 ene. 00:00h'); - expect(renderedText).not.to.contain('a description'); - }); - - it('should render a selected event as expanded', function(){ - var event = Ember.Object.create({ - id: '1', - date: new Date(2001, 0, 1), - title: 'a title', - description: 'a description', - link: 'a link' - }); - var selected = Ember.Object.create({ id: event.get('id') }); - - this.set('model', event); - this.set('selected', selected); - this.render(hbs`{{event/event-row item=model selectedItem=selected}}`); - var renderedText = this.$('.expandable-list').text(); - expect(renderedText).to.contain('a title'); - expect(renderedText).to.contain('lun. 01 ene. 00:00h'); - expect(renderedText).to.contain('a description'); - }); - - it('should shorten long event titles', function(){ - var event = Ember.Object.create({ - date: new Date(2001, 0, 1), - title: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.', - }); - - this.set('model', event); - this.render(hbs`{{event/event-row item=model}}`); - var renderedText = this.$('.expandable-list').text(); - expect(renderedText).to.contain('Lorem ipsum dolor sit amet, consectetur adipiscing elit...'); - }); - - it('should trigger expand action on clicking the title', function(){ - var event = Ember.Object.create({ - id: '1', - date: new Date(2001, 0, 1), - title: 'a title', - description: 'a description', - }); - - this.set('model', event); - this.render(hbs`{{event/event-row item=model expandAction='expand'}}`); - let expandTrigged = false; - this.on('expand', e => { expandTrigged = true; expect(e).to.equal(event); }); - - this.$('.expandable-list .title').click(); - expect(expandTrigged).to.be.true; - }); - - it('should trigger collapse action on clicking the title if event was selected', function(){ - var event = Ember.Object.create({ - id: '1', - date: new Date(2001, 0, 1), - title: 'a title', - description: 'a description', - }); - var selected = Ember.Object.create({id: event.get('id')}); - - this.set('model', event); - this.set('selected', selected); - this.render(hbs`{{event/event-row item=model selectedItem=selected collapseAction='collapse'}}`); - let collapseTrigged = false; - this.on('collapse', e => { collapseTrigged = true; expect(e).to.equal(event); }); - - this.$('.expandable-list .title').click(); - expect(collapseTrigged).to.be.true; - }); -}); diff --git a/tests/integration/pods/event/form-field/component-test.js b/tests/integration/pods/event/form-field/component-test.js deleted file mode 100644 index 61253f2c56e188..00000000000000 --- a/tests/integration/pods/event/form-field/component-test.js +++ /dev/null @@ -1,27 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { setupComponentTest } from 'ember-mocha'; -import { describe, it } from 'mocha'; -import hbs from 'htmlbars-inline-precompile'; - -describe('Integration: EventFormFieldComponent', function() { - setupComponentTest('event/form-field', { - integration: true - }); - - describe('textarea', function() { - it('renders a textarea', function() { - this.render(hbs`{{event/form-field type='textarea' name='a-name' label='a label'}}`); - expect(this.$('label').text()).to.eq('a label'); - expect(this.$('textarea[name="a-name"]')).to.have.length(1); - }); - - it('renders a growing textarea with autosize injected property', function(){ - let wasCalled = false; - this.set('autosize', function(){ wasCalled = true; }); - this.render(hbs`{{event/form-field type='textarea' autosize=autosize}}`); - - expect(wasCalled).to.be.true; - }); - }); -}); diff --git a/tests/integration/pods/event/new-event-form/component-test.js b/tests/integration/pods/event/new-event-form/component-test.js deleted file mode 100644 index f66734c3855b1f..00000000000000 --- a/tests/integration/pods/event/new-event-form/component-test.js +++ /dev/null @@ -1,86 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupComponentTest } from 'ember-mocha'; -import hbs from 'htmlbars-inline-precompile'; -import Ember from 'ember'; -import { openDatepicker } from 'ember-pikaday/helpers/pikaday'; - -describe('Integration: NewEventFormComponent', function() { - setupComponentTest('event/new-event-form', { - integration: true - }); - - it('should render a form with disabled submit button', function() { - this.render(hbs`{{event/new-event-form}}`); - expect(this.$('form')).to.have.length(1); - expect(this.$('.button.-primary:disabled')).to.have.length(1); - }); - - - it('should enable submit button when model is valid', function(){ - - let event = Ember.Object.create({ - isValid: true - }); - - this.set('model', event); - this.render(hbs`{{event/new-event-form event=model}}`); - this.$('input[name="title"]').val('a title').change(); - expect(this.$('.button.-primary:disabled')).to.have.length(0); - expect(this.get('model.title')).to.equal('a title'); - - }); - - it('should fill the event with form data', function(){ - let event = Ember.Object.create({}); - - this.set('model', event); - this.render(hbs`{{event/new-event-form event=model}}`); - - this.$('input[name="title"]').val('a title').change(); - expect(this.get('model.title')).to.equal('a title'); - - this.$('textarea[name="description"]').val('a description').change(); - expect(this.get('model.description')).to.equal('a description'); - - this.$('input[name="link"]').val('a link').change(); - expect(this.get('model.link')).to.equal('a link'); - - this.$('input[name="hashtag"]').val('a hashtag').change(); - expect(this.get('model.hashtag')).to.equal('a hashtag'); - - var datePicker = openDatepicker(this.$('input[name="date"]')); - var now = new Date(); - datePicker.selectDate(now); - //we ignore time as it is a separate property - expect(this.get('model.date').toDateString()).to.equal(now.toDateString()); - - this.$('input[name="time"]').val('a time').change(); - expect(this.get('model.time')).to.equal('a time'); - - }); - - it('on submit should send an action with an event with all the values', function(){ - let event = Ember.Object.create({ - title: 'a title', - isValid: true - }); - let trigged = false; - this.set('model', event); - this.set('myAction', () => { trigged = true; }); - this.render(hbs`{{event/new-event-form event=model onSubmit=(action myAction)}}`); - this.$('.button.-primary').click(); - expect(trigged).to.be.true; - }); - - /* - it('should show the chrome extention hint if link is supported', function(){ - this.render(hbs`{{event/new-event-form}}`); - var supportedLink = 'http://www.meetup.com/anything'; - this.$('input[name="link"]').val(supportedLink).change(); - expect(this.$('.hint').text()).to.contain('prueba la extension de Chrome'); - //needs a wait.then() { expect } - }); - */ -}); diff --git a/tests/integration/pods/job/job-row/component-test.js b/tests/integration/pods/job/job-row/component-test.js deleted file mode 100644 index 4f983c6e767cee..00000000000000 --- a/tests/integration/pods/job/job-row/component-test.js +++ /dev/null @@ -1,52 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupComponentTest } from 'ember-mocha'; -import hbs from 'htmlbars-inline-precompile'; -import Ember from 'ember'; - -describe('Integration: JobRowComponent', function() { - setupComponentTest('job/job-row', { - integration: true - }); - - it('should render a job', function() { - var job = Ember.Object.create({ - published_at: new Date(2001, 0, 1), - title: 'a title', - description: 'a description', - tags: ['one', 'two'], - link: 'a link' - }); - this.set('model', job); - this.render(hbs`{{job/job-row item=model}}`); - var renderedText = this.$('.expandable-list').text(); - expect(renderedText).to.contain('a title'); - expect(renderedText).to.contain('one'); - expect(renderedText).to.contain('two'); - expect(renderedText).not.to.contain('a description'); - }); - - it('should render a selected job as expanded', function(){ - var job = Ember.Object.create({ - id: '1', - date: new Date(2001, 0, 1), - title: 'a title', - description: 'a description', - tags: ['one', 'two'], - how_to_apply: 'how to apply', - salary: 'salary', - link: 'a link' - }); - var selected = Ember.Object.create({ id: job.get('id') }); - - this.set('model', job); - this.set('selected', selected); - this.render(hbs`{{job/job-row item=model selectedItem=selected}}`); - var renderedText = this.$('.expandable-list').text(); - expect(renderedText).to.contain('a title'); - expect(renderedText).to.contain('a description'); - expect(renderedText).to.contain('salary'); - expect(renderedText).to.contain('how to apply'); - }); -}); diff --git a/tests/integration/pods/job/new-form/component-test.js b/tests/integration/pods/job/new-form/component-test.js deleted file mode 100644 index dc50c427fef84b..00000000000000 --- a/tests/integration/pods/job/new-form/component-test.js +++ /dev/null @@ -1,84 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupComponentTest } from 'ember-mocha'; -import hbs from 'htmlbars-inline-precompile'; -import Ember from 'ember'; - -describe('Integration: JobNewFormComponent', function() { - setupComponentTest('job/new-form', { - integration: true - }); - - it('should render a form with disabled submit button', function() { - this.render(hbs`{{job/new-form}}`); - expect(this.$('form')).to.have.length(1); - expect(this.$('.button.-primary:disabled')).to.have.length(1); - }); - - - it('should enable submit button when model is valid', function(){ - var job = Ember.Object.create({ - isValid: true - }); - - this.set('job', job); - this.render(hbs`{{job/new-form job=job}}`); - expect(this.$('.button.-primary:disabled')).to.have.length(0); - }); - - it('on submit should call onSubmit', function(){ - var job = Ember.Object.create({ - isValid: true - }); - this.set('job', job); - this.set('myAction', () => { - var wasCalled = true; - expect(wasCalled).to.be.true; - }); - this.render(hbs`{{job/new-form job=job onSubmit=(action myAction)}}`); - - this.$('.button.-primary').click(); - }); - - - it('should fill the event with form data', function(){ - let job = Ember.Object.create({ - company: Ember.Object.create({}) - }); - - this.set('job', job); - this.render(hbs`{{job/new-form job=job}}`); - - this.$('input[name="title"]').val('a title').change(); - expect(this.get('job.title')).to.equal('a title'); - - this.$('textarea[name="description"]').val('a description').change(); - expect(this.get('job.description')).to.equal('a description'); - - this.$('input[name="tag"]').val('a, b, c').blur(); - expect(this.get('job.tags')).to.eql(['a','b','c']); - - this.$('input[name="salary"]').val('a salary').change(); - expect(this.get('job.salary')).to.eql('a salary'); - - this.$('input[name="how-to-apply"]').val('how to apply').change(); - expect(this.get('job.how_to_apply')).to.eql('how to apply'); - - this.$('input[name="link"]').val('offer link').change(); - expect(this.get('job.link')).to.eql('offer link'); - - this.$('input[name="email"]').val('email').change(); - expect(this.get('job.contactEmail')).to.eql('email'); - - this.$('input[name="company-name"]').val('company name').change(); - expect(this.get('job.company.name')).to.eql('company name'); - - this.$('input[name="company-link"]').val('company link').change(); - expect(this.get('job.company.link')).to.eql('company link'); - - this.$('input[name="company-twitter"]').val('company twitter').change(); - expect(this.get('job.company.twitter')).to.eql('company twitter'); - - }); -}); diff --git a/tests/test-helper.js b/tests/test-helper.js deleted file mode 100644 index bbe42fab27306d..00000000000000 --- a/tests/test-helper.js +++ /dev/null @@ -1,4 +0,0 @@ -import resolver from './helpers/resolver'; -import { setResolver } from 'ember-mocha'; - -setResolver(resolver); diff --git a/tests/unit/.gitkeep b/tests/unit/.gitkeep deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/tests/unit/initializers/register-autosize-test.js b/tests/unit/initializers/register-autosize-test.js deleted file mode 100644 index 6f9c057a8a6e3b..00000000000000 --- a/tests/unit/initializers/register-autosize-test.js +++ /dev/null @@ -1,36 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { - describe, - it, - beforeEach -} from 'mocha'; -import Ember from 'ember'; -import { initialize } from 'vlc-tech-hub/initializers/register-autosize'; -import sinon from 'sinon'; - -describe('RegisterAutosizeInitializer', function() { - let application; - - beforeEach(function() { - Ember.run(function() { - application = Ember.Application.create(); - application.deferReadiness(); - }); - }); - - it('registers autosize:main', function() { - initialize(application); - expect(application.hasRegistration('autosize:main')).to.be.true; - }); - - it('injects autosize:main to event/form-field', function() { - sinon.stub(application, 'inject'); - initialize(application); - - let container = 'component:event/form-field'; - let name = 'autosize'; - let injected = 'autosize:main'; - expect(application.inject.calledWith(container, name, injected)).to.be.true; - }); -}); diff --git a/tests/unit/instance-initializers/config-moment-test.js b/tests/unit/instance-initializers/config-moment-test.js deleted file mode 100644 index 97809096747fde..00000000000000 --- a/tests/unit/instance-initializers/config-moment-test.js +++ /dev/null @@ -1,35 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { - describe, - it, - beforeEach, - afterEach -} from 'mocha'; -import Ember from 'ember'; -import { initialize } from 'vlc-tech-hub/instance-initializers/config-moment'; -import startApp from '../../helpers/start-app'; -import destroyApp from '../../helpers/destroy-app'; - -describe('ConfigMomentInstanceInitializer', function() { - let application; - let appInstance; - - beforeEach(function() { - application = startApp(); - appInstance = application.buildInstance(); - }); - - afterEach(function() { - Ember.run(appInstance, 'destroy'); - destroyApp(application); - }); - - it('configures moment locale and timezone', function() { - initialize(appInstance); - - var moment = appInstance.lookup('service:moment'); - expect(moment.get('locale')).to.eq('es'); - expect(moment.get('timeZone')).to.eq('Europe/Madrid'); - }); -}); diff --git a/tests/unit/pods/event/archive/month/detail/route-test.js b/tests/unit/pods/event/archive/month/detail/route-test.js deleted file mode 100644 index 2e762c3ae8cf93..00000000000000 --- a/tests/unit/pods/event/archive/month/detail/route-test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupTest } from 'ember-mocha'; -import Ember from 'ember'; -import sinon from 'sinon'; - -describe('EventArchiveMonthDetailRoute', function() { - setupTest('route:event/archive/month/detail', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] - }); - - it('should create meta description based on model.excerpt', function(){ - let route = this.subject(); - let model = Ember.Object.create({excerpt: 'this is the excerpt'}); - sinon.stub(route, 'modelFor').returns(model); - - let tags = route.headTags(); - let description = tags.find(t => t.attrs.name === 'description'); - expect(description.attrs.content).to.eql('this is the excerpt'); - }); -}); diff --git a/tests/unit/pods/event/archive/month/route-test.js b/tests/unit/pods/event/archive/month/route-test.js deleted file mode 100644 index d16835beaf54f7..00000000000000 --- a/tests/unit/pods/event/archive/month/route-test.js +++ /dev/null @@ -1,33 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupTest } from 'ember-mocha'; -import Ember from 'ember'; -import sinon from 'sinon'; - -describe('EventArchiveMonthRoute', function() { - setupTest('route:event/archive/month', { - // Specify the other units that are required for this test. - //needs: ['controller:event/upcoming'] - }); - - it('should transition to detail on expand', function() { - let route = this.subject(); - sinon.stub(route, 'transitionTo'); - - route.send('expand', Ember.Object.create({id: 'an id' })); - - let destination = 'event.archive.month.detail'; - expect(route.transitionTo.calledWith(destination)).to.be.true; - }); - - it('should transition to general list on collapse', function() { - let route = this.subject(); - sinon.stub(route, 'transitionTo'); - - route.send('collapse', Ember.Object.create({id: 'an id' })); - - let destination = 'event.archive.month'; - expect(route.transitionTo.calledWith(destination)).to.be.true; - }); -}); diff --git a/tests/unit/pods/event/archive/route-test.js b/tests/unit/pods/event/archive/route-test.js deleted file mode 100644 index 7789222661f5d6..00000000000000 --- a/tests/unit/pods/event/archive/route-test.js +++ /dev/null @@ -1,39 +0,0 @@ -/* jshint expr:true */ -import moment from 'moment'; -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupTest } from 'ember-mocha'; -import sinon from 'sinon'; - -describe('EventArchiveRoute', function() { - setupTest('route:event/archive', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] - }); - - it('redirects to current year, month archive route', function() { - let route = this.subject(); - sinon.stub(route, 'transitionTo'); - let currentTransiton = { targetName: 'anything.not.to.month.detail'}; - route.beforeModel(currentTransiton); - - let destination = 'event.archive.month'; - let year = moment().format('YYYY'); - let month = moment().format('MM'); - expect(route.transitionTo.calledWith(destination, year, month)).to.be.true; - }); - - it('does not redirect if current transition is month detail', function(){ - - let route = this.subject(); - sinon.stub(route, 'transitionTo'); - let currentTransiton = { targetName: 'event.archive.month.detail'}; - route.beforeModel(currentTransiton); - - let destination = 'event.archive.month'; - let year = moment().format('YYYY'); - let month = moment().format('MM'); - expect(route.transitionTo.calledWith(destination, year, month)).to.be.false; - - }); -}); diff --git a/tests/unit/pods/event/model-test.js b/tests/unit/pods/event/model-test.js deleted file mode 100644 index 0d10ca82624ce3..00000000000000 --- a/tests/unit/pods/event/model-test.js +++ /dev/null @@ -1,34 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import moment from 'moment'; -import { it, describe } from 'mocha'; -import { setupModelTest } from 'ember-mocha'; - -describe('Unit | Model | event', function() { - setupModelTest('event', { - // Specify the other units that are required for this test. - - }); - - it('should know if it is a past event', function() { - let model = this.subject(); - var lastYear = moment().add(-1, 'year'); - model.set('date', lastYear); - expect(model.get('isPastEvent')).to.be.true; - }); - - it('should change the time in Madrid timezone', function(){ - let model = this.subject(); - var date = new Date('2000-01-01T12:00:00-01'); - model.set('date', date); - model.set('time', '18:30'); - var madridDate = moment.tz('2000-01-01 18:30','YYYY-MM-DD HH:mm','Europe/Madrid'); - expect(model.get('time').toString()).to.equal(madridDate.format('HH:mm')); - }); - - it('should return first paragraph as excerpt', function(){ - let model = this.subject(); - model.set('description','first paragraph\nsecond paragraph'); - expect(model.get('excerpt')).to.equal('first paragraph'); - }); -}); diff --git a/tests/unit/pods/event/new/controller-test.js b/tests/unit/pods/event/new/controller-test.js deleted file mode 100644 index eec5366ca3cd83..00000000000000 --- a/tests/unit/pods/event/new/controller-test.js +++ /dev/null @@ -1,37 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { setupTest } from 'ember-mocha'; -import { - beforeEach, - afterEach, - it, - describe -} from 'mocha'; -import sinon from 'sinon'; - -describe('EventNewController', function() { - setupTest('controller:event/new', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] - }); - - //create a sandbox as we stub global functions - let sandbox; - - beforeEach(function(){ - sandbox = sinon.sandbox.create(); - }); - - afterEach(function(){ - sandbox.restore(); - }); - - it('scrolls up to to after saving', function() { - sandbox.stub(window, 'scrollTo'); - let controller = this.subject(); - - controller.postSave(true); - - expect(window.scrollTo.called).to.be.true; - }); -}); diff --git a/tests/unit/pods/job/list/controller-test.js b/tests/unit/pods/job/list/controller-test.js deleted file mode 100644 index 2722e57b21f259..00000000000000 --- a/tests/unit/pods/job/list/controller-test.js +++ /dev/null @@ -1,29 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupTest } from 'ember-mocha'; -import Ember from 'ember'; - -describe('JobListController', function() { - setupTest('controller:job/list', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] - }); - - it('sorts jobs by publish_at desc', function() { - let jobJanuary = Ember.Object.create({ - published_at: new Date(2001, 0, 1), - isPublished: true, - title: 'january job offer' - }); - let jobFebruary = Ember.Object.create({ - published_at: new Date(2001, 1, 1), - isPublished: true, - title: 'february job offer' - }); - let controller = this.subject(); - controller.set('model', [jobJanuary, jobFebruary]); - expect(controller.get('jobs').length).to.eq(2); - expect(controller.get('jobs.firstObject.title')).to.eq('february job offer'); - }); -}); diff --git a/tests/unit/pods/job/list/detail/route-test.js b/tests/unit/pods/job/list/detail/route-test.js deleted file mode 100644 index 5f0ca15563ed8e..00000000000000 --- a/tests/unit/pods/job/list/detail/route-test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupTest } from 'ember-mocha'; -import Ember from 'ember'; -import sinon from 'sinon'; - -describe('JobListDetailRoute', function() { - setupTest('route:job/list/detail', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] - }); - - it('should create meta description based on model.excerpt', function(){ - let route = this.subject(); - let model = Ember.Object.create({excerpt: 'this is the excerpt'}); - sinon.stub(route, 'modelFor').returns(model); - - let tags = route.headTags(); - let description = tags.find(t => t.attrs.name === 'description'); - expect(description.attrs.content).to.eql('this is the excerpt'); - }); -}); diff --git a/tests/unit/pods/job/model-test.js b/tests/unit/pods/job/model-test.js deleted file mode 100644 index 83e32c6840b2ad..00000000000000 --- a/tests/unit/pods/job/model-test.js +++ /dev/null @@ -1,31 +0,0 @@ -/* jshint expr:true */ -import { expect } from 'chai'; -import { it, describe } from 'mocha'; -import { setupModelTest } from 'ember-mocha'; - -describe('Unit | Model | job', function() { - setupModelTest('job', { - needs: [] - }); - - it('should return first paragraph as excerpt', function(){ - let model = this.subject(); - model.set('description','first paragraph\nsecond paragraph'); - expect(model.get('excerpt')).to.equal('first paragraph'); - }); - - it('should validate boring required fields', function() { - var model = this.subject(); - expect(model.get('isValid')).to.be.false; - - model.setProperties({ - 'title': 'a title', - 'description': 'a description', - 'company.name': 'company name', - 'company.link': 'company link', - 'contactEmail': 'an email', - 'salary': 'a salary' - }); - expect(model.get('isValid')).to.be.true; - }); -}); diff --git a/vendor/.gitkeep b/vendor/.gitkeep deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/vendor/css/basscss.css b/vendor/css/basscss.css deleted file mode 100644 index 6082c80db82bf8..00000000000000 --- a/vendor/css/basscss.css +++ /dev/null @@ -1,857 +0,0 @@ -/*! Basscss | http://basscss.com | MIT License */ - -body{ margin:0 } -img{ max-width:100% } -svg{ max-height:100% } - -input, -select, -textarea, -fieldset{ - font-family: inherit; - font-size: 1rem; - box-sizing:border-box; - margin-top:0; - margin-bottom:0; -} - -label{ - vertical-align:middle; -} - -input[type=text], -input[type=date], -input[type=datetime], -input[type=datetime-local], -input[type=email], -input[type=month], -input[type=number], -input[type=password], -input[type=search], -input[type=tel], -input[type=time], -input[type=url], -input[type=week]{ - height: 2.25rem; - padding: .5rem .5rem; - vertical-align:middle; - -webkit-appearance:none; -} - -select{ - line-height:1.75; - padding: .5rem .5rem; -} - -select:not([multiple]){ - height: 2.25rem; - vertical-align:middle; -} - -textarea{ - line-height:1.75; - padding: .5rem .5rem; -} - -:root{ - -} - -table{ - border-collapse:separate; - border-spacing:0; - max-width:100%; - width:100%; -} - -th{ - text-align:left; - font-weight: bold; -} - -th, -td{ - padding: .25rem 1rem; - line-height:inherit; -} - -th{ vertical-align:bottom } -td{ vertical-align:top } - -body{ - font-family: 'Helvetica Neue', Helvetica, sans-serif; - line-height: 1.5; - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6{ - font-family: 'Helvetica Neue', Helvetica, sans-serif; - font-weight: bold; - line-height: 1.25; - margin-top: 1em; - margin-bottom: .5em; -} - -p{ - margin-top: 0; - margin-bottom: 1rem; -} - -dl, ol, ul{ - margin-top: 0; - margin-bottom: 1rem; -} - -pre, code, samp{ - font-family: 'Source Code Pro', Consolas, monospace; - font-size: inherit; -} - -pre{ - margin-top: 0; - margin-bottom: 1rem; - overflow-x:scroll; -} - -h1{ font-size: 2rem } -h2{ font-size: 1.5rem } -h3{ font-size: 1.25rem } -h4{ font-size: 1rem } -h5{ font-size: .875rem } -h6{ font-size: .75rem } - -body{ - color: #111; - background-color: #fff; -} - -a{ - color: #0074d9; - text-decoration: none; -} - -a:hover{ - text-decoration: underline; -} - -pre, code{ - background-color: transparent; - border-radius: 3px; -} - -hr{ - border:0; - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: rgba(0,0,0,.125); -} - -.field{ - border-style:solid; - border-width: 1px; - border-color: rgba(0,0,0,.125); - border-radius: 3px; -} - -.field:focus, -.field.is-focused{ - outline:none; - border-color: #0074d9; - box-shadow: 0 0 0 2px rgba(0, 116, 217, 0.5); -} - -.field:disabled, -.field.is-disabled{ - background-color: rgba(0,0,0,.125); - opacity:.5; -} - -.field:-moz-read-only:not(select), -.field.is-read-only{ - background-color: rgba(0,0,0,.125); -} - -.field:read-only:not(select), -.field.is-read-only{ - background-color: rgba(0,0,0,.125); -} - - -.field.is-success{ - border-color: #2ecc40; -} - -.field.is-success:focus, -.field.is-success.is-focused{ - box-shadow: 0 0 0 2px rgba(46, 204, 64, 0.5); -} - -.field.is-warning{ - border-color: #ffdc00; -} - -.field.is-warning:focus, -.field.is-warning.is-focused{ - box-shadow: 0 0 0 2px rgba(255, 220, 0, 0.5); -} - -.field:invalid, -.field.is-error{ - border-color: #ff4136; -} - -.field:invalid:focus, -.field:invalid.is-focused, -.field.is-error:focus, -.field.is-error.is-focused{ - box-shadow: 0 0 0 2px rgba(255, 65, 54, 0.5); -} - -.table-light th, -.table-light td{ - border-bottom-width: 1px; - border-bottom-style:solid; - border-bottom-color: rgba(0,0,0,.125); -} - -.table-light tr:last-child td{ - border-bottom:0; -} - -.btn{ - font-family: inherit; - font-size: inherit; - font-weight: bold; - font-weight: bold; - text-decoration:none; - cursor:pointer; - display:inline-block; - line-height: 1.125rem; - padding: .5rem 1rem; - margin:0; - height:auto; - border: 1px solid transparent; - vertical-align:middle; - -webkit-appearance:none; - color:inherit; - background-color:transparent; -} - -.btn:hover{ - text-decoration:none; -} - -.btn:focus{ - outline:none; - border-color: rgba(0,0,0,.125); - box-shadow: 0 0 0 3px rgba(0,0,0,.25); -} - -::-moz-focus-inner{ - border:0; - padding:0; -} - -.btn-primary{ - color: #fff; - background-color: #0074d9; - border-radius: 3px; -} - -.btn-primary:hover{ - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.0625); -} - -.btn-primary:active{ - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.125), - inset 0 3px 4px 0 rgba(0,0,0,.25), - 0 0 1px rgba(0,0,0,.125); -} - -.btn-primary:disabled, -.btn-primary.is-disabled{ - opacity:.5; -} - -.btn-outline, -.btn-outline:hover{ - border-color:currentcolor; -} - -.btn-outline{ - border-radius: 3px; -} - -.btn-outline:hover{ - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.0625); -} - -.btn-outline:active{ - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.125), - inset 0 3px 4px 0 rgba(0,0,0,.25), - 0 0 1px rgba(0,0,0,.125); -} - -.btn-outline:disabled, -.btn-outline.is-disabled{ - opacity:.5; -} - -.h1{ font-size: 2rem } -.h2{ font-size: 1.5rem } -.h3{ font-size: 1.25rem } -.h4{ font-size: 1rem } -.h5{ font-size: .875rem } -.h6{ font-size: .75rem } - -.font-family-inherit{ font-family:inherit } -.font-size-inherit{ font-size:inherit } -.text-decoration-none{ text-decoration:none } - -.bold{ font-weight: bold; font-weight: bold } -.regular{ font-weight:normal } -.italic{ font-style:italic } -.caps{ text-transform:uppercase; letter-spacing: .2em; } - -.left-align{ text-align:left } -.center{ text-align:center } -.right-align{ text-align:right } -.justify{ text-align:justify } - -.nowrap{ white-space:nowrap } -.break-word{ word-wrap:break-word } - -.line-height-1{ line-height: 1 } -.line-height-2{ line-height: 1.125 } -.line-height-3{ line-height: 1.25 } -.line-height-4{ line-height: 1.5 } - -.list-style-none{ list-style:none } -.underline{ text-decoration:underline } - -.truncate{ - max-width:100%; - overflow:hidden; - text-overflow:ellipsis; - white-space:nowrap; -} - -.list-reset{ - list-style:none; - padding-left:0; -} - -.inline{ display:inline } -.block{ display:block } -.inline-block{ display:inline-block } -.table{ display:table } -.table-cell{ display:table-cell } - -.overflow-hidden{ overflow:hidden } -.overflow-scroll{ overflow:scroll } -.overflow-auto{ overflow:auto } - -.clearfix:before, -.clearfix:after{ - content:" "; - display:table -} -.clearfix:after{ clear:both } - -.left{ float:left } -.right{ float:right } - -.fit{ max-width:100% } - -.border-box{ box-sizing:border-box } - -.align-baseline{ vertical-align:baseline } -.align-top{ vertical-align:top } -.align-middle{ vertical-align:middle } -.align-bottom{ vertical-align:bottom } - -.m0{ margin:0 } -.mt0{ margin-top:0 } -.mr0{ margin-right:0 } -.mb0{ margin-bottom:0 } -.ml0{ margin-left:0 } - -.m1{ margin: .5rem } -.mt1{ margin-top: .5rem } -.mr1{ margin-right: .5rem } -.mb1{ margin-bottom: .5rem } -.ml1{ margin-left: .5rem } - -.m2{ margin: 1rem } -.mt2{ margin-top: 1rem } -.mr2{ margin-right: 1rem } -.mb2{ margin-bottom: 1rem } -.ml2{ margin-left: 1rem } - -.m3{ margin: 2rem } -.mt3{ margin-top: 2rem } -.mr3{ margin-right: 2rem } -.mb3{ margin-bottom: 2rem } -.ml3{ margin-left: 2rem } - -.m4{ margin: 4rem } -.mt4{ margin-top: 4rem } -.mr4{ margin-right: 4rem } -.mb4{ margin-bottom: 4rem } -.ml4{ margin-left: 4rem } - -.mxn1{ margin-left: -.5rem; margin-right: -.5rem; } -.mxn2{ margin-left: -1rem; margin-right: -1rem; } -.mxn3{ margin-left: -2rem; margin-right: -2rem; } -.mxn4{ margin-left: -4rem; margin-right: -4rem; } - -.mx-auto{ margin-left:auto; margin-right:auto; } - -.p0{ padding:0 } - -.p1{ padding: .5rem } -.py1{ padding-top: .5rem; padding-bottom: .5rem } -.px1{ padding-left: .5rem; padding-right: .5rem } - -.p2{ padding: 1rem } -.py2{ padding-top: 1rem; padding-bottom: 1rem } -.px2{ padding-left: 1rem; padding-right: 1rem } - -.p3{ padding: 2rem } -.py3{ padding-top: 2rem; padding-bottom: 2rem } -.px3{ padding-left: 2rem; padding-right: 2rem } - -.p4{ padding: 4rem } -.py4{ padding-top: 4rem; padding-bottom: 4rem } -.px4{ padding-left: 4rem; padding-right: 4rem } - -.relative{ position:relative } -.absolute{ position:absolute } -.fixed{ position:fixed } - -.top-0{ top:0 } -.right-0{ right:0 } -.bottom-0{ bottom:0 } -.left-0{ left:0 } - -.z1{ z-index: 1 } -.z2{ z-index: 2 } -.z3{ z-index: 3 } -.z4{ z-index: 4 } - -.sm-show, .md-show, .lg-show{ - display:none !important -} - -@media (min-width: 40em){ - .sm-show{ display:block !important } -} - -@media (min-width: 52em){ - .md-show{ display:block !important } -} - -@media (min-width: 64em){ - .lg-show{ display:block !important } -} - - -@media (min-width: 40em){ - .sm-hide{ display:none !important } -} - -@media (min-width: 52em){ - .md-hide{ display:none !important } -} - -@media (min-width: 64em){ - .lg-hide{ display:none !important } -} - -.display-none{ display:none !important } - -.hide{ - position:absolute !important; - height:1px; - width:1px; - overflow:hidden; - clip:rect(1px, 1px, 1px, 1px); -} - -.container{ - max-width: 64rem; - margin-left:auto; - margin-right:auto; -} -.col{ - float:left; - box-sizing:border-box; -} - -.col-right{ - float:right; - box-sizing:border-box; -} - -.col-1{ - width:8.33333%; -} - -.col-2{ - width:16.66667%; -} - -.col-3{ - width:25%; -} - -.col-4{ - width:33.33333%; -} - -.col-5{ - width:41.66667%; -} - -.col-6{ - width:50%; -} - -.col-7{ - width:58.33333%; -} - -.col-8{ - width:66.66667%; -} - -.col-9{ - width:75%; -} - -.col-10{ - width:83.33333%; -} - -.col-11{ - width:91.66667%; -} - -.col-12{ - width:100%; -} -@media (min-width: 40em){ - - .sm-col{ - float:left; - box-sizing:border-box; - } - - .sm-col-right{ - float:right; - box-sizing:border-box; - } - - .sm-col-1{ - width:8.33333%; - } - - .sm-col-2{ - width:16.66667%; - } - - .sm-col-3{ - width:25%; - } - - .sm-col-4{ - width:33.33333%; - } - - .sm-col-5{ - width:41.66667%; - } - - .sm-col-6{ - width:50%; - } - - .sm-col-7{ - width:58.33333%; - } - - .sm-col-8{ - width:66.66667%; - } - - .sm-col-9{ - width:75%; - } - - .sm-col-10{ - width:83.33333%; - } - - .sm-col-11{ - width:91.66667%; - } - - .sm-col-12{ - width:100%; - } - -} -@media (min-width: 52em){ - - .md-col{ - float:left; - box-sizing:border-box; - } - - .md-col-right{ - float:right; - box-sizing:border-box; - } - - .md-col-1{ - width:8.33333%; - } - - .md-col-2{ - width:16.66667%; - } - - .md-col-3{ - width:25%; - } - - .md-col-4{ - width:33.33333%; - } - - .md-col-5{ - width:41.66667%; - } - - .md-col-6{ - width:50%; - } - - .md-col-7{ - width:58.33333%; - } - - .md-col-8{ - width:66.66667%; - } - - .md-col-9{ - width:75%; - } - - .md-col-10{ - width:83.33333%; - } - - .md-col-11{ - width:91.66667%; - } - - .md-col-12{ - width:100%; - } - -} -@media (min-width: 64em){ - - .lg-col{ - float:left; - box-sizing:border-box; - } - - .lg-col-right{ - float:right; - box-sizing:border-box; - } - - .lg-col-1{ - width:8.33333%; - } - - .lg-col-2{ - width:16.66667%; - } - - .lg-col-3{ - width:25%; - } - - .lg-col-4{ - width:33.33333%; - } - - .lg-col-5{ - width:41.66667%; - } - - .lg-col-6{ - width:50%; - } - - .lg-col-7{ - width:58.33333%; - } - - .lg-col-8{ - width:66.66667%; - } - - .lg-col-9{ - width:75%; - } - - .lg-col-10{ - width:83.33333%; - } - - .lg-col-11{ - width:91.66667%; - } - - .lg-col-12{ - width:100%; - } - -} - -.flex{ display:-webkit-box; display:-webkit-flex; display:-ms-flexbox; display:flex } - -.flex-column{ -webkit-box-orient:vertical; -webkit-box-direction:normal; -webkit-flex-direction:column; -ms-flex-direction:column; flex-direction:column } -.flex-wrap{ -webkit-flex-wrap:wrap; -ms-flex-wrap:wrap; flex-wrap:wrap } - -.flex-center{ -webkit-box-align:center; -webkit-align-items:center; -ms-flex-align:center; -ms-grid-row-align:center; align-items:center } -.flex-baseline{ -webkit-box-align:baseline; -webkit-align-items:baseline; -ms-flex-align:baseline; -ms-grid-row-align:baseline; align-items:baseline } -.flex-stretch{ -webkit-box-align:stretch; -webkit-align-items:stretch; -ms-flex-align:stretch; -ms-grid-row-align:stretch; align-items:stretch } -.flex-start{ -webkit-box-align:start; -webkit-align-items:flex-start; -ms-flex-align:start; -ms-grid-row-align:flex-start; align-items:flex-start } -.flex-end{ -webkit-box-align:end; -webkit-align-items:flex-end; -ms-flex-align:end; -ms-grid-row-align:flex-end; align-items:flex-end } - -.flex-justify{ -webkit-box-pack:justify; -webkit-justify-content:space-between; -ms-flex-pack:justify; justify-content:space-between } - -.flex-auto{ - -webkit-box-flex:1; - -webkit-flex:1 1 auto; - -ms-flex:1 1 auto; - flex:1 1 auto; - min-width:0; - min-height:0; -} -.flex-grow{ -webkit-box-flex:1; -webkit-flex:1 0 auto; -ms-flex:1 0 auto; flex:1 0 auto } -.flex-none{ -webkit-box-flex:0; -webkit-flex:none; -ms-flex:none; flex:none } - -.flex-first{ -webkit-box-ordinal-group:0; -webkit-order:-1; -ms-flex-order:-1; order:-1 } -.flex-last{ -webkit-box-ordinal-group:100000; -webkit-order:99999; -ms-flex-order:99999; order:99999 } -@media (min-width: 40em){ - .sm-flex{ display:-webkit-box; display:-webkit-flex; display:-ms-flexbox; display:flex } -} -@media (min-width: 52em){ - .md-flex{ display:-webkit-box; display:-webkit-flex; display:-ms-flexbox; display:flex } -} -@media (min-width: 64em){ - .lg-flex{ display:-webkit-box; display:-webkit-flex; display:-ms-flexbox; display:flex } -} - -.border{ - border-style:solid; - border-width: 1px; - border-color: rgba(0,0,0,.125); -} - -.border-top{ - border-top-style:solid; - border-top-width: 1px; - border-top-color: rgba(0,0,0,.125); -} - -.border-right{ - border-right-style:solid; - border-right-width: 1px; - border-right-color: rgba(0,0,0,.125); -} - -.border-bottom{ - border-bottom-style:solid; - border-bottom-width: 1px; - border-bottom-color: rgba(0,0,0,.125); -} - -.border-left{ - border-left-style:solid; - border-left-width: 1px; - border-left-color: rgba(0,0,0,.125); -} - -.border-none{ border:0 } - -.rounded{ border-radius: 3px } -.circle{ border-radius:50% } - -.rounded-top{ border-radius: 3px 3px 0 0 } -.rounded-right{ border-radius: 0 3px 3px 0 } -.rounded-bottom{ border-radius: 0 0 3px 3px } -.rounded-left{ border-radius: 3px 0 0 3px } - -.not-rounded{ border-radius:0 } - -.black{ color: #111 } -.gray{ color: #aaa } -.silver{ color: #ddd } -.white{ color: #fff } - -.aqua{ color: #7fdbff } -.blue{ color: #0074d9 } -.navy{ color: #001f3f } -.teal{ color: #39cccc } -.green{ color: #2ecc40 } -.olive{ color: #3d9970 } -.lime{ color: #01ff70 } - -.yellow{ color: #ffdc00 } -.orange{ color: #ff851b } -.red{ color: #ff4136 } -.fuchsia{ color: #f012be } -.purple{ color: #b10dc9 } -.maroon{ color: #85144b } - -.color-inherit{ color:inherit } -.muted{ opacity:.5 } - -.bg-black{ background-color: #111 } -.bg-gray{ background-color: #aaa } -.bg-silver{ background-color: #ddd } -.bg-white{ background-color: #fff } - -.bg-aqua{ background-color: #7fdbff } -.bg-blue{ background-color: #0074d9 } -.bg-navy{ background-color: #001f3f } -.bg-teal{ background-color: #39cccc } -.bg-green{ background-color: #2ecc40 } -.bg-olive{ background-color: #3d9970 } -.bg-lime{ background-color: #01ff70 } - -.bg-yellow{ background-color: #ffdc00 } -.bg-orange{ background-color: #ff851b } -.bg-red{ background-color: #ff4136 } -.bg-fuchsia{ background-color: #f012be } -.bg-purple{ background-color: #b10dc9 } -.bg-maroon{ background-color: #85144b } - -.bg-darken-1{ background-color: rgba(0,0,0,.0625) } -.bg-darken-2{ background-color: rgba(0,0,0,.125) } -.bg-darken-3{ background-color: rgba(0,0,0,.25) } -.bg-darken-4{ background-color: rgba(0,0,0,.5) } - -.bg-lighten-1{ background-color: rgba(255,255,255,.0625) } -.bg-lighten-2{ background-color: rgba(255,255,255,.125) } -.bg-lighten-3{ background-color: rgba(255,255,255,.25) } -.bg-lighten-4{ background-color: rgba(255,255,255,.5) } - diff --git a/vendor/css/monthly.css b/vendor/css/monthly.css deleted file mode 100644 index fc28814096bd0e..00000000000000 --- a/vendor/css/monthly.css +++ /dev/null @@ -1,435 +0,0 @@ - -/* Overall wrapper */ -.monthly { - background: #F3F3F5; - color: #545454; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - position: relative; -} - -/* Top bar containing title, navigation, and buttons */ -.monthly-header { - position: relative; - text-align: center; - padding: 0.5em; - background: #fff; - height: 3em; - box-sizing: border-box; -} -/* Center area of top bar containing title and buttons */ -.monthly-header-title { - text-transform: uppercase; -} - -/* Buttons for reverting to "today", and closing event list */ -.monthly-header-title a:link, -.monthly-header-title a:visited { - display: inline-block; - border: 1px solid #ccc; - color: #545454; - text-decoration: none; - height: 1.75em; - line-height: 1.65em; - padding: 0 0.65em 0 0.65em; - box-sizing: border-box; - transition: background .1s; -} -/* Add some roundy-ness */ -.monthly-header-title a:first-of-type { - border-top-left-radius: 1em; - border-bottom-left-radius: 1em; -} -.monthly-header-title a:last-of-type { - border-top-right-radius: 1em; - border-bottom-right-radius: 1em; -} -.monthly-header-title a:hover { - background: #8b8b8b; - border: 1px solid #8b8b8b; - color: #fff; -} -.monthly-header-title a:active { - background: #222; - border: 1px solid #222; - transition: none; -} -/* current month/yr block */ -.monthly-header-title-date, -.monthly-header-title-date:hover { - background: #eee!important; - border: 1px solid #ccc!important; - color: #545454!important; - cursor: default; -} -/* Button to reset to current month */ -.monthly-reset { - border-left: 0!important; -} -.monthly-reset::before { - content: '\21BB'; - margin-right: 0.25em; -} -/* Button to return to month view */ -.monthly-cal { - border-right: 0!important; -} -.monthly-cal::before { - content: '\2637'; - margin-right: 0.25em; -} - -/* wrapper for left/right buttons to make the clickable area bigger */ -.monthly-prev, -.monthly-next { - position: absolute; - top: 0; - width: 3em; - height: 100%; - opacity: .5; -} -.monthly-prev { - left: 0; -} -.monthly-next { - right: 0; -} -.monthly-prev:hover, -.monthly-next:hover { - opacity: 1; -} - -/* Arrows */ -.monthly-prev:after, -.monthly-next:after { - content: ''; - position: absolute; - top: 50%; - left: 50%; - border-style: solid; - border-color: #222; - width: 0.6em; - height: 0.6em; - margin: -0.4em 0 0 -0.4em; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); -} -/* Left Arrow */ -.monthly-prev:after{ - border-width: 0 0 0.2em 0.2em; -} -/* Right Arrow */ -.monthly-next:after { - border-width: 0.2em 0.2em 0 0; -} - -/* Day of the week headings */ -.monthly-day-title-wrap { - display: table; - table-layout: fixed; - width: 100%; - background: #fff; - border-bottom: 1px solid #EBEBEB; -} -.monthly-day-title-wrap div { - width: 14.28%!important; - display: table-cell; - box-sizing: border-box; - position: relative; - text-align: center; - text-transform: uppercase; -} - -/* Calendar days wrapper */ -.monthly-day-wrap { - display: table; - table-layout: fixed; - width: 100%; - overflow: hidden; -} -.monthly-week { - display: table-row; - width: 100%; -} -/* Calendar Days */ -.monthly-day, .monthly-day-blank { - width: 14.28%!important; - display: table-cell; - vertical-align: top; - box-sizing: border-box; - position: relative; - color: inherit; - background: #fff; - box-shadow: 0 0 0 1px #EBEBEB; - -webkit-transition: .25s; - transition: .25s; - padding: 0; - text-decoration: none; -} - -/* Trick to make the days' width equal their height */ -.monthly-day:before { - content: ''; - display: block; - padding-top: 100%; - float: left; -} - -/* Hover effect for non event calendar days */ -.monthly-day-wrap > a:hover { - background: #A1C2E3; -} - -/* Days that are part of previous or next month */ -.monthly-day-blank { - background: #F3F3F5; -} - -/* Event calendar day number styles */ -.monthly-day-event > .monthly-day-number { - position: absolute; - line-height: 1em; - top: 0.2em; - left: 0.25em; -} - -/* Non-Event calendar day number styles */ -.monthly-day-pick > .monthly-indicator-wrap { - margin: 0; -} - -.monthly-day-pick > .monthly-day-number:before, -.monthly-day-pick > .monthly-day-number:after { - content: ''; - display: block; - padding-top: calc(50% - 0.8em); - width: 0; - height: 0; -} - -/* Days in the past in "picker" mode */ -.monthly-past-day:after{ - content: ''; - width: 150%; - height: 2px; - -webkit-transform-origin: left top; - -ms-transform-origin: left top; - transform-origin: left top; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); - background: rgba(0, 0, 0, 0.1); - position: absolute; - left: 0; - top: 0; -} -.monthly-past-day:hover { - background: #fff!important; -} - -/* Current day style */ -.monthly-today .monthly-day-number { - color: #FFF; - background: #EA6565; - border-radius: 0.75em; - top: 0.08em; - left: 0.05em; - font-size: 0.9em; - padding: 0; - width: 1.25em; - height: 1.25em; - line-height: 1.25em; - text-align: center; -} -.monthly-day-pick.monthly-today .monthly-day-number { - padding: 0.15em; - margin: calc(50% - 0.7em) auto auto auto; - font-size: 1em; -} - -/* Wrapper around events */ -.monthly-indicator-wrap { - position: relative; - text-align: center; - line-height: 0; - max-width: 1.5em; - margin: 0 auto; - padding-top: 1.2em; -} - -/* Event indicator dots */ -.monthly-day .monthly-event-indicator { - display: inline-block; - margin: 0.05em; - width: 0.5em; - height: 0.5em; - border-radius: 0.25em; - vertical-align: middle; - background: #7BA7CE; -} - -.monthly-day .monthly-event-indicator span { - color: transparent; -} - -.monthly-day .monthly-event-indicator:hover { - cursor: pointer; -} -/* Listing of events under calendar */ -.monthly-event-list { - background: rgba(233, 235, 236, 0.9); - overflow: auto; - position: absolute; - top: 2.5em; - width: 100%; - height: calc(100% - 2.5em); - display: none; - -webkit-transition: .25s; - transition: .25s; - -webkit-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); -} - -/* Days in Events List */ -.monthly-list-item { - position: relative; - padding: 0.5em 0.7em 0.25em 4em; - display: none; - border-top: 1px solid #D6D6D6; - text-align: left; -} - -.monthly-list-item:after{ - padding: 0.4em 1em; - display: block; - margin-bottom: 0.5em; - } - -.monthly-event-list .monthly-today .monthly-event-list-date { - color: #EA6565; -} - -/* Events in Events List */ -.monthly-event-list .listed-event { - display: block; - color: #fff; - padding: 0.4em 1em; - border-radius: 0.2em; - margin-bottom: 0.5em; -} - -.monthly-list-item a:link, .monthly-list-item a:visited { - text-decoration: none; -} - -.item-has-event { - display: block; -} - -.item-has-event:after{ - display: none!important; -} - -.monthly-event-list-date { - width: 4em; - position: absolute; - left: 0; - top: 1.2em; - text-align: center; - font-weight: bold; - line-height: 1.2em; -} - -.monthly-list-time-start, -.monthly-list-time-end { - font-size: .8em; - display: inline-block; -} -.monthly-list-time-end:not(:empty):before { - content: '\2013'; - padding: 0 2px; -} - -/* Events List custom webkit scrollbar */ -.monthly-event-list::-webkit-scrollbar {width: 0.75em;} - -/* Track */ -.monthly-event-list::-webkit-scrollbar-track {background: none;} - -/* Handle */ -.monthly-event-list::-webkit-scrollbar-thumb { - background: #ccc; - border: 1px solid #E9EBEC; - border-radius: 0.5em; -} -.monthly-event-list::-webkit-scrollbar-thumb:hover {background: #555;} - -/* Language-specific. Default is English. */ -.monthly-reset:after { content: 'Today'; } -.monthly-cal:after { content: 'Month'; } -.monthly-list-item:after { content: 'No Events'; } - -.monthly-locale-fr .monthly-reset:after { content: "aujourd'hui"; } -.monthly-locale-fr .monthly-cal:after { content: "mois"; } -.monthly-locale-fr .monthly-list-item:after { content: 'aucun événement'; } - -.monthly-locale-es .monthly-reset:after { content: 'Hoy'; } -.monthly-locale-es .monthly-cal:after { content: 'Mes'; } -.monthly-locale-es .monthly-list-item:after { content: 'Ningún evento'; } - -/* -Calendar shows event titles if the device width allows for at least 3em per day (rounded -up to 25em total). This assumes the calendar font is close to the baseline font size and -the calendar takes up close to the full media width as the window is made smaller or the -font is zoomed. If one or both of these is not true, this will need to be overridden by -a layout-specific width, or you will need to use a library like css-element-queries to -establish the rules based on the calendar element width rather than the device width. -*/ -@media (min-width: 25em) { - .monthly-day-event { - padding-top: 1.3em; - } - .monthly-day-event > .monthly-indicator-wrap { - width: auto; - max-width: none; - } - .monthly-indicator-wrap { - padding: 0; - } - .monthly-day:before { - padding-top: calc(100% - 1.2em); - } - .monthly-day .monthly-event-indicator { - display: block; - margin: 0 0 1px 0; - width: auto; - height: 1.5em; - line-height: 1.2em; - padding: 0.125em 0 0.1em 0.125em; - border-radius: 0; - overflow: hidden; - background-color: #333; - color: #333; - text-decoration: none; - white-space: nowrap; - box-sizing: border-box; - } - .monthly-day .monthly-event-indicator.monthly-event-continued { - box-shadow: -1px 0 0 0; - } - .monthly-day .monthly-event-indicator span { - display: block; - width: auto; - margin: 0; - color: #fff; - padding: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - -} diff --git a/vendor/js/monthly.js b/vendor/js/monthly.js deleted file mode 100644 index b4db6be5657c57..00000000000000 --- a/vendor/js/monthly.js +++ /dev/null @@ -1,504 +0,0 @@ -/* -Monthly 2.2.1 by Kevin Thornbloom is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. -*/ - -(function ($) { - "use strict"; - $.fn.extend({ - monthly: function(customOptions) { - - // These are overridden by options declared in footer - var defaults = { - dataType: "xml", - disablePast: false, - eventList: true, - events: "", - jsonUrl: "", - linkCalendarToEventUrl: false, - maxWidth: false, - mode: "event", - setWidth: false, - showTrigger: "", - startHidden: false, - stylePast: false, - target: "", - useIsoDateFormat: false, - weekStart: 0, // Sunday - xmlUrl: "" - }; - - var options = $.extend(defaults, customOptions), - uniqueId = $(this).attr("id"), - parent = "#" + uniqueId, - currentDate = new Date(), - currentMonth = currentDate.getMonth() + 1, - currentYear = currentDate.getFullYear(), - currentDay = currentDate.getDate(), - locale = (options.locale || defaultLocale()).toLowerCase(), - monthNameFormat = options.monthNameFormat || "short", - weekdayNameFormat = options.weekdayNameFormat || "short", - monthNames = options.monthNames || defaultMonthNames(), - dayNames = options.dayNames || defaultDayNames(), - markupBlankDay = '
    ', - weekStartsOnMonday = options.weekStart === "Mon" || options.weekStart === 1 || options.weekStart === "1", - primaryLanguageCode = locale.substring(0, 2).toLowerCase(); - - if (options.maxWidth !== false) { - $(parent).css("maxWidth", options.maxWidth); - } - if (options.setWidth !== false) { - $(parent).css("width", options.setWidth); - } - - if (options.startHidden) { - $(parent).addClass("monthly-pop").css({ - display: "none", - position: "absolute" - }); - $(document).on("focus", String(options.showTrigger), function (event) { - $(parent).show(); - event.preventDefault(); - }); - $(document).on("click", String(options.showTrigger) + ", .monthly-pop", function (event) { - event.stopPropagation(); - event.preventDefault(); - }); - $(document).on("click", function () { - $(parent).hide(); - }); - } - - // Add Day Of Week Titles - _appendDayNames(weekStartsOnMonday); - - // Add CSS classes for the primary language and the locale. This allows for CSS-driven - // overrides of the language-specific header buttons. Lowercased because locale codes - // are case-insensitive but CSS is not. - $(parent).addClass("monthly-locale-" + primaryLanguageCode + " monthly-locale-" + locale); - - // Add Header & event list markup - $(parent).prepend('
    ').append('
    '); - - // Set the calendar the first time - setMonthly(currentMonth, currentYear); - - // How many days are in this month? - function daysInMonth(month, year) { - return month === 2 ? (year & 3) || (!(year % 25) && year & 15) ? 28 : 29 : 30 + (month + (month >> 3) & 1); - } - - // Build the month - function setMonthly(month, year) { - $(parent).data("setMonth", month).data("setYear", year); - - // Get number of days - var index = 0, - dayQty = daysInMonth(month, year), - // Get day of the week the first day is - mZeroed = month - 1, - firstDay = new Date(year, mZeroed, 1, 0, 0, 0, 0).getDay(), - settingCurrentMonth = month === currentMonth && year === currentYear; - - // Remove old days - $(parent + " .monthly-day, " + parent + " .monthly-day-blank").remove(); - $(parent + " .monthly-event-list, " + parent + " .monthly-day-wrap").empty(); - // Print out the days - for(var dayNumber = 1; dayNumber <= dayQty; dayNumber++) { - // Check if it's a day in the past - var isInPast = options.stylePast && ( - year < currentYear - || (year === currentYear && ( - month < currentMonth - || (month === currentMonth && dayNumber < currentDay) - ))), - innerMarkup = '
    ' + dayNumber + '
    '; - if(options.mode === "event") { - var thisDate = new Date(year, mZeroed, dayNumber, 0, 0, 0, 0); - $(parent + " .monthly-day-wrap").append("" + innerMarkup + ""); - $(parent + " .monthly-event-list").append("
    ' + dayNames[thisDate.getDay()] + "
    " + dayNumber + "
    "); - } else { - $(parent + " .monthly-day-wrap").append("" + innerMarkup + ""); - } - } - - if (settingCurrentMonth) { - $(parent + ' *[data-number="' + currentDay + '"]').addClass("monthly-today"); - } - - // Reset button - $(parent + " .monthly-header-title").html( - '' + monthNames[month - 1] + " " + year + "" - + (settingCurrentMonth ? "" : '')); - - // Account for empty days at start - if(weekStartsOnMonday) { - if (firstDay === 0) { - _prependBlankDays(6); - } else if (firstDay !== 1) { - _prependBlankDays(firstDay - 1); - } - } else if(firstDay !== 7) { - _prependBlankDays(firstDay); - } - - // Account for empty days at end - var numdays = $(parent + " .monthly-day").length, - numempty = $(parent + " .monthly-day-blank").length, - totaldays = numdays + numempty, - roundup = Math.ceil(totaldays / 7) * 7, - daysdiff = roundup - totaldays; - if(totaldays % 7 !== 0) { - for(index = 0; index < daysdiff; index++) { - $(parent + " .monthly-day-wrap").append(markupBlankDay); - } - } - - // Events - if (options.mode === "event") { - addEvents(month, year); - } - var divs = $(parent + " .m-d"); - for(index = 0; index < divs.length; index += 7) { - divs.slice(index, index + 7).wrapAll('
    '); - } - } - - function addEvent(event, setMonth, setYear) { - // Year [0] Month [1] Day [2] - var fullStartDate = _getEventDetail(event, "startdate"), - fullEndDate = _getEventDetail(event, "enddate"), - startArr = fullStartDate.split("-"), - startYear = parseInt(startArr[0], 10), - startMonth = parseInt(startArr[1], 10), - startDay = parseInt(startArr[2], 10), - startDayNumber = startDay, - endDayNumber = startDay, - showEventTitleOnDay = startDay, - startsThisMonth = startMonth === setMonth && startYear === setYear, - happensThisMonth = startsThisMonth; - - if(fullEndDate) { - // If event has an end date, determine if the range overlaps this month - var endArr = fullEndDate.split("-"), - endYear = parseInt(endArr[0], 10), - endMonth = parseInt(endArr[1], 10), - endDay = parseInt(endArr[2], 10), - startsInPastMonth = startYear < setYear || (startMonth < setMonth && startYear === setYear), - endsThisMonth = endMonth === setMonth && endYear === setYear, - endsInFutureMonth = endYear > setYear || (endMonth > setMonth && endYear === setYear); - if(startsThisMonth || endsThisMonth || (startsInPastMonth && endsInFutureMonth)) { - happensThisMonth = true; - startDayNumber = startsThisMonth ? startDay : 1; - endDayNumber = endsThisMonth ? endDay : daysInMonth(setMonth, setYear); - showEventTitleOnDay = startsThisMonth ? startDayNumber : 1; - } - } - if(!happensThisMonth) { - return; - } - - var startTime = _getEventDetail(event, "starttime"), - timeHtml = "", - eventURL = _getEventDetail(event, "url"), - eventTitle = _getEventDetail(event, "name"), - eventClass = _getEventDetail(event, "class"), - eventColor = _getEventDetail(event, "color"), - eventId = _getEventDetail(event, "id"), - customClass = eventClass ? " " + eventClass : "", - dayStartTag = "" - + (endTime ? '
    ' + formatTime(endTime) + "
    " : "") - + ""; - } - - if(options.linkCalendarToEventUrl && eventURL) { - dayStartTag = "" + eventTitle + " " + timeHtml + ""; - for(var index = startDayNumber; index <= endDayNumber; index++) { - var doShowTitle = index === showEventTitleOnDay; - // Add to calendar view - $(parent + ' *[data-number="' + index + '"] .monthly-indicator-wrap').append( - markupDayStart - + attr("class", "monthly-event-indicator" + customClass - // Include a class marking if this event continues from the previous day - + (doShowTitle ? "" : " monthly-event-continued") - ) - + ">" + (doShowTitle ? eventTitle : "") + dayEndTags); - // Add to event list - $(parent + ' .monthly-list-item[data-number="' + index + '"]') - .addClass("item-has-event") - .append(markupListEvent); - } - } - - function addEvents(month, year) { - if(options.events) { - // Prefer local events if provided - addEventsFromString(options.events, month, year); - } else { - var remoteUrl = options.dataType === "xml" ? options.xmlUrl : options.jsonUrl; - if(remoteUrl) { - // Replace variables for month and year to load from dynamic sources - var url = String(remoteUrl).replace("{month}", month).replace("{year}", year); - $.get(url, {now: $.now()}, function(data) { - addEventsFromString(data, month, year); - }, options.dataType).fail(function() { - console.error("Monthly.js failed to import " + remoteUrl + ". Please check for the correct path and " + options.dataType + " syntax."); - }); - } - } - } - - function addEventsFromString(events, setMonth, setYear) { - if (options.dataType === "xml") { - $(events).find("event").each(function(index, event) { - addEvent(event, setMonth, setYear); - }); - } else if (options.dataType === "json") { - $.each(events.monthly, function(index, event) { - addEvent(event, setMonth, setYear); - }); - } - } - - function attr(name, value) { - var parseValue = String(value); - var newValue = ""; - for(var index = 0; index < parseValue.length; index++) { - switch(parseValue[index]) { - case "'": newValue += "'"; break; - case "\"": newValue += """; break; - case "<": newValue += "<"; break; - case ">": newValue += ">"; break; - default: newValue += parseValue[index]; - } - } - return " " + name + "=\"" + newValue + "\""; - } - - function _appendDayNames(startOnMonday) { - var offset = startOnMonday ? 1 : 0, - dayName = "", - dayIndex = 0; - for(dayIndex = 0; dayIndex < 6; dayIndex++) { - dayName += "
    " + dayNames[dayIndex + offset] + "
    "; - } - dayName += "
    " + dayNames[startOnMonday ? 0 : 6] + "
    "; - $(parent).append('
    ' + dayName + '
    '); - } - - // Detect the user's preferred language - function defaultLocale() { - if(navigator.languages && navigator.languages.length) { - return navigator.languages[0]; - } - return navigator.language || navigator.browserLanguage; - } - - // Use the user's locale if possible to obtain a list of short month names, falling back on English - function defaultMonthNames() { - if(typeof Intl === "undefined") { - return ["Jan", "Feb", "Mar", "Apr", "May", "June", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - } - var formatter = new Intl.DateTimeFormat(locale, {month: monthNameFormat}); - var names = []; - for(var monthIndex = 0; monthIndex < 12; monthIndex++) { - var sampleDate = new Date(2017, monthIndex, 1, 0, 0, 0); - names[monthIndex] = formatter.format(sampleDate); - } - return names; - } - - function formatDate(year, month, day) { - if(options.useIsoDateFormat) { - return new Date(year, month - 1, day, 0, 0, 0).toISOString().substring(0, 10); - } - if(typeof Intl === "undefined") { - return month + "/" + day + "/" + year; - } - return new Intl.DateTimeFormat(locale).format(new Date(year, month - 1, day, 0, 0, 0)); - } - - // Use the user's locale if possible to obtain a list of short weekday names, falling back on English - function defaultDayNames() { - if(typeof Intl === "undefined") { - return ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; - } - var formatter = new Intl.DateTimeFormat(locale, {weekday: weekdayNameFormat}), - names = [], - dayIndex = 0, - sampleDate = null; - for(dayIndex = 0; dayIndex < 7; dayIndex++) { - // 2017 starts on a Sunday, so use it to capture the locale's weekday names - sampleDate = new Date(2017, 0, dayIndex + 1, 0, 0, 0); - names[dayIndex] = formatter.format(sampleDate); - } - return names; - } - - function _prependBlankDays(count) { - var wrapperEl = $(parent + " .monthly-day-wrap"), - index = 0; - for(index = 0; index < count; index++) { - wrapperEl.prepend(markupBlankDay); - } - } - - function _getEventDetail(event, nodeName) { - return options.dataType === "xml" ? $(event).find(nodeName).text() : event[nodeName]; - } - - // Returns a 12-hour format hour/minute with period. Opportunity for future localization. - function formatTime(value) { - var timeSplit = value.split(":"); - var hour = parseInt(timeSplit[0], 10); - var period = "AM"; - if(hour > 12) { - hour -= 12; - period = "PM"; - } else if (hour == 12) { - period = "PM"; - } else if(hour === 0) { - hour = 12; - } - return hour + ":" + String(timeSplit[1]) + " " + period; - } - - function setNextMonth() { - var setMonth = $(parent).data("setMonth"), - setYear = $(parent).data("setYear"), - newMonth = setMonth === 12 ? 1 : setMonth + 1, - newYear = setMonth === 12 ? setYear + 1 : setYear; - setMonthly(newMonth, newYear); - viewToggleButton(); - } - - function setPreviousMonth() { - var setMonth = $(parent).data("setMonth"), - setYear = $(parent).data("setYear"), - newMonth = setMonth === 1 ? 12 : setMonth - 1, - newYear = setMonth === 1 ? setYear - 1 : setYear; - setMonthly(newMonth, newYear); - viewToggleButton(); - } - - // Function to go back to the month view - function viewToggleButton() { - if($(parent + " .monthly-event-list").is(":visible")) { - $(parent + " .monthly-cal").remove(); - $(parent + " .monthly-header-title").prepend(''); - } - } - - // Advance months - $(document.body).on("click", parent + " .monthly-next", function (event) { - setNextMonth(); - event.preventDefault(); - }); - - // Go back in months - $(document.body).on("click", parent + " .monthly-prev", function (event) { - setPreviousMonth(); - event.preventDefault(); - }); - - // Reset Month - $(document.body).on("click", parent + " .monthly-reset", function (event) { - $(this).remove(); - setMonthly(currentMonth, currentYear); - viewToggleButton(); - event.preventDefault(); - event.stopPropagation(); - }); - - // Back to month view - $(document.body).on("click", parent + " .monthly-cal", function (event) { - $(this).remove(); - $(parent + " .monthly-event-list").css("transform", "scale(0)"); - setTimeout(function() { - $(parent + " .monthly-event-list").hide(); - }, 250); - event.preventDefault(); - }); - - // Click A Day - $(document.body).on("click touchstart", parent + " .monthly-day", function (event) { - // If events, show events list - var whichDay = $(this).data("number"); - if(options.mode === "event" && options.eventList) { - var theList = $(parent + " .monthly-event-list"), - myElement = document.getElementById(uniqueId + "day" + whichDay), - topPos = myElement.offsetTop; - theList.show(); - theList.css("transform"); - theList.css("transform", "scale(1)"); - $(parent + ' .monthly-list-item[data-number="' + whichDay + '"]').show(); - theList.scrollTop(topPos); - viewToggleButton(); - if(!options.linkCalendarToEventUrl) { - event.preventDefault(); - } - // If picker, pick date - } else if (options.mode === "picker") { - var setMonth = $(parent).data("setMonth"), - setYear = $(parent).data("setYear"); - // Should days in the past be disabled? - if($(this).hasClass("monthly-past-day") && options.disablePast) { - // If so, don't do anything. - event.preventDefault(); - } else { - // Otherwise, select the date ... - $(String(options.target)).val(formatDate(setYear, setMonth, whichDay)); - // ... and then hide the calendar if it started that way - if(options.startHidden) { - $(parent).hide(); - } - } - event.preventDefault(); - } - }); - - // Clicking an event within the list - $(document.body).on("click", parent + " .listed-event", function (event) { - var href = $(this).attr("href"); - // If there isn't a link, don't go anywhere - if(!href) { - event.preventDefault(); - } - }); - - } - }); -}(jQuery)); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000000000..e1b913bea5a4fb --- /dev/null +++ b/yarn.lock @@ -0,0 +1,3870 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@types/babel-types@*", "@types/babel-types@^7.0.0": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz#667eb1640e8039436028055737d2b9986ee336e3" + integrity sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ== + +"@types/babylon@^6.16.2": + version "6.16.5" + resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.5.tgz#1c5641db69eb8cdf378edd25b4be7754beeb48b4" + integrity sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w== + dependencies: + "@types/babel-types" "*" + +a-sync-waterfall@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7" + integrity sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA== + +abbrev@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== + +absolute@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/absolute/-/absolute-0.0.1.tgz#c22822f87e1c939f579887504d9c109c4173829d" + integrity sha1-wigi+H4ck59XmIdQTZwQnEFzgp0= + +acorn-globals@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + integrity sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8= + dependencies: + acorn "^4.0.4" + +acorn-jsx@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" + integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== + +acorn@^3.1.0: + 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.4, acorn@~4.0.2: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= + +acorn@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.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" + +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-escapes@^3.2.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-red@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" + integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= + dependencies: + ansi-wrap "0.1.0" + +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.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +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-wrap@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + +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" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + 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" + +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-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= + +array-differ@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" + integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== + +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-union@^1.0.1, array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +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= + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@^2.0.3, asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + 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= + +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= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +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@^2.6.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= + +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.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +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.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +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-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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +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== + +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" + +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" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +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" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +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: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^2.0.0, camelcase@^2.0.1: + 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@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +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.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.1.0, chalk@^2.4.2: + 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" + +character-parser@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + integrity sha1-x84o821LzZdE5f/CxfzeHHMmH8A= + dependencies: + is-regex "^1.0.3" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^2.0.0: + version "2.1.6" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" + integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== + 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" + +chownr@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" + integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + +circular-json@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.1.6.tgz#fd692b65f8bce4f2900bea14f74ad681ab294c7f" + integrity sha1-/WkrZfi85PKQC+oU90rWgaspTH8= + dependencies: + wru ">= 0.0.0" + +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" + +clean-css@^4.1.11: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + dependencies: + source-map "~0.6.0" + +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-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +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.0.3, 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@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.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= + +co-from-stream@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/co-from-stream/-/co-from-stream-0.0.0.tgz#1a5cd8ced77263946094fa39f2499a63297bcaf9" + integrity sha1-GlzYztdyY5RglPo58kmaYyl7yvk= + dependencies: + co-read "0.0.1" + +co-fs-extra@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/co-fs-extra/-/co-fs-extra-1.2.1.tgz#3b6ad77cf2614530f677b1cf62664f5ba756b722" + integrity sha1-O2rXfPJhRTD2d7HPYmZPW6dWtyI= + dependencies: + co-from-stream "~0.0.0" + fs-extra "~0.26.5" + thunkify-wrap "~1.0.4" + +co-read@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/co-read/-/co-read-0.0.1.tgz#f81b3eb8a86675fec51e3d883a7f564e873c9389" + integrity sha1-+Bs+uKhmdf7FHj2IOn9WToc8k4k= + +co@3.1.0, co@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78" + integrity sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g= + +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= + +coffee-script@^1.12.4: + version "1.12.7" + resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" + integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== + +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.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-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= + +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.19.0, commander@^2.6.0, commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +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= + +console-control-strings@^1.0.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= + +constantinople@^3.0.1, constantinople@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647" + integrity sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw== + dependencies: + "@types/babel-types" "^7.0.0" + "@types/babylon" "^6.16.2" + babel-types "^6.26.0" + babylon "^6.18.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: + version "2.6.9" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" + integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +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@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +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" + +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.1.3, debug@^2.2.0, debug@^2.3.3: + 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, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.0, debug@^4.0.1, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +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.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +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.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +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" + +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= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +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" + +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= + +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" + +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== + +enable@1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/enable/-/enable-1.3.2.tgz#9eba6837d16d0982b59f87d889bf754443d52931" + integrity sha1-nrpoN9FtCYK1n4fYib91REPVKTE= + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +error-ex@^1.2.0: + 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" + +escape-string-regexp@1.0.5, 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= + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" + integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== + dependencies: + eslint-visitor-keys "^1.0.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.4.0.tgz#5aa9227c3fbe921982b2eda94ba0d7fae858611a" + integrity sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.2" + eslint-visitor-keys "^1.1.0" + espree "^6.1.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.4.1" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" + integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== + dependencies: + acorn "^7.0.0" + acorn-jsx "^5.0.2" + eslint-visitor-keys "^1.1.0" + +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.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.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" + +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" + +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.0, 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@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + 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" + +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.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +feed@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.0.0.tgz#d3c2bfb9aba3c0efacab1ed15be06b67f5c02539" + integrity sha512-VWtvINgG7cA91BtrGychMvxHj84nc8xS9W/PuAHlY62I8owZtcoxNaKFN+zkGl8tBsaYbxrrp4yB9DhqKNQSPw== + dependencies: + xml-js "^1.6.11" + +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@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +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" + +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@^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" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + +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= + +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" + +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" + +fs-extra@~0.26.5: + version "0.26.7" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9" + integrity sha1-muH92UiXeY7at20JGM9C0MMYT6k= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-minipass@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + dependencies: + minipass "^2.2.1" + +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.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + +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" + +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-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@^4.0.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-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" + +git-rev-sync@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/git-rev-sync/-/git-rev-sync-1.12.0.tgz#4468406c7e6c3ba4cf4587999e1adb28d9d1af55" + integrity sha1-RGhAbH5sO6TPRYeZnhrbKNnRr1U= + dependencies: + escape-string-regexp "1.0.5" + graceful-fs "4.1.11" + shelljs "0.7.7" + +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.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@~7.1.1: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + 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.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + 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" + +globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globule@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" + integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +graceful-fs@4.1.11: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= + +graceful-fs@^4.1.11: + version "4.2.0" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" + integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +gray-matter@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-2.1.1.tgz#3042d9adec2a1ded6a7707a9ed2380f8a17a430e" + integrity sha1-MELZrewqHe1qdwep7SOA+KF6Qw4= + dependencies: + ansi-red "^0.1.1" + coffee-script "^1.12.4" + extend-shallow "^2.0.1" + js-yaml "^3.8.1" + toml "^2.3.2" + +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.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + 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-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-generators@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-generators/-/has-generators-1.0.1.tgz#a6a2e55486011940482e13e2c93791c449acf449" + integrity sha1-pqLlVIYBGUBILhPiyTeRxEms9Ek= + +has-unicode@^2.0.0: + 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" + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +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" + +iconv-lite@^0.4.24, iconv-lite@^0.4.4: + 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" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" + integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +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.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= + +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" + +inflight@^1.0.4: + 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: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inherits@^2.0.3, inherits@~2.0.0, 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== + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inputformat-to-jstransformer@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/inputformat-to-jstransformer/-/inputformat-to-jstransformer-1.3.2.tgz#36037e9bdad43f2e8aa44a02b44edec5ca8626cb" + integrity sha512-0iXhVOvsa7NzJU+S9VqNyA4o477/h5SFEs8MUoX1/QKmsHGxbFudyrXl2L2w1CmeuUeEHhsAyQ7y51FNlBhC3g== + dependencies: + require-one "^1.0.3" + +inquirer@^6.4.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +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= + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +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-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-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-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-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-expression@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" + integrity sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8= + dependencies: + acorn "~4.0.2" + object-assign "^4.0.1" + +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.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + +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-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: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +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-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-promise@^2.0.0, is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +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-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, is-utf8@^0.2.1, 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-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== + +is@^3.1.0, is@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" + integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg== + +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: + version "2.5.1" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" + integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== + +js-stringify@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + integrity sha1-Fzb939lyTyijaCrcYjCufk6Weds= + +js-tokens@^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-yaml@^3.13.1, js-yaml@^3.8.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +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.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +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-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= + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jstransformer-nunjucks@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jstransformer-nunjucks/-/jstransformer-nunjucks-1.0.0.tgz#b7505548c6adb969bfa019b016f1e9bb1254bcc6" + integrity sha512-uDS5xDjRzGiKUiCR2TQoklWE3d4yz8haegge59KKXPaH/y2rFKcN4mgZ6EHj2GTk6F2G7r4aw1RHplOr5pXpog== + dependencies: + extend-shallow "^3.0.2" + nunjucks "^3.0.0" + +jstransformer-pug@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/jstransformer-pug/-/jstransformer-pug-0.3.0.tgz#13544eb0174d1bf168799ae4aff9f102a1dcbcb3" + integrity sha1-E1ROsBdNG/FoeZrkr/nxAqHcvLM= + dependencies: + pug "^2.0.0-rc.4" + +jstransformer@1.0.0, jstransformer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + integrity sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM= + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +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.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + optionalDependencies: + graceful-fs "^4.1.9" + +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= + +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" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.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" + +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" + +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" + +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.4, lodash@~4.17.10: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +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" + +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" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.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" + +marked@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.6.2.tgz#c574be8b545a8b48641456ca1dbe0e37b6dccc1a" + integrity sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA== + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +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" + +metalsmith-collections@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/metalsmith-collections/-/metalsmith-collections-0.9.0.tgz#a0d19347a51d5fbd026899dfc1f4d68af50e0e17" + integrity sha1-oNGTR6UdX70CaJnfwfTWivUODhc= + dependencies: + debug "^2.2.0" + extend "^3.0.0" + multimatch "^2.1.0" + read-metadata "^1.0.0" + uniq "^1.0.1" + +metalsmith-in-place@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/metalsmith-in-place/-/metalsmith-in-place-4.4.0.tgz#cd12376d886fdc7d7d26e0c50933e20c4138e0ec" + integrity sha512-ua9GLhSfWZHPduN3h/dqd44Mcg3BhYLXUW2FNOUR4wrUfoLNTuzM1aNRFqdCgC5zHKyM5VadarY4Y+gQD82/Wg== + dependencies: + debug "^4.0.0" + inputformat-to-jstransformer "^1.2.1" + is-utf8 "^0.2.1" + jstransformer "^1.0.0" + jstransformer-pug "^0.3.0" + multimatch "^3.0.0" + +metalsmith-layouts@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/metalsmith-layouts/-/metalsmith-layouts-2.3.1.tgz#027f5ca9b7fb1ecc36e9697cd757d1923670fa7e" + integrity sha512-zyJQiAKebqDttd6pgWEDIz2a3uqUmgWnrKx8P94wQRdtWHl5NiDHfibKZAcbzomfwu2PovE/Qc7WLyKIahfEvw== + dependencies: + debug "^3.1.0" + inputformat-to-jstransformer "^1.2.1" + is-utf8 "^0.2.1" + jstransformer "^1.0.0" + multimatch "^2.1.0" + +metalsmith-markdown@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/metalsmith-markdown/-/metalsmith-markdown-1.2.0.tgz#47429e687a582bdfd93ca8048dd5fc1141badb94" + integrity sha512-YAZZ1G4Y+AfnlJEoba6sr8zGBxg2xiAetf2xvGCTOpUR5CKV6G+X3Oq0BcS1aKBLYf86rWmm6Nu0Wq/5O2CEMQ== + dependencies: + debug "^4.1.1" + marked "^0.6.1" + +metalsmith-permalinks@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/metalsmith-permalinks/-/metalsmith-permalinks-2.2.0.tgz#11df50e79377b5d60c02c93ebba2a85bf069f5fc" + integrity sha512-j8NMK+DcQvP2xLBhZb0jF81T2b/z937TD4mJz+eYTTMlawCFjcRWfU86vMzGeMciCTSELnXA7QLH7y8o8IEYVg== + dependencies: + debug "^4.1.1" + moment "^2.24.0" + slugify "^1.3.4" + substitute "https://github.com/segmentio/substitute/archive/0.1.0.tar.gz" + +metalsmith-sass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/metalsmith-sass/-/metalsmith-sass-1.6.0.tgz#a5cfcf3ba05fea5fd900a5c6fce60b20aad4f2cd" + integrity sha512-6VZ3uHkdL8XFSSa8LUiDKB+jNU0MBvDswvyCZeeedOjtvPOUNWCIs18agJwCsCeouYrB+rxvR/RzpkXTclR9WQ== + dependencies: + async "^2.6.0" + node-sass "^4.11.0" + +metalsmith-uglify@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/metalsmith-uglify/-/metalsmith-uglify-2.3.2.tgz#9ff7d9834905115af45572d3145466d7896eab1d" + integrity sha512-jX0JY6T2qOxh47FCw4oTWzhBGlsNHSgP5PQTGlNDVeLnlVP4g0NhBJXNW3F+BFzzN5MstM5FzSwe5jGgsD7bww== + dependencies: + debug "^4.0.1" + terser "^3.8.2" + uglify-js "^3.4.9" + +metalsmith-writemetadata@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/metalsmith-writemetadata/-/metalsmith-writemetadata-0.4.5.tgz#e2cfe00b85d80d4eb7f4a9da60017534566e6374" + integrity sha1-4s/gC4XYDU639KnaYAF1NFZuY3Q= + dependencies: + circular-json "^0.1.6" + debug "^2.1.3" + multimatch "^2.0.0" + node.extend "^1.1.3" + +metalsmith@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/metalsmith/-/metalsmith-2.3.0.tgz#833afbb5a2a6385e2d9ae3d935e39e33eaea5231" + integrity sha1-gzr7taKmOF4tmuPZNeOeM+rqUjE= + dependencies: + absolute "0.0.1" + chalk "^1.1.3" + clone "^1.0.2" + co-fs-extra "^1.2.1" + commander "^2.6.0" + gray-matter "^2.0.0" + has-generators "^1.0.1" + is "^3.1.0" + is-utf8 "~0.2.0" + recursive-readdir "^2.1.0" + rimraf "^2.2.8" + stat-mode "^0.2.0" + thunkify "^2.1.2" + unyield "0.0.1" + ware "^1.2.0" + win-fork "^1.1.1" + +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" + +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + +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== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +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" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +moment-timezone@^0.5.17, moment-timezone@^0.5.26: + version "0.5.26" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.26.tgz#c0267ca09ae84631aa3dc33f65bedbe6e8e0d772" + integrity sha512-sFP4cgEKTCymBBKgoxZjYzlSovC20Y6J7y3nanDc5RoBIXKlZhoYwBoZGe3flwU6A372AcRwScH8KiwV6zjy1g== + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.9.0", moment@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" + integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + +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.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +multimatch@^2.0.0, multimatch@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= + dependencies: + array-differ "^1.0.0" + array-union "^1.0.1" + arrify "^1.0.0" + minimatch "^3.0.0" + +multimatch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" + integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== + dependencies: + array-differ "^2.0.3" + array-union "^1.0.2" + arrify "^1.0.1" + minimatch "^3.0.4" + +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= + +nan@^2.12.1, nan@^2.13.2: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +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= + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +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-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-sass@^4.11.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" + integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== + 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.11" + 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.4" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +node.extend@^1.1.3: + version "1.1.8" + resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.8.tgz#0aab3e63789f4e6d68b42bc00073ad1881243cf0" + integrity sha512-L/dvEBwyg3UowwqOUTyDsGBU6kjBQOpOhshio9V3i3BMPv5YUb9+mWNN8MK0IbWqT0AqaTSONZf0aTuMMahWgA== + dependencies: + has "^1.0.3" + is "^3.2.1" + +"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: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + 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: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +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" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.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" + +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= + +nunjucks-moment-timezone-filter@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nunjucks-moment-timezone-filter/-/nunjucks-moment-timezone-filter-1.0.1.tgz#d087404080686d17c31ac4a72e52d000a04c28ce" + integrity sha512-mP4B3K8qFPn+q18TiLvz6tWAsiHagyCqtEeyBP0vHPd3dsJtjf5OOB44cH2yOQO1VTQHzIqWaH1Oewb2hRnz3w== + dependencies: + moment-timezone "^0.5.17" + +nunjucks@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.0.tgz#53e95f43c9555e822e8950008a201b1002d49933" + integrity sha512-YS/qEQ6N7qCnUdm6EoYRBfJUdWNT0PpKbbRnogV2XyXbBm2STIP1O6yrdZHgwMVK7fIYUx7i8+yatEixnXSB1w== + dependencies: + a-sync-waterfall "^1.0.0" + asap "^2.0.3" + yargs "^3.32.0" + optionalDependencies: + chokidar "^2.0.0" + +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: + 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-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.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" + +once@^1.3.0, once@^1.3.1, 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@^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" + +optimist@~0.6: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + 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@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, 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: + 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-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +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-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.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-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== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +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" + +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-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-is-absolute@^1.0.0: + 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-key@^2.0.0, path-key@^2.0.1: + 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: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +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" + +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= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +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= + +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= + +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= + +prettier@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + +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== + +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@^7.0.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +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.24: + version "1.2.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" + integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== + +pug-attrs@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.4.tgz#b2f44c439e4eb4ad5d4ef25cac20d18ad28cc336" + integrity sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ== + dependencies: + constantinople "^3.0.1" + js-stringify "^1.0.1" + pug-runtime "^2.0.5" + +pug-code-gen@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.2.tgz#ad0967162aea077dcf787838d94ed14acb0217c2" + integrity sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw== + dependencies: + constantinople "^3.1.2" + doctypes "^1.1.0" + js-stringify "^1.0.1" + pug-attrs "^2.0.4" + pug-error "^1.3.3" + pug-runtime "^2.0.5" + void-elements "^2.0.1" + with "^5.0.0" + +pug-error@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.3.tgz#f342fb008752d58034c185de03602dd9ffe15fa6" + integrity sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ== + +pug-filters@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-3.1.1.tgz#ab2cc82db9eeccf578bda89130e252a0db026aa7" + integrity sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg== + dependencies: + clean-css "^4.1.11" + constantinople "^3.0.1" + jstransformer "1.0.0" + pug-error "^1.3.3" + pug-walk "^1.1.8" + resolve "^1.1.6" + uglify-js "^2.6.1" + +pug-lexer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-4.1.0.tgz#531cde48c7c0b1fcbbc2b85485c8665e31489cfd" + integrity sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA== + dependencies: + character-parser "^2.1.1" + is-expression "^3.0.0" + pug-error "^1.3.3" + +pug-linker@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.6.tgz#f5bf218b0efd65ce6670f7afc51658d0f82989fb" + integrity sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg== + dependencies: + pug-error "^1.3.3" + pug-walk "^1.1.8" + +pug-load@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.12.tgz#d38c85eb85f6e2f704dea14dcca94144d35d3e7b" + integrity sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg== + dependencies: + object-assign "^4.1.0" + pug-walk "^1.1.8" + +pug-parser@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-5.0.1.tgz#03e7ada48b6840bd3822f867d7d90f842d0ffdc9" + integrity sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA== + dependencies: + pug-error "^1.3.3" + token-stream "0.0.1" + +pug-runtime@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.5.tgz#6da7976c36bf22f68e733c359240d8ae7a32953a" + integrity sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw== + +pug-strip-comments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz#cc1b6de1f6e8f5931cf02ec66cdffd3f50eaf8a8" + integrity sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw== + dependencies: + pug-error "^1.3.3" + +pug-walk@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.8.tgz#b408f67f27912f8c21da2f45b7230c4bd2a5ea7a" + integrity sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA== + +pug@^2.0.0-rc.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.4.tgz#ee7682ec0a60494b38d48a88f05f3b0ac931377d" + integrity sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw== + dependencies: + pug-code-gen "^2.0.2" + pug-filters "^3.1.1" + pug-lexer "^4.1.0" + pug-linker "^3.0.6" + pug-load "^2.0.12" + pug-parser "^5.0.1" + pug-runtime "^2.0.5" + pug-strip-comments "^1.0.4" + +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" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +rc@^1.2.7: + 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" + +read-metadata@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-metadata/-/read-metadata-1.0.0.tgz#6df9cbe51184e8ceb7d0668b40ee5191e6f3dac6" + integrity sha1-bfnL5RGE6M630GaLQO5Rkebz2sY= + dependencies: + yaml-js "0.0.8" + +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@^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" + +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + 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" + +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" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +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" + +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== + +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" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +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.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +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.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + 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.0" + 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.4.3" + 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-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-one@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-one/-/require-one-1.0.3.tgz#0efebcce980fefc3df84ce00f269e19c8b6f4990" + integrity sha1-Dv68zpgP78PfhM4A8mnhnItvSZA= + +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@^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.1.6, resolve@^1.10.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + dependencies: + path-parse "^1.0.6" + +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== + +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.6.3, rimraf@^2.2.8, rimraf@^2.6.1: + 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" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +rxjs@^6.4.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +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.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.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +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@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@^6.1.2: + 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= + +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" + +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.7.7: + version "0.7.7" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + integrity sha1-svXHfvlxSPS09uImguELuoZnz/E= + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slugify@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.3.4.tgz#78d2792d7222b55cd9fc81fa018df99af779efeb" + integrity sha512-KP0ZYk5hJNBS8/eIjGkFDCzGQIoZ1mnfQRYS5WM3273z+fxGWXeN0fkwf2ebEweydv9tioZIHGZKoF21U07/nw== + +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" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + 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.5.10: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.1.34: + version "0.1.34" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.34.tgz#a7cfe89aec7b1682c3b198d0acfb47d7d090566b" + integrity sha1-p8/omux7FoLDsZjQrPtH19CQVms= + 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.6, 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.0, source-map@~0.6.0, 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.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +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.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + 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" + +stat-mode@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" + integrity sha1-5sgLYjEj19gM8TLOU480YokHJQI= + +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" + +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" + +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", 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: + 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_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" + +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.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-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-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@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + +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= + +"substitute@https://github.com/segmentio/substitute/archive/0.1.0.tar.gz": + version "0.1.0" + resolved "https://github.com/segmentio/substitute/archive/0.1.0.tar.gz#8fc8aa4d0fc6d26812a2b7f54022f647f7629d99" + +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@^5.3.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" + +swig@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/swig/-/swig-1.4.2.tgz#4085ca0453369104b5d483e2841b39b7ae1aaba5" + integrity sha1-QIXKBFM2kQS11IPihBs5t64aq6U= + dependencies: + optimist "~0.6" + uglify-js "~2.4" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +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: + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.5" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +terser@^3.8.2: + version "3.17.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" + integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + +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= + +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= + +thunkify-wrap@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/thunkify-wrap/-/thunkify-wrap-1.0.4.tgz#b52be548ddfefda20e00b58c6096762b43dd6880" + integrity sha1-tSvlSN3+/aIOALWMYJZ2K0PdaIA= + dependencies: + enable "1" + +thunkify@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" + integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= + +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-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@^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" + +token-stream@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" + integrity sha1-zu78cXp2xDFvEm0LnbqlXX598Bo= + +toml@^2.3.2: + version "2.3.6" + resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.6.tgz#25b0866483a9722474895559088b436fd11f861b" + integrity sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ== + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +transliteration@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/transliteration/-/transliteration-2.1.3.tgz#1406f3d3038723c4720493f3c63ff0d85a8b9db7" + integrity sha512-i7OLuBgUnjzn2HDsuo/BEAaC/9lHwAJYokPBto5MXDsH1yyT0yPVOAmTO18ZH/9JP7sJYd51QqcsMRka+0+mlQ== + dependencies: + yargs "^13.1.0" + +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= + +"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" + +tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +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" + +uglify-js@^2.6.1: + 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-js@^3.4.9: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" + +uglify-js@~2.4: + version "2.4.24" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.4.24.tgz#fad5755c1e1577658bb06ff9ab6e548c95bebd6e" + integrity sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4= + dependencies: + async "~0.2.6" + source-map "0.1.34" + uglify-to-browserify "~1.0.0" + yargs "~3.5.4" + +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= + +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= + +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" + +unyield@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/unyield/-/unyield-0.0.1.tgz#150e65da42bf7742445b958a64eb9b85d1d2b180" + integrity sha1-FQ5l2kK/d0JEW5WKZOubhdHSsYA= + dependencies: + co "~3.1.0" + +upath@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + 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= + +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== + +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= + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + +validate-npm-package-license@^3.0.1: + 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" + +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" + +void-elements@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +ware@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ware/-/ware-1.3.0.tgz#d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4" + integrity sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q= + dependencies: + wrap-fn "^0.1.0" + +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: + 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.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +win-fork@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/win-fork/-/win-fork-1.1.1.tgz#8f58e0656fca00adc8c86a2b89e3cd2d6a2d5e5e" + integrity sha1-j1jgZW/KAK3IyGoriePNLWotXl4= + +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= + +window-size@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" + integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= + +with@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" + integrity sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4= + dependencies: + acorn "^3.1.0" + acorn-globals "^3.0.0" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +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-fn@^0.1.0: + version "0.1.5" + resolved "https://registry.yarnpkg.com/wrap-fn/-/wrap-fn-0.1.5.tgz#f21b6e41016ff4a7e31720dbc63a09016bdf9845" + integrity sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU= + dependencies: + co "3.1.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +"wru@>= 0.0.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/wru/-/wru-0.3.0.tgz#2f04208c7eafc211512da5f047f06aa0032b4c38" + integrity sha1-LwQgjH6vwhFRLaXwR/BqoAMrTDg= + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +y18n@^3.2.0, y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +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.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yaml-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/yaml-js/-/yaml-js-0.0.8.tgz#87cfa5a9613f48e26005420d6a8ee0da6fe8daec" + integrity sha1-h8+lqWE/SOJgBUINao7g2m/o2uw= + +yargs-parser@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.0.0.tgz#3fc44f3e76a8bdb1cc3602e860108602e5ccde8b" + integrity sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= + dependencies: + camelcase "^3.0.0" + +yargs@^13.1.0: + version "13.2.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.2.tgz#0c101f580ae95cea7f39d927e7770e3fdc97f993" + integrity sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA== + dependencies: + cliui "^4.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + 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.0.0" + +yargs@^3.32.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" + integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= + dependencies: + camelcase "^2.0.1" + cliui "^3.0.3" + decamelize "^1.1.1" + os-locale "^1.4.0" + string-width "^1.0.1" + window-size "^0.1.4" + y18n "^3.2.0" + +yargs@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= + 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 "^5.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" + +yargs@~3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.5.4.tgz#d8aff8f665e94c34bd259bdebd1bfaf0ddd35361" + integrity sha1-2K/49mXpTDS9JZvevRv68N3TU2E= + dependencies: + camelcase "^1.0.2" + decamelize "^1.0.0" + window-size "0.1.0" + wordwrap "0.0.2"