Releases: coralproject/talk
v4.3.1
Fixes and Enhancements
- Fixes to Safari + iOS auth issues when using an external auth provider with the
embed.login(<token>)
method #1509 - Prompts to save settings on admin page on navigation #1498
- Duplicate comment content rendering for featured comments and profile #1506
- Render links in the RTE #1500
- Fix a bug with the
IfSlotNotEmpty
component #1503 - Fixed a bug with webpack loading, plugins can now contain client code when loaded from npm 🎉 #1502
- Fixed install buttons on install #1494
- Scraper now includes a user agent header to help identify it #1481
- Added a link to a missing tutorial #1495
- Misc doc updates #1492
- Fix to asset scraping cli #1510
- Added Finnish translations! (Thanks @kauppvi!) 🇫🇮
- Improved French translations. (Thanks @cecilebertin and @TheoChevalier!) 🇫🇷
v4.3.0: Notifications and Rich Text
Features
-
Introducing Email Notifications! ⏰
- You can enable core notifications support via
talk-plugin-notifications
(server & client) - Commenters can manage their email notification settings within the Settings Tab on their My Profile
- Commenters will need to verify their email to receive notifications
- Supports SMTP email notification sending & ability to override this if you are using an ESP
- Supports ability to override email templates
- Learn more about How to Setup Email Notifications
- Read Docs and Advanced Configuration
- Notification Categories available:
talk-plugin-notifications-category-reply
: Sends a notification if a commenter receives a reply to their commenttalk-plugin-notifications-category-staff-reply
: Sends a notification if a commenter receives a reply from a staff membertalk-plugin-notifications-category-featured
: Sends a notification if a commenter's comment is featured
- Notification Digests available:
talk-plugin-notifications-digest-hourly
: Digests notifications by the hourtalk-plugin-notifications-digest-daily
: Digests notifications by the day
- You can enable core notifications support via
-
Introducing Rich Text support for comments! ⌨️
- You can enable rich text support via this plugin:
talk-plugin-rich-text
(client & server)
- Supports Bold, Italic, and Blockquote
- Supports both stream-side comments and comments displayed in the Admin
- Ref: #1460
- You can enable rich text support via this plugin:
Plugin Support 🔌
- Introducing Plugin Debug! 🐛
-
plugin_config
changed toplugins_config
(both are still supported,plugin_config
is marked as deprecated) -
Passing
debug:true
to theplugins_config
highlights the slots and when you hover over them you get a tooltip with the name of the slot. This is a simple, interactive and helpful tool to see which slots are available.plugins_config: { debug: true }
-
We've also enabled this in our beta version of Coral DevTools Browser Extension ⚙️
-
- Adds
slotSize
support for Slots; now you can dictate how many plugins are acceptable for a Plugin Slot and the preference will be dictated by their ordering inplugins.json
(ref: #1402)
Dev Support
- Introduces Yarn Workspaces to reduce package size and simplify plugin flow
- postMessageAPI:
- Replaces the
localStorage
events edition of syncing the access tokens with the Window.postMessage API - Allows Talk to work flawlessly when 3rd party cookies are disabled/blocked by using cross origin safe communication means
- Also patches the storage service to use
sessionStorage
iflocalStorage
is not accessible (like when 3rd party cookies are blocked)
- Replaces the
- Quieter logs on production mode (ref: #1395)
- Adds pre-commit linting (ref: #1400)
- Adds a
metadata
object to theSetting
model, we can leverage all current Plugins hooks to let plugin authors have their own configurations for plugins in the administration dashboard (you know, that place with the other<ConfigureCard>
s) (ref: #1403) - Adds support for CircleCI 2.0 (ref: #1407)
- Improvements to asset scraping (ref: #1425,
- Restores the userCreated event (NOTE: External plugins utilizing the Users service's user create methods must adjust their call signatures to pass in the context) (ref: #1441)
- Uses asset.url as a fallback when asset.title is missing (ref: #1442)
- Improvements to Slots and GraphQL framework (ref: #1446)
- CSS loading enhancements:
- React CSS styling is now extracted into
bundle.css
and included before Custom CSS which solves priority issues with CSS overwrites - Removes
hard-source
webpack plugin as we ran into cache issues - Cachse
babel-loader
instead branch wide in the CI - Webpack output files now include a hash in the filename, which helps dealing with cache issues with an exception for
embed.js
resolve
method is now available in templates, helping to resolve an unhashed filename to the correct one.
- React CSS styling is now extracted into
Documentation
- Lots of new and enhanced docs! 📚
- We now have a Talk Plugin Directory!
- Tons of FAQ's explaining how to customize and integrate with Talk, including a Guide to Building your own Auth Plugin and a Guide to Integrating your CMS and Managing Assets with Talk
- Guide to Build a Basic Plugin
- Guide of What to do once you've installed Talk
- Improved API docs covering our Plugin APIs for both Server and Client, and our GraphQL API, including a GraphQL Guide for Talk
- Moved Docs from Jekyll to Hexo; now to run the docs locally:
- Run
yarn start
in thedocs
folder, - Visit http://localhost:4000
- Run
CLI
- By popular demand, restores
bin/cli users create
to our CLI tools - Ability to disable jobs via the CLI:
- You can now run application with
./bin/cli serve --disabled-jobs mailer
oryarn start --disabled-jobs mailer
to disable the jobs listed (you may specify more than one using a comma to separate them like:yarn start --disabled-jobs mailer,scraper
)
- You can now run application with
Translations
- Talk now supports Arabic! (thank you to @memz)
Fixes & Enhancements
- Show banning and suspension time in days and hours
- Made User Info tooltip in Admin > User History more readable
- Moved Ignored Users to new Settings Tab on My Profile
- Blank states for Ignored Users and Comment History in My Profile
- Improvements to Admin > User History > Account History tab
- Purges
config.auth_token
from redux on logout (fixes: #1393) - Better styling for permalinked comment (ref: #1406)
- Adds a username collision test for new external users. Currently if there is already a user of the format _, no one with the same name will be able to sign up using an external SSO like Facebook or Google. This patch checks for collisions, and if found, adds a random number to the end of the username.
- Fixes a bug when a user tries to logout without having an authenticated request
- Fixes bug with password reset
v4.2.2
v4.2.1
IMPORTANT If you're using our Facebook Auth plugin, talk-plugin-facebook-auth
must be added to BOTH client and server plugins for Facebook Auth to work
Fixes
- Fix typo in Akismet translation file that was causing
talk-plugin-akismet
to break Talk - Fix and clean up Report Details related to Akismet Spam reports and Toxic Comments reports
- Fix Password Reset and Email Verification email links
- Fix bug that was not displaying Suspended status or allowing to Unsuspend a commenter
Auth Refactor
- Decouple auth logic into
coral-framework
- New reducers
config
auth
- New HOCs
withSignUp
withSignIn
withResendEmailConfirmation
withForgotPassword
withSetUsername
- New reducers
- New Components:
Recaptcha
- Decouple login dialog into its own bundle
coral-login
- Implement admin login on top of new abstractions in
coral-framework
- Implement
talk-plugin-auth
on top of new abstractions incoral-framework
- Decouple facebook login from
talk-plugin-auth
- Implement client side implementation of facebook login in
talk-plugin-facebook-auth
- Fixed Recaptcha bug
- Previously you could only send the form once because the recaptcha response is only valid once
- Now a new recaptcha response is requested for each form send
- Implement Recaptcha for the popup login
- Refactor
admin
andstream
init intobootstrap
service - Static config is now automatically added to
config.static
- New slots in
talk-plugin-auth
:authExternalSignIn
andauthExternalSignUp
- Expose new auth abstractions in
plugin-api
v4.2.0
IMPORTANT This release contains a patch for a Pym security vulnerability by upgrading to Pym 1.3.2
Features
- Introducing Draft Comments 🖇 Your comment draft will stay even if you switch Tabs or refresh the page
- Introducing Akismet Spam Support
- Enable the plugin using
talk-plugin-akismet
in yourplugins.json
file (note: you must have an Akismet account) - If commenters enter a comment Akismet flags as spam, they will see this message: "The language in this comment looks like spam. You can edit the comment or submit it anyway for moderator review."
- If they continue to post the spam-flagged comment, they will see: "Thank you. Our moderation team will review your comment shortly."
- The comment enters moderation with a "spam" badge
- For more information about configuring this plugin, please see our Akismet Docs
- Enable the plugin using
Translations & i18n
- Thank you to @hellp's team for contributing a German translation for Talk!
- Add logic that will fallback to English if a translation key or translation is not available
- Update Dutch translations for Core and Plugins
- Add missing translation keys for Core and Plugins
- Add more translation keys for text that was previously i18n-supported
Enhancements
- Add ability to Logout from the /admin page for non-admins
- Add better message if a commenter tries to post while suspended: "Your account is currently suspended. It will be reactivated in [@time]. Please contact us if you have any questions."
- Fix issue that was not correctly setting
TALK_INSTALL_LOCK=
v4.1.0
Upgrading to v4.1.0
If you're moving from 4.0.0 to 4.1.0, a small database migration is required. Upgrade instructions here: https://coralproject.github.io/talk/migration/4.1/
If you're moving from 3.x.x to 4.1.0, please note a database migration and change to your site's embed script is required. Upgrade instructions here: https://coralproject.github.io/talk/migration/4/
Features
- Introducing... Zen Mode! 🕉️
- Now moderators can focus on moderating one comment at a time by using the
z
shortcode while on the Moderate tab - Hint: once in Zen Mode, use the other keyboard shortcuts to have a mouse-free moderating experience
- Now moderators can focus on moderating one comment at a time by using the
- Improve formatting of comment cards in the Admin
- UX improvements so that commenters can't reply to comments that have been removed in the time they're writing their comment by alerting them that this is the case
Migration Support
-
Improve migrations to support larger scale migrations
-
Add new flags to the migrations cli:
$ ./bin/cli migration run --help Usage: run [options] runs all pending migrations Options: -q, --query-batch-size <n> change the size of queried documents that are batched at a time (default: 100) -u, --update-batch-size <n> change the size of documents that are batched before the update is sent (default: 1000) -y, --yes will answer yes to all questions -h, --help output usage information
Dev Support
- Plugins are now relative to the installation directory rather than the current working directory, improving the plugin experience
- Add an index to the actions collection based on the action_id
- Error Handling Improvements including
-withQuery
andwithMutation
now produces an HOC that supports a parameternotifyOnError: boolean
which defaults to true. IfnotifyOnError
is true, a notification is shown to the user when the mutation or query has failed. - Replace previous moderation array with a more modular approach and replaces
pre-git
withpre-commit
to simplify the development workflow - Improve Webpack performance (ref: #1297)
- Add Dynamic Public path support (ref: #1331)
CLI Support
cli users
: Improveusers delete
CLI support- Remove old code related to db verifications from user deletion
- Introduce migration concepts to resolve updating counts
cli assets
: In situations where URL's need to change, or there is a duplicate comment stream, the best recommendation is to use a combination of CLI tools to rectify the situation (ref: #1290):-
You can use the
./bin/cli assets list
to find assets in the system -
You can use the
./bin/cli assets merge <srcID> <dstID>
to merge two assets by their ID's, moving all comments into the sources ID -
You can now use
./bin/cli assets rewrite <searchPattern> <replacementPattern>
that will use a regex search + replace of urls. This can be extremely useful if you are switching to a new domain, or changing your site from http/https to https-only. -
The best method to mitigate all of these is to provide a asset specific ID into the embed using the:
Talk.render(el, { // ... asset_id: "<myAssetID>", // ... });
-
You can also use our [Custom Asset ID Plugin](https://github.com/coralproject/talk-plugin-custom-asset-id plugin)
// Example usage. const withBanUser = withMutation(...); const enhance = compose( withBanUser({notifyOnError: false}) ); export default enhance(MyComponent);
-
Fixes
- Fix live updates and counts of Reported Usernames
- Fix Activity Dot for alerting moderators when there is new Reported Username activity
- Fix inconsistent mod queue counts and pagination in some edge cases
- Fix regression with the HTML entities encoding for the auth details when being serialized for HTML/JSON
- When a plugin fails to install, the process now correctly shuts down with a non-zero exit code
- Fixes for Reporting flow
- Fixes for Reporting Username > Changing Username flow
- Fix copy for Configure tab on stream
- Fix Accept and Reject buttons not showing in User History Drawer in IE
Translations
- Thank you to nu.nl for contributing a Dutch translation!
v4.0.0
IMPORTANT!
Upgrading to 4.0.0 from any previous release requires a database migration and changes to your site's embed code. You will need to follow the instructions here to upgrade. We advise you to test this release thoroughly before deploying to a production environment.
If you have any questions or need assistance, reach out to our team by logging a support ticket.
Features & Enhancements
- Major refactor of user roles, statuses and attributes to allow for better user management, including banning/unbanning flows, suspending/unsuspending flows, managing flagged usernames/changing of usernames, and managing of roles and role permissions (commenter, staff, moderator, and administrators) (ref: #1154) 💫
- Improved User Search in the Community page by supporting it via GraphQL (ref: #1244) 🕵️
New Plugins
- Released the Custom Asset ID plugin from The Register-Guard to enable custom lazy id's - thank you, Register-Guard! 💖
Plugin Support
- Add
doNotStore
param for our Toxic Comments plugin- Defaults to
true
, meaning Jigsaw will not store your comment text. Change this tofalse
to help Google Jigsaw improve its toxicity models. - Settable as environment variable
TALK_PERSPECTIVE_DO_NOT_STORE
- Docs: https://coralproject.github.io/talk/additional-plugins/#talk-plugin-toxic-comments
- Defaults to
- Add plugin context to plugin functions to allow access to properties like the current Talk version
Dev Support
- Refactor of flags/locales so flags are properly translated and managed (ref: #1045)
- CSS improvements & i18n fixes so emails are properly translated and you can override CSS on the admin pages (ref: #1237)
- Introduced flag and action caching on a per user basis to save on some of those database queries
- Add Safari support to Browserstack for cross-browser testing
- Optimize bundle size by leveraging lodash es6 modules
- Rewrote package scripts, please visit our technical documentation for updates
Translations
- Thank you to our amazing community for providing new translations!
- Traditional Chinese (
zh_TW
) - Simplified Chinese (
zh_CN
)
- Traditional Chinese (
Fixes
- Mark single dangling comments
- Reflow when switching from single mode to multi mode
- Scroll to selected comment when switching from single mode to multi mode and vice versa
- Banning, Suspending, and Rejecting a username updates live on the comment stream for the commenter
- Styling and copy fixes
- Firefox specific UI fixes
v3.9.1
Fixes & Dev Support
-
Deprecate
body-parser
in favor ofexpress.json()
-
Previously, we parsed the expiry date using the
ms
package, yet the services consuming this value assumed seconds; we've adjusted those services to ensure that while the input is parsed from ms, we convert to seconds before using -
Add support for plugin hooks on the websocket connections to support a plugin like the following:
const ms = require('ms'); const clients = new Map(); module.exports = { websockets: { onConnect: async (params, websocket) => { clients.set(websocket, {subscribed: Date.now()}); console.log(`${clients.size} clients - new client connected`); }, onDisconnect: async (websocket) => { if (clients.has(websocket)) { const client = clients.get(websocket); clients.delete(websocket); console.log(`${clients.size} clients - client disconnected after ${ms(Date.now() - client.subscribed)}`); } }, }, };
v3.9.0
Features
- Change "Link" copy to "Share" for permalinks
- Add a confirmation dialogue for Feature in the admin to avoid accidental featuring of comments
Mod Queue Performance Improvements
- Integrate
react-virtualized
- Infinite scrolling: When approaching end of the queue, new comments are automatically loaded
- Limit notifications to comments that are close to current scroll position
- Comments now are never inserted in the middle of the queue, instead these are always appended to the end of the list
- Introduce dangling comments: Instead of removing a comment mid-queue the comments are marked as dangling and they change their background color to indicate that the status of the comment has been modified by another moderator
- Automatic queue cleanup: When switching queues dangling comments are removed and large queues are reduced to 100 comments.
- Better shortcut experience
- Comments are marked as selected when clicked on (shortcut navigation starts from there)
- When tabbing, focus reaches a comment it's selected
i18n Dev Support
-
Support new server side plugin for translations:
When a plugin provides a
translations
hook, they provide an absolute filename path to the translation yaml file that should be included, example:translations: path.join(__dirname, 'client/translations.yml')
. -
Support new
TALK_EMAIL_SUBJECT_PREFIX
config that allows configuration of the email prefix (Defaults to[Talk]
) -
Support sending emails in the default language selected with the
TALK_DEFAULT_LANG
config
Schema & Connector Plugin Support
- Add support for plugging into schema level resolve
- Add support for plugging into graph connectors
End-to-end Testing Support
- Correct wrong spec in
04_userStatus.js
- Fix issues with switching window handlers in firefox and edge
- Configurable timeout for WaitForConditions
--timeout
parameter inyarn e2e
yarn e2e-ci
now accepts aE2E_WAIT_FOR_TIMEOUT
env- Default to 10s
yarn e2e-ci
now acceptsE2E_BROWSERS
env with a list of browsers- Defaults to
chrome,firefox,edge
- Defaults to
yarn e2e-ci
now acceptsE2E_DISABLE
env- If set to
true
ci will skip e2e
- If set to
Fixes
- Fix error when signing in through the Profile tab
- Fix comments by admins not appearing in stream when Pre-Mod is turned on (as they are auto-approved)
- Fix load more comments error on User Detail
- Fix
Dialog
Component not rendering correctly in browsers without nativedialog
support