Browse Source
- Comment composer - Comment renderer - Comment create service - Display list and display engine enhancements - Added emoji picker for comments - Admin for site settings - added main-sidebar layoutpull/1/head
29 changed files with 742 additions and 159 deletions
@ -0,0 +1,56 @@ |
|||||
|
// admin/settings.js
|
||||
|
// Copyright (C) 2021 Digital Telepresence, LLC
|
||||
|
// License: Apache-2.0
|
||||
|
|
||||
|
'use strict'; |
||||
|
|
||||
|
const DTP_COMPONENT_NAME = 'admin:settings'; |
||||
|
const express = require('express'); |
||||
|
|
||||
|
const { SiteController } = require('../../../lib/site-lib'); |
||||
|
|
||||
|
class SettingsController extends SiteController { |
||||
|
|
||||
|
constructor (dtp) { |
||||
|
super(dtp, DTP_COMPONENT_NAME); |
||||
|
} |
||||
|
|
||||
|
async start ( ) { |
||||
|
const router = express.Router(); |
||||
|
router.use(async (req, res, next) => { |
||||
|
res.locals.currentView = 'admin'; |
||||
|
res.locals.adminView = 'settings'; |
||||
|
return next(); |
||||
|
}); |
||||
|
|
||||
|
router.post('/', this.postUpdateSettings.bind(this)); |
||||
|
|
||||
|
router.get('/', this.getSettingsView.bind(this)); |
||||
|
|
||||
|
return router; |
||||
|
} |
||||
|
|
||||
|
async postUpdateSettings (req, res, next) { |
||||
|
const { cache: cacheService } = this.dtp.services; |
||||
|
try { |
||||
|
const settingsKey = `settings:${this.dtp.config.site.domainKey}:site`; |
||||
|
await cacheService.setObject(settingsKey, req.body); |
||||
|
res.redirect('/admin/settings'); |
||||
|
} catch (error) { |
||||
|
return next(error); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
async getSettingsView (req, res, next) { |
||||
|
try { |
||||
|
res.render('admin/settings/editor'); |
||||
|
} catch (error) { |
||||
|
return next(error); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
module.exports = async (dtp) => { |
||||
|
let controller = new SettingsController(dtp); |
||||
|
return controller; |
||||
|
}; |
@ -0,0 +1,173 @@ |
|||||
|
// comment.js
|
||||
|
// Copyright (C) 2021 Digital Telepresence, LLC
|
||||
|
// License: Apache-2.0
|
||||
|
|
||||
|
'use strict'; |
||||
|
|
||||
|
const path = require('path'); |
||||
|
|
||||
|
const mongoose = require('mongoose'); |
||||
|
|
||||
|
const Comment = mongoose.model('Comment'); // jshint ignore:line
|
||||
|
|
||||
|
const pug = require('pug'); |
||||
|
const striptags = require('striptags'); |
||||
|
|
||||
|
const { SiteService, SiteError } = require('../../lib/site-lib'); |
||||
|
|
||||
|
class CommentService extends SiteService { |
||||
|
|
||||
|
constructor (dtp) { |
||||
|
super(dtp, module.exports); |
||||
|
this.populateComment = [ |
||||
|
{ |
||||
|
path: 'author', |
||||
|
select: '', |
||||
|
}, |
||||
|
{ |
||||
|
path: 'replyTo', |
||||
|
}, |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
async start ( ) { |
||||
|
this.templates = { }; |
||||
|
this.templates.comment = pug.compileFile(path.join(this.dtp.config.root, 'app', 'views', 'comment', 'components', 'comment-standalone.pug')); |
||||
|
} |
||||
|
|
||||
|
async create (author, resourceType, resource, commentDefinition) { |
||||
|
const NOW = new Date(); |
||||
|
let comment = new Comment(); |
||||
|
|
||||
|
comment.created = NOW; |
||||
|
comment.resourceType = resourceType; |
||||
|
comment.resource = resource._id; |
||||
|
comment.author = author._id; |
||||
|
if (commentDefinition.replyTo) { |
||||
|
comment.replyTo = mongoose.Types.ObjectId(commentDefinition.replyTo); |
||||
|
} |
||||
|
if (commentDefinition.content) { |
||||
|
comment.content = striptags(commentDefinition.content.trim()); |
||||
|
} |
||||
|
|
||||
|
await comment.save(); |
||||
|
|
||||
|
const model = mongoose.model(resourceType); |
||||
|
await model.updateOne( |
||||
|
{ _id: resource._id }, |
||||
|
{ |
||||
|
$inc: { 'stats.commentCount': 1 }, |
||||
|
}, |
||||
|
); |
||||
|
|
||||
|
/* |
||||
|
* increment the reply count of every parent comment until you reach a |
||||
|
* comment with no parent. |
||||
|
*/ |
||||
|
|
||||
|
let replyTo = comment.replyTo; |
||||
|
while (replyTo) { |
||||
|
await Comment.updateOne( |
||||
|
{ _id: replyTo }, |
||||
|
{ |
||||
|
$inc: { 'stats.replyCount': 1 }, |
||||
|
}, |
||||
|
); |
||||
|
let parent = await Comment.findById(replyTo).select('replyTo').lean(); |
||||
|
if (parent.replyTo) { |
||||
|
replyTo = parent.replyTo; |
||||
|
} else { |
||||
|
replyTo = false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
comment = comment.toObject(); |
||||
|
comment.author = author; |
||||
|
return comment; |
||||
|
} |
||||
|
|
||||
|
async update (comment, commentDefinition) { |
||||
|
const updateOp = { $set: { } }; |
||||
|
|
||||
|
if (!commentDefinition.content || (commentDefinition.content.length === 0)) { |
||||
|
throw new SiteError(406, 'The comment cannot be empty'); |
||||
|
} |
||||
|
updateOp.$set.content = striptags(commentDefinition.content.trim()); |
||||
|
updateOp.$push = { |
||||
|
contentHistory: { |
||||
|
created: new Date(), |
||||
|
content: comment.content, |
||||
|
}, |
||||
|
}; |
||||
|
this.log.info('updating comment content', { commentId: comment._id }); |
||||
|
await Comment.updateOne({ _id: comment._id }, updateOp); |
||||
|
} |
||||
|
|
||||
|
async setStatus (comment, status) { |
||||
|
await Comment.updateOne({ _id: comment._id }, { $set: { status } }); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Pushes the current comment content to the contentHistory array, sets the |
||||
|
* content field to 'Content removed' and updates the comment status to the |
||||
|
* status provided. This preserves the comment content, but removes it from |
||||
|
* public view. |
||||
|
* @param {Document} comment |
||||
|
* @param {String} status |
||||
|
*/ |
||||
|
async remove (comment, status = 'removed') { |
||||
|
await Comment.updateOne( |
||||
|
{ _id: comment._id }, |
||||
|
{ |
||||
|
$set: { |
||||
|
status, |
||||
|
content: 'Comment removed', |
||||
|
}, |
||||
|
$push: { |
||||
|
contentHistory: { |
||||
|
created: new Date(), |
||||
|
content: comment.content, |
||||
|
}, |
||||
|
}, |
||||
|
}, |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
async getForResource (resource, statuses, pagination) { |
||||
|
const comments = await Comment |
||||
|
.find({ resource: resource._id, status: { $in: statuses } }) |
||||
|
.sort({ created: 1 }) |
||||
|
.skip(pagination.skip) |
||||
|
.limit(pagination.cpp) |
||||
|
.populate(this.populateComment) |
||||
|
.lean(); |
||||
|
return comments; |
||||
|
} |
||||
|
|
||||
|
async getContentHistory (comment, pagination) { |
||||
|
/* |
||||
|
* Extract a page from the contentHistory using $slice on the array |
||||
|
*/ |
||||
|
const fullComment = await Comment |
||||
|
.findOne( |
||||
|
{ _id: comment._id }, |
||||
|
{ |
||||
|
contentHistory: { |
||||
|
$sort: { created: 1 }, |
||||
|
$slice: [pagination.skip, pagination.cpp], |
||||
|
}, |
||||
|
} |
||||
|
) |
||||
|
.select('contentHistory').lean(); |
||||
|
if (!fullComment) { |
||||
|
throw new SiteError(404, 'Comment not found'); |
||||
|
} |
||||
|
return fullComment.contentHistory || [ ]; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
module.exports = { |
||||
|
slug: 'comment', |
||||
|
name: 'comment', |
||||
|
create: (dtp) => { return new CommentService(dtp); }, |
||||
|
}; |
@ -0,0 +1,15 @@ |
|||||
|
extends ../layouts/main |
||||
|
block content |
||||
|
|
||||
|
form(method="POST", action="/admin/settings").uk-form |
||||
|
.uk-margin |
||||
|
label(for="name").uk-form-label Site name |
||||
|
input(id="name", name="name", type="text", maxlength="200", placeholder="Enter site name", value= site.name).uk-input |
||||
|
.uk-margin |
||||
|
label(for="description").uk-form-label Site description |
||||
|
input(id="description", name="description", type="text", maxlength="500", placeholder="Enter site description", value= site.description).uk-input |
||||
|
.uk-margin |
||||
|
label(for="company").uk-form-label Company name |
||||
|
input(id="company", name="company", type="text", maxlength="200", placeholder="Enter company name", value= site.company).uk-input |
||||
|
|
||||
|
button(type="submit").uk-button.dtp-button-primary Save Settings |
@ -0,0 +1,3 @@ |
|||||
|
include ../../components/library |
||||
|
include comment |
||||
|
+renderComment(comment) |
@ -0,0 +1,47 @@ |
|||||
|
mixin renderComment (comment) |
||||
|
.uk-card.uk-card-secondary.uk-card-small.uk-border-rounded |
||||
|
.uk-card-body |
||||
|
div(uk-grid).uk-grid-small |
||||
|
.uk-width-auto |
||||
|
img(src="/img/default-member.png").site-profile-picture.sb-small |
||||
|
.uk-width-expand |
||||
|
div(uk-grid).uk-grid-small.uk-flex-middle.uk-text-small |
||||
|
if comment.author.displayName |
||||
|
.uk-width-auto |
||||
|
span= comment.author.displayName |
||||
|
.uk-width-auto= comment.author.username |
||||
|
.uk-width-auto= moment(comment.created).fromNow() |
||||
|
div!= marked.parse(comment.content) |
||||
|
div(uk-grid).uk-grid-small.uk-text-small |
||||
|
.uk-width-auto |
||||
|
button( |
||||
|
type="button", |
||||
|
data-comment-id= comment._id, |
||||
|
onclick="return dtp.app.upvoteComment(event);", |
||||
|
title="Upvote this comment", |
||||
|
).uk-button.uk-button-link |
||||
|
+renderButtonIcon('fa-chevron-up', formatCount(comment.stats.upvoteCount)) |
||||
|
.uk-width-auto |
||||
|
button( |
||||
|
type="button", |
||||
|
data-comment-id= comment._id, |
||||
|
onclick="return dtp.app.downvoteComment(event);", |
||||
|
title="Downvote this comment", |
||||
|
).uk-button.uk-button-link |
||||
|
+renderButtonIcon('fa-chevron-down', formatCount(comment.stats.downvoteCount)) |
||||
|
.uk-width-auto |
||||
|
button( |
||||
|
type="button", |
||||
|
data-comment-id= comment._id, |
||||
|
onclick="return dtp.app.openReplies(event);", |
||||
|
title="Load replies to this comment", |
||||
|
).uk-button.uk-button-link |
||||
|
+renderButtonIcon('fa-comment', formatCount(comment.stats.replyCount)) |
||||
|
.uk-width-auto |
||||
|
button( |
||||
|
type="button", |
||||
|
data-comment-id= comment._id, |
||||
|
onclick="return dtp.app.openReplyComposer(event);", |
||||
|
title="Write a reply to this comment", |
||||
|
).uk-button.uk-button-link |
||||
|
+renderButtonIcon('fa-reply', 'reply') |
@ -13,29 +13,28 @@ mixin renderSidebarEpisode(episode) |
|||||
mixin renderPageSidebar ( ) |
mixin renderPageSidebar ( ) |
||||
//- Gab TV 3 Most Recent Episodes |
//- Gab TV 3 Most Recent Episodes |
||||
.uk-margin |
.uk-margin |
||||
.dtp-border-bottom |
+renderSectionTitle('Gab TV', { |
||||
h3.uk-heading-bullet |
label: 'Visit Channel', |
||||
a(href= gabTvChannel.home_page_url, target= "_blank", title= `${gabTvChannel.title} on Gab`).uk-link-reset Gab TV |
title: gabTvChannel.title, |
||||
|
url: gabTvChannel.home_page_url, |
||||
|
}) |
||||
|
|
||||
ul.uk-list |
ul.uk-list |
||||
each episode in gabTvChannel.items.slice(0, 3) |
each episode in gabTvChannel.items.slice(0, 3) |
||||
li |
li |
||||
+renderSidebarEpisode(episode) |
+renderSidebarEpisode(episode) |
||||
|
|
||||
//- Newsletter Signup |
//- Newsletter Signup |
||||
//- TODO Add sticky |
div(uk-sticky={ offset: 60, bottom: '#dtp-content-grid' }) |
||||
|
+renderSectionTitle('Mailing List') |
||||
.uk-margin |
.uk-margin |
||||
.dtp-border-bottom.uk-margin |
|
||||
h3.uk-heading-bullet Mailing List |
|
||||
|
|
||||
form(method="post", action="/newsletter", onsubmit="return dtp.app.submitForm(event, 'Subscribe to newsletter');").uk-form |
form(method="post", action="/newsletter", onsubmit="return dtp.app.submitForm(event, 'Subscribe to newsletter');").uk-form |
||||
.uk-card.uk-card-secondary.uk-card-small |
.uk-card.uk-card-secondary.uk-card-small |
||||
|
|
||||
.uk-card-body |
.uk-card-body |
||||
p Join the #{site.name} FREE newsletter to get show updates in your inbox. |
p Join the #{site.name} FREE newsletter to get show updates in your inbox. |
||||
|
|
||||
.uk-margin |
.uk-margin |
||||
label(for="email").uk-form-label.sr-only Email Address |
label(for="email").uk-form-label.sr-only Email Address |
||||
input(id="email", name="email", type="email", placeholder="[email protected]").uk-input |
input(id="email", name="email", type="email", placeholder="[email protected]").uk-input |
||||
|
|
||||
.uk-card-footer |
.uk-card-footer |
||||
button(type="submit").uk-button.uk-button-primary Sign Up |
button(type="submit").uk-button.dtp-button-primary.uk-button-small Sign Up |
@ -0,0 +1,8 @@ |
|||||
|
mixin renderSectionTitle (title, barButton) |
||||
|
.dtp-border-bottom |
||||
|
div(uk-grid).uk-grid-small.uk-flex-middle |
||||
|
.uk-width-expand |
||||
|
h3.uk-heading-bullet.uk-margin-small= title |
||||
|
if barButton |
||||
|
.uk-width-auto |
||||
|
a(href= barButton.url, target= "_blank", title= barButton.title).uk-button.uk-button-link.uk-button-small= barButton.label |
@ -0,0 +1,13 @@ |
|||||
|
extends main |
||||
|
|
||||
|
block content-container |
||||
|
section.uk-section.uk-section-default |
||||
|
.uk-container |
||||
|
div(uk-grid)#dtp-content-grid |
||||
|
div(class="uk-width-1-1 uk-width-2-3@m") |
||||
|
block content |
||||
|
div(class="uk-width-1-1 uk-width-1-3@m") |
||||
|
+renderPageSidebar() |
||||
|
|
||||
|
block page-footer |
||||
|
include ../components/page-footer |
@ -885,11 +885,54 @@ |
|||||
"@babel/helper-validator-identifier" "^7.15.7" |
"@babel/helper-validator-identifier" "^7.15.7" |
||||
to-fast-properties "^2.0.0" |
to-fast-properties "^2.0.0" |
||||
|
|
||||
|
"@fortawesome/fontawesome-common-types@^0.2.36": |
||||
|
version "0.2.36" |
||||
|
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz#b44e52db3b6b20523e0c57ef8c42d315532cb903" |
||||
|
integrity sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg== |
||||
|
|
||||
"@fortawesome/fontawesome-free@^5.15.4": |
"@fortawesome/fontawesome-free@^5.15.4": |
||||
version "5.15.4" |
version "5.15.4" |
||||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" |
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" |
||||
integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== |
integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== |
||||
|
|
||||
|
"@fortawesome/fontawesome-svg-core@^1.2.28": |
||||
|
version "1.2.36" |
||||
|
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz#4f2ea6f778298e0c47c6524ce2e7fd58eb6930e3" |
||||
|
integrity sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA== |
||||
|
dependencies: |
||||
|
"@fortawesome/fontawesome-common-types" "^0.2.36" |
||||
|
|
||||
|
"@fortawesome/free-regular-svg-icons@^5.13.0": |
||||
|
version "5.15.4" |
||||
|
resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.4.tgz#b97edab436954333bbeac09cfc40c6a951081a02" |
||||
|
integrity sha512-9VNNnU3CXHy9XednJ3wzQp6SwNwT3XaM26oS4Rp391GsxVYA+0oDR2J194YCIWf7jNRCYKjUCOduxdceLrx+xw== |
||||
|
dependencies: |
||||
|
"@fortawesome/fontawesome-common-types" "^0.2.36" |
||||
|
|
||||
|
"@fortawesome/free-solid-svg-icons@^5.13.0": |
||||
|
version "5.15.4" |
||||
|
resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz#2a68f3fc3ddda12e52645654142b9e4e8fbb6cc5" |
||||
|
integrity sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w== |
||||
|
dependencies: |
||||
|
"@fortawesome/fontawesome-common-types" "^0.2.36" |
||||
|
|
||||
|
"@joeattardi/emoji-button@^4.6.2": |
||||
|
version "4.6.2" |
||||
|
resolved "https://registry.yarnpkg.com/@joeattardi/emoji-button/-/emoji-button-4.6.2.tgz#75baf4ce27324e4d6fb90292f8b248235f638ad0" |
||||
|
integrity sha512-FhuzTmW3nVHLVp2BJfNX17CYV77fqtKZlx328D4h6Dw3cPTT1gJRNXN0jV7BvHgsl6Q/tN8DIQQxTUIO4jW3gQ== |
||||
|
dependencies: |
||||
|
"@fortawesome/fontawesome-svg-core" "^1.2.28" |
||||
|
"@fortawesome/free-regular-svg-icons" "^5.13.0" |
||||
|
"@fortawesome/free-solid-svg-icons" "^5.13.0" |
||||
|
"@popperjs/core" "^2.4.0" |
||||
|
"@types/twemoji" "^12.1.1" |
||||
|
escape-html "^1.0.3" |
||||
|
focus-trap "^5.1.0" |
||||
|
fuzzysort "^1.1.4" |
||||
|
tiny-emitter "^2.1.0" |
||||
|
tslib "^2.0.0" |
||||
|
twemoji "^13.0.0" |
||||
|
|
||||
"@otplib/core@^12.0.1": |
"@otplib/core@^12.0.1": |
||||
version "12.0.1" |
version "12.0.1" |
||||
resolved "https://registry.yarnpkg.com/@otplib/core/-/core-12.0.1.tgz#73720a8cedce211fe5b3f683cd5a9c098eaf0f8d" |
resolved "https://registry.yarnpkg.com/@otplib/core/-/core-12.0.1.tgz#73720a8cedce211fe5b3f683cd5a9c098eaf0f8d" |
||||
@ -928,6 +971,11 @@ |
|||||
"@otplib/plugin-crypto" "^12.0.1" |
"@otplib/plugin-crypto" "^12.0.1" |
||||
"@otplib/plugin-thirty-two" "^12.0.1" |
"@otplib/plugin-thirty-two" "^12.0.1" |
||||
|
|
||||
|
"@popperjs/core@^2.4.0": |
||||
|
version "2.11.0" |
||||
|
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.0.tgz#6734f8ebc106a0860dff7f92bf90df193f0935d7" |
||||
|
integrity sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ== |
||||
|
|
||||
"@rollup/plugin-babel@^5.2.0": |
"@rollup/plugin-babel@^5.2.0": |
||||
version "5.3.0" |
version "5.3.0" |
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" |
resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" |
||||
@ -1065,6 +1113,11 @@ |
|||||
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" |
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" |
||||
integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== |
integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== |
||||
|
|
||||
|
"@types/twemoji@^12.1.1": |
||||
|
version "12.1.2" |
||||
|
resolved "https://registry.yarnpkg.com/@types/twemoji/-/twemoji-12.1.2.tgz#52578fd22665311e6a78d04f800275449d51c97e" |
||||
|
integrity sha512-3eMyKenMi0R1CeKzBYtk/Z2JIHsTMQrIrTah0q54o45pHTpWVNofU2oHx0jS8tqsDRhis2TbB6238WP9oh2l2w== |
||||
|
|
||||
"@types/webidl-conversions@*": |
"@types/webidl-conversions@*": |
||||
version "6.1.1" |
version "6.1.1" |
||||
resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz#e33bc8ea812a01f63f90481c666334844b12a09e" |
resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz#e33bc8ea812a01f63f90481c666334844b12a09e" |
||||
@ -3139,7 +3192,7 @@ escape-goat@^2.0.0: |
|||||
resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" |
resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" |
||||
integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== |
integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== |
||||
|
|
||||
escape-html@~1.0.3: |
escape-html@^1.0.3, escape-html@~1.0.3: |
||||
version "1.0.3" |
version "1.0.3" |
||||
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" |
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" |
||||
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= |
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= |
||||
@ -3530,6 +3583,14 @@ flush-write-stream@^1.0.2: |
|||||
inherits "^2.0.3" |
inherits "^2.0.3" |
||||
readable-stream "^2.3.6" |
readable-stream "^2.3.6" |
||||
|
|
||||
|
focus-trap@^5.1.0: |
||||
|
version "5.1.0" |
||||
|
resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-5.1.0.tgz#64a0bfabd95c382103397dbc96bfef3a3cf8e5ad" |
||||
|
integrity sha512-CkB/nrO55069QAUjWFBpX6oc+9V90Qhgpe6fBWApzruMq5gnlh90Oo7iSSDK7pKiV5ugG6OY2AXM5mxcmL3lwQ== |
||||
|
dependencies: |
||||
|
tabbable "^4.0.0" |
||||
|
xtend "^4.0.1" |
||||
|
|
||||
follow-redirects@^1.0.0, follow-redirects@^1.14.0: |
follow-redirects@^1.0.0, follow-redirects@^1.14.0: |
||||
version "1.14.5" |
version "1.14.5" |
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" |
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" |
||||
@ -3592,6 +3653,15 @@ [email protected]: |
|||||
jsonfile "^3.0.0" |
jsonfile "^3.0.0" |
||||
universalify "^0.1.0" |
universalify "^0.1.0" |
||||
|
|
||||
|
fs-extra@^8.0.1: |
||||
|
version "8.1.0" |
||||
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" |
||||
|
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== |
||||
|
dependencies: |
||||
|
graceful-fs "^4.2.0" |
||||
|
jsonfile "^4.0.0" |
||||
|
universalify "^0.1.0" |
||||
|
|
||||
fs-extra@^9.0.1: |
fs-extra@^9.0.1: |
||||
version "9.1.0" |
version "9.1.0" |
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" |
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" |
||||
@ -3633,6 +3703,11 @@ function-bind@^1.1.1: |
|||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" |
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" |
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== |
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== |
||||
|
|
||||
|
fuzzysort@^1.1.4: |
||||
|
version "1.1.4" |
||||
|
resolved "https://registry.yarnpkg.com/fuzzysort/-/fuzzysort-1.1.4.tgz#a0510206ed44532cbb52cf797bf5a3cb12acd4ba" |
||||
|
integrity sha512-JzK/lHjVZ6joAg3OnCjylwYXYVjRiwTY6Yb25LvfpJHK8bjisfnZJ5bY8aVWwTwCXgxPNgLAtmHL+Hs5q1ddLQ== |
||||
|
|
||||
gauge@~2.7.3: |
gauge@~2.7.3: |
||||
version "2.7.4" |
version "2.7.4" |
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" |
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" |
||||
@ -4895,6 +4970,22 @@ jsonfile@^3.0.0: |
|||||
optionalDependencies: |
optionalDependencies: |
||||
graceful-fs "^4.1.6" |
graceful-fs "^4.1.6" |
||||
|
|
||||
|
jsonfile@^4.0.0: |
||||
|
version "4.0.0" |
||||
|
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" |
||||
|
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= |
||||
|
optionalDependencies: |
||||
|
graceful-fs "^4.1.6" |
||||
|
|
||||
|
jsonfile@^5.0.0: |
||||
|
version "5.0.0" |
||||
|
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-5.0.0.tgz#e6b718f73da420d612823996fdf14a03f6ff6922" |
||||
|
integrity sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w== |
||||
|
dependencies: |
||||
|
universalify "^0.1.2" |
||||
|
optionalDependencies: |
||||
|
graceful-fs "^4.1.6" |
||||
|
|
||||
jsonfile@^6.0.1: |
jsonfile@^6.0.1: |
||||
version "6.1.0" |
version "6.1.0" |
||||
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" |
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" |
||||
@ -7552,6 +7643,11 @@ systeminformation@^5.9.16: |
|||||
resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.9.16.tgz#097d5b585401b209b3448d1fe84551a5a582b904" |
resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.9.16.tgz#097d5b585401b209b3448d1fe84551a5a582b904" |
||||
integrity sha512-GDqen5wR9p3GVrTlyFYKbtQIE9eEhqd6Ya9Jr6HReSbDYJuYqhUgYTLuEt45qpSgNj1hKonUe/IzzdFXFmRBeg== |
integrity sha512-GDqen5wR9p3GVrTlyFYKbtQIE9eEhqd6Ya9Jr6HReSbDYJuYqhUgYTLuEt45qpSgNj1hKonUe/IzzdFXFmRBeg== |
||||
|
|
||||
|
tabbable@^4.0.0: |
||||
|
version "4.0.0" |
||||
|
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-4.0.0.tgz#5bff1d1135df1482cf0f0206434f15eadbeb9261" |
||||
|
integrity sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ== |
||||
|
|
||||
tapable@^2.1.1, tapable@^2.2.0: |
tapable@^2.1.1, tapable@^2.2.0: |
||||
version "2.2.1" |
version "2.2.1" |
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" |
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" |
||||
@ -7667,6 +7763,11 @@ time-stamp@^1.0.0: |
|||||
resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" |
resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" |
||||
integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= |
integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= |
||||
|
|
||||
|
tiny-emitter@^2.1.0: |
||||
|
version "2.1.0" |
||||
|
resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" |
||||
|
integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== |
||||
|
|
||||
tiny-inflate@^1.0.2: |
tiny-inflate@^1.0.2: |
||||
version "1.0.3" |
version "1.0.3" |
||||
resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" |
resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" |
||||
@ -7789,7 +7890,7 @@ tr46@~0.0.3: |
|||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" |
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" |
||||
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= |
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= |
||||
|
|
||||
tslib@^2.3.0: |
tslib@^2.0.0, tslib@^2.3.0: |
||||
version "2.3.1" |
version "2.3.1" |
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" |
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" |
||||
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== |
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== |
||||
@ -7801,6 +7902,21 @@ tunnel-agent@^0.6.0: |
|||||
dependencies: |
dependencies: |
||||
safe-buffer "^5.0.1" |
safe-buffer "^5.0.1" |
||||
|
|
||||
|
[email protected]: |
||||
|
version "13.1.0" |
||||
|
resolved "https://registry.yarnpkg.com/twemoji-parser/-/twemoji-parser-13.1.0.tgz#65e7e449c59258791b22ac0b37077349127e3ea4" |
||||
|
integrity sha512-AQOzLJpYlpWMy8n+0ATyKKZzWlZBJN+G0C+5lhX7Ftc2PeEVdUU/7ns2Pn2vVje26AIZ/OHwFoUbdv6YYD/wGg== |
||||
|
|
||||
|
twemoji@^13.0.0: |
||||
|
version "13.1.0" |
||||
|
resolved "https://registry.yarnpkg.com/twemoji/-/twemoji-13.1.0.tgz#65bb71e966dae56f0d42c30176f04cbdae109913" |
||||
|
integrity sha512-e3fZRl2S9UQQdBFLYXtTBT6o4vidJMnpWUAhJA+yLGR+kaUTZAt3PixC0cGvvxWSuq2MSz/o0rJraOXrWw/4Ew== |
||||
|
dependencies: |
||||
|
fs-extra "^8.0.1" |
||||
|
jsonfile "^5.0.0" |
||||
|
twemoji-parser "13.1.0" |
||||
|
universalify "^0.1.2" |
||||
|
|
||||
type-check@~0.3.2: |
type-check@~0.3.2: |
||||
version "0.3.2" |
version "0.3.2" |
||||
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" |
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" |
||||
@ -8644,7 +8760,7 @@ xmlhttprequest-ssl@~1.6.2: |
|||||
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz#03b713873b01659dfa2c1c5d056065b27ddc2de6" |
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz#03b713873b01659dfa2c1c5d056065b27ddc2de6" |
||||
integrity sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q== |
integrity sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q== |
||||
|
|
||||
xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: |
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: |
||||
version "4.0.2" |
version "4.0.2" |
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" |
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" |
||||
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== |
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== |
||||
|
Loading…
Reference in new issue