* Index reactions when they are created and updated, remove when destroyed
* update reading list reactions when related article fields are updated
* create indexable method and use for indexing to elasticsearch
* chore: remove the description
* feat: change the meta og:site_name property from The Practical DEV to The <COMMUNITY_NAME> Community consistently
* refactor: change the canonical link to be more dynamic using the <%= ApplicationConfig["APP_PROTOCOL"] %><%= ApplicationConfig["APP_DOMAIN"] %>
* refactor: update the path to be dynamic
* refactor: change some other meta properties to be dynamic
* refactor: update the index
* refactor: update the sitename to just read <%= ApplicationConfig["COMMUNITY_NAME"] %> Community
* feat: copyright year should be dynamic
* feat: change the meta og:url content to be dynamic by using <%= ApplicationConfig["APP_PROTOCOL"] %><%= ApplicationConfig["APP_DOMAIN"] %> for the former part of the url
* feat: space
* refactor: move the copyright notice to a helper
* refactor: use the community_qualified_name helper!
* refactor: start year is already a string
* refactor: use app url helper instead of <%= ApplicationConfig["APP_PROTOCOL"] %><%= ApplicationConfig["APP_DOMAIN"] %> everywhere
* chore:oops
* refactor: Change <meta name="twitter:image:src" content="http://i.imgur.com/B4JNl1w.png"> to `<meta name="twitter:image:src" content="<%= SiteConfig.main_social_image %>">` consistently.
* refactor: Replace `<meta property="og:image" content="http://i.imgur.com/B4JNl1w.png" />` with ` <meta property="og:image" content="<%= SiteConfig.main_social_image %>" />`
* chore: update some other meta's
* feat: replace 'The Practical DEV' with 'DEV Community' and
* test: remove The :)
* test: copyright_notice
* fix: syntax error
* feat: name of community
* refactor: use app url
* fix: template strings
* fix: tag
* feat: update the app url parameters
* feat: add a community_name helper so we don't have to refer to an environment variable in the templates
* feat: take into account the case when the start year is a blank string
* feat: single quotes to double quotes
* test: add a test for the #community_name
* chore: update or codeclimate
* chore: amend the community helper
* refactor: use the community_name helper in here
* feat: update ApplicationConfig["COMMUNITY_NAME"] with community_name
* fix: Time.current.year needs to be a string :(
* chore: extra space
* chore: change to use community_qualified_name
* Rename find_broadcast to find_auth_broadcast
* Fix broken div rendering on /notifications tab
* Allow customize notification to be enqueued
* Add specs for customize welcome notification
Also clean up existing specs to match!
* Rename customization notification method for clarity
* Remove some redundant assertions in generator spec
* Fix delete button with correct form_with options
* Use correct path for edit button
* Add test for edit and delete response templates
* Use old pattern to accept alert
* Check for text instead b/c weird timing issue with backend
* throttle requests made to search endpoints
* stub elasticsearch requests in rack attack specs and disable for running specs unless tagged
* use original client IP from fastly to throttle requests to search endpoints
* create index for reactions and their reactables, set up serializer
* use respond_to instead of checking type
* remove rubocop change
* add last_indexed_at to reactions index
* Add audit logging for negative reactions
This change saves requests that create negative reactions to the audit
log. We need to be monitoring admin and moderator actions throughout the
app to increase visiblity on how our tools are being used and identify
abuse.
Additionally, this will help east concerns about giving elevated users
more powerful tools.
* Add a basic UI for moderator audit logs
* Log experience level ratings
* Log tag adjustments
* UI tweaks for moderator actions log
* Add logging to internal reactions controller
* Add logging for admin actions on users and articles
* Add searching to the moderator actions table
* Move audit instrumentation out of concern
We are able to use a PORO here instead of using a Rails concern. Moving
this also makes syntax to audit something quite a bit more explicit and
obvious to future developers
* Change moderator logs pagination page length
* Move auditing to after action filters
* Add moderator actions to the internal navbar
* Add request spec for internal moderator actions
* Use request params to populate AuditLog slug
* Add response templates controller, routes, and view
* Add response templates settings page
* Remove dead code
* Use proper variable oops
* Use proper indentation
* Use before action for checking current_user
* Remove index action temporarily
* Use url helpers for redirects
* Use form_with over form_tag and form_for
* Persist previous content if edit fails
* Use exists for performance
* Remove index spec and add CRUD specs
* Memoize @response_template
* Use workaround for sad paths b/c render doesn't work
* Refactor and extract permitted_attributes into var
* Use present over exists to preload into memory
* Use last over first
* Lint for codeclimate
* Use two redirects for happy and sad create path
* Remove proper index route oops
* Codeclimate comma sigh
* Update some test descriptions in notifications_spec
The descriptions of these tests didn't actually match the test's assertions!
* Add welcome_notifications column to users table
Also ensures that welcome_notifications cannot be set to `nil`.
* Show an opt-out message for Welcome broadcast notifications
* Add opt-out link to notifications + welcome notification box to settings
* Allow welcome notification subscription to be updated
* Add tests for unsubscribed to welcome notification users
Also refactor generator specs a bit.
* Fix up paths, copy, tests
Use rails path helpers instead of hardcoding paths. Improve copy in a few locations.
* Add a table for moderator reactions
This is a simplified version of a feature that should be fleshed out
in the near future.
Despite the fact that this project is taking a new direction, I think
this table could be useful in the meantime.
* Add specs for internal mod actions view
* Rename mod actions to negative reactions
* Add Slack::Announcer and SlackClient
* Add Slack::Messengers::Feedback class
* Use Slack::Messengers::Feedback and refactor test
* Should not raise an error if params are nil, let the job fail
* Add Slack::Messengers::Sponsorship
* Rename spec
* Use Slack::Messengers::Sponsorship
* Add Slack::Messengers::PotentialSpammer
* Use Slack::Messengers::PotentialSpammer
* Add Slack::Messengers::RateLimit and use it
* Refactor a bit and improve tests
* Add Slack::Messengers::Note and use it
* Use Slack::Announcer and fix spec
* Fix specs
* Update app/services/slack/announcer.rb
Co-Authored-By: Vaidehi Joshi <vaidehi.sj@gmail.com>
* Implement review suggestions
* Empty commit to trigger Travis
Co-authored-by: Vaidehi Joshi <vaidehi.sj@gmail.com>
* add tons of colors
* add tons of colors
* moving cheese around and prepping for new theming system
* documenting
* .
* moving theme code to own files
* replacing some variables
* whitespaces
* replacing another batch of variables
* get rid of another variable
* replace loading animation variable with one-fits-all-sizes
* get rid of theme-anchor-color
* remove code colors variables
* another batch of variables replaced
* mostly bringing in variables for haxor theme
* remove invert-image variable for chat
* remove another inver-image variable
* forgot to remove reaction-background variable
* remove border variable
* series
* .
* remove another variable
* remove another variable..
* another batch of variables
* and more...
* drop comments
* Update approval file for tweet
Co-authored-by: rhymes <rhymesete@gmail.com>
Co-authored-by: benhalpern <bendhalpern@gmail.com>
* JavaScript MVP
- First round of linting
- Use for testing
* Add some default UI error handling
* Add file validation to updating profile image
* Add type validation and fix size bug
* Refactor and add file validation to article cover
* Add file validation to body images
* Add accept field to profile image form
* Add parseInt to maxFileSizeMb
* Add accept and max-file-size-mb to article images
* Change parseInt to Number
* Add file validations to podcast form
* Add accept image to podcasts
* Add file validation and accept field to org form
* Use appendChild for error message
* Add file validation to comment form
* Add JS Docs comments
* Remove redundant format check
* Add documentation to override default values
* Update documention (spelling, formatting, etc.)
* Update max-file-size-mb to 25
* Bump default max file size for images to 25
* Change appendChild to append
* Refactor remove error message
* Refactor JS, remove console logs, update error msg
* Remove video from permitted file types
* Update error messaging
* Update docs for funciton params...oops 🙈
* Fix file size check logic
- Allow for 0 maxFileSizeMb
- Use JSON.parse() for permittedFileTypes to get an Array
* Add specs
* Change blackbox to black box
* Remove wait_for_javascript
* Remove comments from spec
* Create primary_sticker_image_url in SiteConfig
* Adding test for updating primary_sticker_image_url
* typo
Co-authored-by: Ben Halpern <bendhalpern@gmail.com>
* Add internal response template controller
* Add response template policy and spec
* Add response template views for internal
* Add missing html oops, and some padding
* Use arrays instead of %w because spaces
* Link to user in index list
* Add actual HTML oops
* Allow success flash to be displayed
* Add tag moderator trait
* Remove unnecessary .all
* Use constant to avoid duplication
* Use URL helpers over manual string URLs
* Use appropriate renders and URLs
* Follow conventional CRUD and use form_with
* Add internal request spec for response_templates
* Add missing view file oops
* Use table view for index and bootstrap styles
* Redirect to index after create
* Use clearer messaging for labels
* Validate email types to use only plain text and html