* move home link to a customisable navlink
* add trailing slash for path
* update specs
* replace positions, set home link to -1
* add update script for adding home navigation link
* update data update script
* AB Test for Feed Strategy
Adding the plumbing for performing AB Tests on the feed strategy.
You can add the environment variable `AB_TEST_SERVICE_FEED_STRATEGY` to
specify the field test to run.
For example, from the forem application home directory you can run the
following to force a strategy for all users:
```console
AB_TEST_SERVICE_FEED_STRATEGY=original bin/start
```
Forcing the strategy can significantly help with quality assurance testing.
* Adding configurable weighted feed strategy
I wrote about this exploration on [DEV.to][1]. This particular
implementation provides significant configuration options for A/B
testing.
At it's core this `Articles::Feeds::WeightedQueryStrategy` provides a
means to query articles that are relevant to the user. The
configuration helps us test and refine those values.
Further more this implementation introduces the idea of some common
interfaces for feed strategies. I'm not happy with the naming
convention but we can work to change that.
This even hints at a mechanism for administrators to configure.
Related to forem/rfcs#314, as I work towards understanding the feed
algorithm. And #15180
[1]:https://dev.to/jeremyf/practicing-postgresql-and-postulating-improvements-5m
* Renaming AbTestService to AbExperiment
I'm loath to end any production class's filename with "test". I don't
want minitest or rspec coming along and attempting to "test" that file.
In addition, I find that Experiment better describes the concept.
Also, per conversations with Michael K, we favor nouns objects to go
in app/models and verb objects to go in app/services. That's a great
separation.
* Factoring AbExperiment into a Controller concern
I wish this could be a stand-alone module but the implementation of
field test has cases that require controller context.
* Sanitizing configurable weighted strategy cases
* Minor refactoring of coding structure
* Renaming parameter for clarity
* Renaming variable to avoid confusion
Prior to the commit, `env` is a controller variable. The injected `env`
variable didn't collide, but did create just a bit of confusion.
With this change, I'm trying to disentangle from that variable.
* Factoring AbExperiment away from mixin concern
Per discussion with Michael K, we both agree that we do not like
controller concern mixins. They can quickly complicate the legibility
of any given codebase.
This refactor provides a common and simplified interface for a Plain Old
Ruby Object (PORO) that accounts for the implementation considerations
of the underlying "field_test" controller method.
* Adding Datadog.tracer.trace around feed actions
* Adding featured_article_factor
Prior to this commit, there was no consideration for how moderators
engage with an article. This is a first nudge towards that effort.
* Removing spec
Add a spec that says yes or no we're feature testing something seems
fragile. Namely, why are we wanting to assert that as a truism.
* Helping ensure we're "tracing" the same things
From the code comment:
> Hey, why the to_a you say? Because the
> LargeForemExperimental has already done this. But the
> weighted strategy has not. I also don't want to alter the
> weighted query implementation as it returns a lovely
> ActiveRecord::Relation. So this is a concession.
* Addressing parameters for tracing function
* For weight feed query only count positive tags
A user assigns explicit points to the tags that they do or do not want
to see. This change treats the negative explicit_points as an indicator
that they don't want to see the tag.
* Adding weighted factor for privileged user reactions
* Updating comments to better clarify
* Adding additional constraint for published_at
* Updating documentation and adding logger
* Adding documentation concerning method call
* Upping logging level for experiments
See conversations in https://github.com/forem/forem/pull/15240
* Adding group by clauses to appease postgres configs
* Injecting relevant scoring method's joins
Prior to this commit, we included all of the joins regardless of the
scoring methods chosen. With this commit, we only inject joins that are
used with the commit.
What this would allow us to do is to then have some pre-cooked scoring
methods but not turn them on. Or to turn off the more expensive scoring
methods.
* Adding feature flag for feed strategy experiment
* show top tags when search is empty
* add cypress tests
* nudge travis
* tweak to e2e test
* show a 'top tags' heading
* only suggest tags that are supported
* Add supported scope to Tag
Co-authored-by: Michael Kohl <citizen428@forem.com>
* Admin-configurable display locale
* Add i18n-js and namespacing
* Basic tests and clean up
* A few test adjustments
* Update vendor cache
* Fix a few tests
* Fix a few tests
* Update app/views/articles/_actions.html.erb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Update app/views/articles/_comments_actions.html.erb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Update app/views/articles/_single_story.html.erb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Update app/views/articles/_single_story.html.erb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Update app/views/comments/_comment_header.html.erb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Update app/views/layouts/_sidebar_tags.html.erb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Update app/views/listings/index.html.erb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Update spec/system/homepage/user_visits_homepage_articles_spec.rb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Update spec/system/user/view_user_index_spec.rb
Co-authored-by: Michael Kohl <citizen428@dev.to>
* Alphabetical locale page
* Add activerecord custom validation error translations
* Add i18n to webpacker
* Fix a few tests
* Adjust error messages
* Add i18n-tasks
* Adjust JS to get working with jest
* Adjust the way translations are pulled in
* Adjust jest tests
* Remove time localization
* Remove superfluous public js
* Add basic tests for i18n application controller
* Remove unnecessary content
Co-authored-by: Michael Kohl <citizen428@dev.to>
* schema file undelete description
* update with main
* update with origin
* add sections in Admin
* Add "Section" radio btns to New-Link form
* Ensure links created in correct section
* Ensure links created in correct section pt2
* fix styling in admin
* complete section split on frontend
* start on specs
* complete specs
* remove unnecessary Cypress test file
* address all a11y comments in PR review
* fix broken specs due to a11y changes
* schema file undelete description
* feat: v1 of the script
* Flesh out remaining enums under their categories
* complete UsersSettings data update script
* complete DUS for relevant attributes in users and profiles tables
* complete DUS for users_notification_settings
* alphabetize user_settings sql file
* safeguard against null values for "null: false" settings
* Set up actual UsersSettings DUS and specs files
* fix broken DUS script
* complete specs for UsersSetting DUS
* Address QA of specs
* complete specs for users_notification_settings DUS
* fix the typos (thanks Julianna!)
* begin implementation
* still building
* add missing attribute "email_membership_newsletter"
* complete sync code (except race condition for user profile)
* complete implementation, remains tests
* Address PR review and fix Travis fails
* remove superfluous Profile.new
* fix travis fails
* feat: update the users_notification_setting attributes from the user model
* feat: use the config fonts enums to display the fonts
* feat: loop through the keys
* fix profile = nil blowing up; add specs for notification_setting model
* remove unneeded spec
* remove feed validation until after sync code removed; fixes feed_import spec failures
* remove spec associated with feed_url validation in user_setting model
* fix failing spec 😅
* add TODO
* feat: set the user settings in the user controller and use it in the customization form
* feat: move some update logic to the users settings controller thats being used from customization
* feat: show the updated values form the users_settingd and not the user instance
* Generalize redirect back to current tab
* still trying to reflect changed theme upon refresh
* customizations take effect on refresh
* remove 'with_feed' scope from user model
Co-authored-by: Jamie Gaskins <jamie@forem.com>
* start with takeover for fields previously in profiles table
* Takeover code for `publishing_from_rss` section in Settings (#13914)
* implement takeover code part 1
* implement takeover code
* fix feed fetch
* need rhymes help
* complete implementation; specs pending
* fix STUPID omission that caused so many headaches 😫
* implement profile fields pointing to users_settings 🎉
* run migrations
* implement inbox type & guidelines takeover code; specs pending (#13911)
* Point changes in notification settings to `users_notification_settings` table (#13910)
* implement takeover code; remains specs
* address PR feedback; remove related sync code
* address PR review feedback
* need help with routing and specs
* address pr review
* addressing pr review
* Treat implementation edge cases and omissions 😅
* fix uncommented comment
* fixing implementation cases
* address more PR review feedback
* fixing notifications use-cases
* refactor settings controller
* more pr review changes
* solving bugs
* fix broken onboarding
* handle eperience_level calls
* more fixes
* remove unneeded mappings
* add To-dos for quety updates
* remove done TODO
* purge done TODOs
* update notification_settings-related queries
* start fixing specs
* fixing specs
* fix notification and lrg_forem specs
* fixing broken specs
* still fixing
* fix line dif and remove reloads from user.rb
* run specs
* silence bullet and other fixes
* remove setting migration scripts and specs, fix more settings for specs
* handle missing user for article builder and fix notification specs
* fix some final controller specs and re-add incorrectly removed specs
* remove deprecated data update scripts and related workers, put travis back
* refactor admin tags mods controller, write/move specs for users notifications settings controller
* schema cleanup and other small refactors for consistency
* set field we can invalidate in spec via active record instead of at the db level
* remove I think an uneccessary hook call from subscribe_to_mailchimp_newsletter
* use bnefore_create to setup settings, please dont blow up the test suite
* mailchimp bot fix
* remove decorator in favor of single model method
Co-authored-by: Arit Amana <msarit@gmail.com>
Co-authored-by: Ridhwana <ridhwana.khan16@gmail.com>
Co-authored-by: Arit Amana <32520970+msarit@users.noreply.github.com>
Co-authored-by: Jamie Gaskins <jamie@forem.com>
* Removes collective_noun and collective_noun_disabled from app
* Config Generalization: replaces community_qualified_name with community_name
- Generalizes SiteConfig after the removal of collective_noun field
- Updates copy where necessary to be readable with community_name
- Makes the community_name SiteConfig description more explicit
- Adds flexibility for Admins by removing appended "community"
* Adds a data_update script to remove collective_noun and collective_noun_disabled
* Removes appended community from stories_controller.rb
* Removes unnecessary quotation marks around SiteConfig.community_name.to_s
* Makes SiteConfig community_name description more explicit
* Removes topic from #email_from and replaces arg with _
* Removes argument from #email_from (facepalm)
* Reverts changes to application_mailer and notify_mailer_spec
* Removes default "Community" topic from application_mailer and makes topic optional
* Refactors #prepopulate_new_form to resolve Code Climate failures
* Refactors #email_from even further by use of a ternary operator per review suggestion
* Simplifies the data_update script used to remove collective_noun per review request
* Adds a data_update script to append community to community_name
* Updates data_update script to correctly append Community to community_name
* Removes RemoveCollectiveNounFromConfig and updates other script
* Removes superfluous false from data_update script
* Updates data_update script to be more idiomatic
* .
* .
* .
* .
* .
* specs
* specs
* .
* .
* merge
* moving cheese around
* layout
* .
* merge
* Fixed invalid selector for search.
* Fixed issue with URL not updating after a search.
* do things better
* kinda merge
* whoops
* whoops
* .
* .
* im a backend developer
* tooltips 1.0.1
* tooltips 1.0.1
* fix
* specs
* .
* reduce the spacing
* schema drop
* reverts
* revert
* reverts
* revert
* drop unused nav
* drop unused nav
* drop unused nav
* drop unused nav
* typos
* paths fixes
* speeding up JS
* js
* search
* Reworked initializeTopBarIcons.js
* Reworked initializeNavigation.js
* Small refactor and updated exported function API docs.
* Fixed a bug I created when refactoring the top navigation icons.
* sidebar nav links
* spec
* Fixed issues with logged out experience for top nav icons.
* Small refactor of top nav icons.
* Small refactor and added some API docs.
* Added @testing-library/dom
* Added tests for top navigation utilities.
* spec
* spec
Co-authored-by: Nick Taylor <nick@dev.to>
* Let dev/test blow up if current_user is used erroneously
* Fix logic
* Fix click-to-edit permissions
* Change test to check for new behavior
* linting
* Edit tests
* Change test
* Clean up implementation
* Update comment
* Fix instance vars
* Update app/controllers/concerns/caching_headers.rb
* Merge origin and add request_store gem
* Adds an Explore Tag section for logged in users
- Logged in users who follow no tags are shown Explore Tags
- Links to the /tags page
- Shows top 5 tags below Explore Tags header
* WIP: Adds a test around logged in users who do not follow tags
* Refactors spec to test Explore Tags functionality and adjusts id in _sidebar_nav
* Replaces cog svg with linked header
* Implements design suggestions for Explore and adjusts test
* Fix tag display bug and crayonsify
* Fix some specs
* Remove unused tag js
* Adjust to remove crayons card bg
* Adjust padding
* add spacing below nav
* drop unnecessary classname
* cleanup headers
* links
* Finalize style and add hint to eliminate div jump
Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com>
* feat: configure the frontend for sidebar nav links
* chore: add a comment
* changes to the admin interface
* feat: move the temporary task to be in the rake tasks and use it in the dev seeds
* feat: use the task in the rake seeds
* refactor: reuse the form across two modals
* refactor: use the form partial
* feat: change the modal to be large
* fix: naming
* Update db/seeds.rb
Co-authored-by: Michael Kohl <me@citizen428.net>
* chore: make the file readable
* chore: removed the if else as the rake task was run on all forems + i sent out a message to new communities
* oops
* refactor: add a scope
* chore: oops removed this
* feat: add navigation links specs
* spec: fix two failing ones
Co-authored-by: Michael Kohl <me@citizen428.net>
* Create first start at desktop top header updates
* Update mobile styling of top header
* Stylize sign in widget card
* Update nav menu and top bar
* Changes based on user being logged-in or not
* Uses user_signed_in? on top nav bar
* Fix lingering old cloudinary helper method
* Trigger CI
* Fixes specs
* Adds redirect_using_referer_spec, fixes other specs & cleanup
* Adds nav-menu.scss to layouts/_styles.html.erb for inline & small edit in referer check
* Remove logged-out styles to make it more uniform with logged in
* Remove nav-menu.scss file
* cleanup markup and JS a little
* Fixes FB auth specs to new login links
* Makes sure unauthenticated /new redirects back to editor
* CI fix Sing in with -> Continue with
* Update db/schema.rb
* Update db/schema.rb
* Update db/schema.rb
Co-authored-by: Fernando Valverde <fdov88@gmail.com>
Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com>
Co-authored-by: Ben Halpern <bendhalpern@gmail.com>
* Add gem omniauth-apple
* Integrate omniauth-apple
* Integrate callback
* Add fields
* Add tests, fix bugs and make it all work
* Show only enabled providers for the current user
* Add default profile image for Apple
* Remove localhost patch
* Bring over the changed Apple username if the user changes it
* More specs fixed
* Incorporate feedback from PR
* Fix specs
* Simplify code and fix spec
* Fix Broadcast generators to take into account the new provider
* Fix spec
* Generate a truly unique apple_username
* Fix user specs
* Add omniauth-apple-0.0.2 to vendor cache
* Fix merge conflict and spec
* Update VCR fastly sloan cassette
* Revert "Generate a truly unique apple_username"
This reverts commit 2462875575b0bbd6b3c1d56b25afcd3189671608.
* Fix user specs
* Fix specs
* Fix specs
* Hide Connect Apple button behind a feature flag
* Revert "Hide Connect Apple button behind a feature flag"
This reverts commit 105bde0373389a4eb9b6e948f60734c7e0e99cba.
* Fix line lengths
* Fix spec
* ES tag
* CSRF bypass for Apple callback
* custom user_nickname in Apple provider with small tweaks + omniauth-apple bump
* Fixes username specs
* Makes Apple users default image Users::ProfileImageGenerator
* Fallback to mascot_image_url in test environment to avoid breaking Travis
* Fixes Apple CSRF error + makes default nickname more readable
* Trigger Travis
* Removes CSRF Apple fix from Omniauth callbacks
* Removes Envfile
Co-authored-by: rhymes <rhymesete@gmail.com>
Co-authored-by: rhymes <rhymes@hey.com>
We are no longer using the Percy service, so this code is not required anymore.
Removes the percy agent, the gem, and all references to Percy.snapshot and percy: true.
* flare tag line height
* .
* init styling
* social buttons
* no need for inverted
* other places
* more
* Fix specs
Co-authored-by: rhymes <rhymesete@gmail.com>
* Provide default crayon styles when creating banners
* Import crayons styles into /internal pages.
* Allow admins to use crayons banner styles when creating broadcasts.
* Preview banner styles with crayons.
* Add a "x" close button to announcements, fix styling to accommodate it
* Use constant and helper for broadcast banner styles
* Add VALID_BANNER_STYLES frozen constant to Broadcast class.
* Add banner_style helper for determining banner style class.
* Clean up preview CSS, import broadcast styles into preview
* Add close button click handler, clean up initializeBroadcast
* Add close functionality to announcement banner
Also hide announcement if the user has explicitly seen and "X"-ed out of it.
* Add system specs around rendering + dismissing broadcasts
* Add some (truly beautiful) JS documentation
* Add visible class to broadcast when previewed from internal
* Serialize broadcast_data within AsyncInfoController::base_data
Adds a `broadcast:` key to our `base_data`, regardless of whether a user is logged in or not.
If a broadcast is not present, passes along a `nil` value.
* Initialize active broadcast (if present) when rendering main page
* Allow admins to preview a broadcast's processed_html when editing
* Add some fixed position styling to active broadcast
* Add system specs around broadcasts on homepage
* Use sanitize in place of html_safe when previewing broadcast
* Do not initialize broadcast if no broadcastData available
* Render default value on broadcast in options_for_select
* JS cleanup
* Unset fixed positioning for static navbar config
Also add some default styling for an active broadcast
* Add Percy to Gemfile, rails helper
* Percy snapshots for using the editor
* Add PERCY_TOKEN to sample_application.yml
* Percy snapshots for visiting the homepage
* Percy snapshots for viewing an article's comments
* Percy snapshots for creating an article
* Percy snapshots for editing an article
* Percy snapshots for logged in/out user
* Remove empty spec file
* Percy snapshots for settings page
* Percy snapshots for reading list
* Percy snapshots for admin view
* Percy snapshots for moderator view
* Percy snapshots for authentication views
* Percy snapshots for article and tag views
* Percy snapshots for editing/deleting comment views
* Percy snapshots for admin views
* Percy snapshots for comment views
* Percy snapshots for organization views
* Percy snapshots for pro membership views
* Percy snapshots for podcast views
* Percy snapshots for user views
* Percy snapshots for dashboard views
* Percy snapshots for homepage views
* Percy snapshots for video views
* Add js: true in tests that require it for Percy
* Percy dependency cleanup
* Add the Percy agent
* Remove the PERCY_TOKEN from sample_application.yml
* Move the Percy gem into the "test" group in the Gemfile
* Remove duplicate snapshots, provide unique names to snapshots
* Set seed on Faker::Config for deterministic Percy snapshots
* Freeze time in js: true tests for determinstic snapshots
* Upgrade Percy to v0.26.3
* Add percy: true flag for Percy snapshotting tests
* Add more percy: true flags
* feed cards
* frontend
* preactify
* preactify
* .
* fix
* fixing things and adding dropdown
* whoops.
* whoops 2.
* revert body bg color change
* search snippet
* search snippet
* get rid of featured article
* get rid of featured article...
* cover to its own component
* videos
* videos
* reading time
* small-save-filled asset
* author adjustments
* adjustments
* Author --> Meta
* whoops.
* loader
* logged out state
* .
* dropping what's not needed for now
* better name for cover
* get rid of nav overflow
* bringin comments placeholder back
* bringing comments placeholder back
* publish date
* fix
* date
* .
* save button icon
* ghost button
* lets skip the icon for saving for now
* more buttons
* counting logic
* Display top comments on homepage feed
* Comment list and item components
* Remove 'Top Comments' title
* Remove subscribe button, add reading time
* Update snapshots and tests
* Fix article and follower scrolling
* Added reading time
* (Try) to do flare tags
* Button component from Pawel
* More button styles from Pawel
* Comment count style from Pawel
* Handle empty parens for age on older articles
* Dont show 'more comment' button for more than 2 comments
* cover ratio
* flare tag
* cover fix
* fix buttons
* more button fixes
* tags fix
* responsiveness fix
* reading time + a bit of responsiveness
* Reading time in more places
* snapshots
* default color for flare tag
* Update CommentsList test snapshot with new styles
* fixing search results
* fixing buttons
* Fix podcast card tests by updating snapshots
* Line clamping for top comments
* Reflect save button state after click before mouseout
* Now the entire feed card is clickable. (#7638)
* Now pointer cursor is only on feed posts. (#7727)
* Revert podcast card styling
* Update test snapshot
* merge
* Fix rspec on feed page
* Reduce complexity of class check for feed card clicking
* PR feedback/fixes
* Fix featured article test and snapshot
* Last minute test tweaks
* clean up crayons
* padding issue + empty div
* Correct merge error
* Fix search results tests
* Test fixes and snapshot updates
* themes
* podcasts colors
Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com>
Co-authored-by: Nick Taylor <nick@iamdeveloper.com>
* de-emphasizing right sidebar: mostly colors & spacing
* adding a bit more love to typography in sidebar
* changing language on LISTINGS widget header
* hiding profile widget from left sidebar
* cards shadow now looks like a bit less random and annoying
* actually doing the same with all shadows! YOLO
* some spacing cleanups around sidebars
* this time some typography love
* im committing but not really sure what exactly
* adding a bit more love to feed card
* looks like i broke some other views.. time to fix em all
* cleaning up typography a bit more
* .
* separating empty search results styling
* created a card styling mixing to reduce some code.. also moved cheese around a bit
* several more cleanups
* improving responsiveness
* i fixed what i broke
* more cleanups
* org badge
* .
* ...
* responsiveness
* .
* some adjustments
* bring back profile card
* tiny logo adjustment
* bunch of further refainments
* typography
* a bit more refainments
* whoops
* bringing back CTAs styling to loggedout sidebar
* fixes to left tags in left sidebar after merge
* buttons fix
* fixing border-color
* Update app/assets/stylesheets/articles.scss
Typo!
Co-Authored-By: Nick Taylor <nick@iamdeveloper.com>
* .
* css cleanup + double border on article page
* removing unnecessary comments
* get rid of loading glitch
* static vs fixed header
* Update system specs
* Update client test snapshots
* Further modify homepage specs
Co-authored-by: Nick Taylor <nick@iamdeveloper.com>
Co-authored-by: Ben Halpern <bendhalpern@gmail.com>
* Consolidate `.decorate` calls
* Move Activerecord finders out of main stories feed partial
* Add back in decorates to sticky_articles partial
* Combine top and new articles returned from StoriesController
* Extract feed construction logic to a service
* Some PR tweaks (naming)
* Quick test fix
* SASS formatting in action.
* Unnested .sidebar-nav-element in SASS
* Created the <TagsFollowed /> component.
* Mini refactor.
* Left side bar uses <TagsFollowed /> component now.
* Accomodating InstantClick
* Small refactor and added some comments.
* The homepage webpacker pack only needs to be loaded once.
* Added tests for the <TagsFollowed /> component.
* Modified the receive InstantClick callback as per their docs.
* Reverted the data-no-instant on he homepage bundle. It seems to cause issues in certain scenarios.
* Just some tweaks to <TagsFollowed /> component.
* Removed CSS for general img tag in context of sidebar as it does not appear to be used.
* Fixed copy paste error from JSX to HTML.
* Fixed <img /> styles for arbitrary sponsorship widget.
* Fixed a regression that a Capybara test caught.
* Fixed user followed tags on home page tests.
* Fixed logic for loading user data on homepage.
* Change design of main feed CTA and remove from tag pages (to prevent complexity)
* Lock Chromedriver to 74.0.3729.6
* Fix tests and modify reserved words (tack on)
* Removed less useful shared examples from rspec
* Remove references to file that no longer exists in test
* Remove unneeded tests
* Add article decorator published_timestamp
* Use time HTML5 element and refactor date in partial
* Add published_timestamp to Article
Adding `published_timestamp` to the homepage we can then use JS to render the full timestamp localized for the user.
We've also added the timestamp to the index and the API
* Display article published timestamp on hover
* Use time also in the article show page
* Add timestamp to bottom articles as well
* Remove published_timestamp from index because it is not used
* Fix broken specs
* Add more article dates specs
* Refactor date initializers