* Basic implementation
* Nit fix
* Using existing profile update api
* API call working
* Basic full implementation
* Nit fixes in design
* UI changes
* Image upload limit set
* Removed drag & drop
* Image size issue fix
* Minor naming fixes
* Removed native mobile code
* Nit fix
* Added few tests
* Added test
* Added test
* Added image upload error
* Added validateFileInput test failure case
* Updated code to test fix
* Revert db changes
* Minor design fixes
* Minor updated test
* Added validateFileInputs test temporarily
* Added processImageUpload test temporarily
* Aded files count test
* Minor warning fixes
* Updated placeholder text
* Added tests for TextInput and TextArea
* Removed un-required test file
* Removed un-required code
* Minor code cleaning
* Suggested follows copy changes
* See if this makes codecov happier?
* Still trying to appease codecov
---------
Co-authored-by: Ben Halpern <bendhalpern@gmail.com>
* feat: fix of there is no article
* feat: set the feed order in a data structure rather than in a view
* feat: update yarn.lock
* feat: push the items to the array
* feat: update feed to only show billboards if we have the correct length of items in the feed
* fix: organizedFeedItems.legth
* feat: rename 'featured' to 'image'
* feat: rename 'featured' to 'image'
* feat: rename 'featured' to 'image'
* feat: add some utilities for the feed that we can use in the FeedTest
* feat/WIP: the setup for the feed tests and a first working test
* test: imageItem
* fix: the podcasts can be passed through as an array of objects in the feedItems so that they can be grouped in one card
* feat: remove podcastEpisode state and the attribute in the object
* fix: check that the items exist before trying to slice them
* feat: setup the userdata and the podcast data in the test
* whoops - commit the podcast episodes
* feat: write soem more tests for the feed and including the podcasts
* feat: add some more tests
* feat: add more billboards tests to chcek the order of stuff
* feat: set the timeframe not empty
* feat: update the logic for organizaed feed by inserting the last on first
* doc: jsdoc for functions
* refactor: break the code up into smaller functions
* refactor: make the code more readable and easier to follow
* refactor: pull function out into a utlity
* feat: add specs to utility
* feat: chcek if pinned post
* test the latest timeframe correctly
* chore: update var name
* move the podcast items out of the object clause
* feat: update text
* feat: add a pack file that duplicates initializeDisplayAdVisibility
* feat: create callbacks that will help us to determine when the feed has been rendered so that we can observe the dsplay ads accordingly
* chore: rename to billboards instead of display ad
* Prepare: relocate user suggestions
* Prepare: relocate users suggestion service -> query
* Organization query for orgs with above-average scores
* Rubocop
* Limit to last 3 weeks
* Tweak recent scope, limit to 5 orgs
* Onboarding routes are also always JSON
* Divide by zero makes NaN means
* Add Orgs suggester into suggestions
* Rubocop
* select distinct orgs
* Fix for weird edge-case with bad local data
* Include type_identifier in JSON payload
* Update follows API to allow org_ids as input
* Update onboarding front-end to distinguish users/orgs
* Fix: i18n issues
* Fix: type_identifier in json output
* Fix: distinct is weird
* Fix: JS linter
* Continue tweaking front-end
* Audit import order
* Cleanup @todo note
* Try renaming controller action
* Move Article average calculation to postgres and fix math
* Refactor decorated type_identifier
* Refactor SuggestProminent, return more orgs, fix spec math
* Use FeatureFlag for organization suggestions
* This might fix the jest
* init
* remove from asset pipeline and add tests
* add utc date conversion test
* try removing last tests
* add some more tests
* add tests for more coverage
* add yet more tests
* separate descibe statments
* add dt test back
* more test cleanup
* include pack js files
* add jest back
* Include /packs/ in code coverage metric
* derp
* revert jest
* reformat some of the test accordingly
* try e2e
* fix cypress test
---------
Co-authored-by: Mac Siri <mac@forem.com>
Co-authored-by: Mac Siri <krairit.siri@gmail.com>
* feat: tests for series list on article page
* feat: test for jump to comments button (needs fix)
* feat: tests for reaction drawer on article page
* feat: test for full date on hover??
* feat: add full date on hover tests for all pages with publish dates
* fixed jumping to comments test
* move initialisers to packs
* fix coverage issues
* fix flaky login modal spec
* switch back to using onclick instead of addEventListener
* Trying some models for audience segmentation
* AudienceSegment basics
* Attach AudienceSegment to DisplayAd
* Possibly use a DUS to populate AudienceSegments
* Add to display ad form UI
* Add to display ad API
* Refresh strategy for audience segments
* Add user_id to async ads query
* Maybe :testing -> :manual, for no-refresh segment
* Test & tweak segment refresh
* Testing audience_segment#refresh logic
* Coverage: testing human_readable
* Scope segment refresh to recently active users
* Tweak logic for when to refresh
* Tweak experience levels to match SettingsHelper
* Test for front-end logic
* Fix test, hope this helps coverage?
* Better test names
* One worker for all, many workers for each, perform_bulk
* Fix audience segment UI, needs to use id, not enum
* cron/schedule should RefreshAll
* Singular id in RefreshWorker
* add dashboard sort initializer and tests within packs folder
* run dashboard sort initializer in base.jsx spinup and on InstantClick change
* remove assets/javascripts' dashboard sort initialization and comment out original file
* fully remove original dashboard sort initializer file
* export both functions within initializeDashboardSort
* refactor import of selectNavigation function within CategoryLinksMobile
* feat: tests for tag page sidebar drawers on mobile
* feat: tests for hero area/banner on home feed
* refactor: move ui interaction initialisers to packs
* remove old filter select implementation
Co-authored-by: Ridhwana <Ridhwana.Khan16@gmail.com>
Co-authored-by: Lawrence S <lboogie@Lawrences-Air.attlocal.net>
Co-authored-by: Rajat Talesra <rajat@forem.com>
* feat: add a route to the async_info for display ads
* feat: load the billboard asyncronously
* feat: move the methods to the display_ads controller
* feat: handle params better
* feat: cache control headers
* feat: test fastly caching headers on display ads
* fix: surrogate key test
* feat: use safe navigation operator to handle cases where there is no article id
* fix: article id present then find the article
* feat: add a response test
* Fragment caching
* feat: update the article decorator
* feat: update cache keys for fragment
* feat: remove an empty line
* feat: add article id
* feat: bust cache
* feat: setup dropdown for billboard
* chore: add chunk to same line
* feat: add to safe params for caching
* Update app/controllers/display_ads_controller.rb
Co-authored-by: Joshua Wehner <joshua@forem.com>
* feat: remove the cache deletion
* feat: update the routes to follow a new scope
* feat: update the cache params
* feat: get and replace all ads on the article page
* feat: do not go into the if statement if there is no async url property so that the ad fails gracefully
* chore: remove duplicate pack
* Update app/views/articles/show.html.erb
Co-authored-by: Joshua Wehner <joshua@forem.com>
* Update app/views/articles/_sticky_nav.html.erb
Co-authored-by: Joshua Wehner <joshua@forem.com>
* chore: add other params
* feat: allows adding placeholder content in the ad if need be
---------
Co-authored-by: Joshua Wehner <joshua@forem.com>
* feat: add a route to the async_info for display ads
* feat: load the billboard asyncronously
* feat: move the methods to the display_ads controller
* feat: handle params better
* feat: cache control headers
* feat: test fastly caching headers on display ads
* fix: surrogate key test
* feat: use safe navigation operator to handle cases where there is no article id
* fix: article id present then find the article
* feat: add a response test
* Fragment caching
* feat: update the article decorator
* feat: update cache keys for fragment
* feat: remove an empty line
* feat: add article id
* feat: bust cache
* feat: setup dropdown for billboard
* chore: add chunk to same line
* feat: add to safe params for caching
* Update app/controllers/display_ads_controller.rb
Co-authored-by: Joshua Wehner <joshua@forem.com>
* feat: remove the cache deletion
* feat: update the routes to follow a new scope
* feat: update the cache params
---------
Co-authored-by: Joshua Wehner <joshua@forem.com>
* Add exclude_article_ids int array
* Add specs, normalize inputs better
* Add to form & controller
* Add exclude_article_ids to DisplayAd API
* Use exclude_article_ids in query
* Rubocop
* Comment typo
* Tweak rspec example length config
* Arguments all the way down
* Typo
* Update spec/requests/api/v1/docs/display_ads_spec.rb
Co-authored-by: Ben Halpern <bendhalpern@gmail.com>
* Update spec/requests/api/v1/docs/display_ads_spec.rb
Co-authored-by: Ridhwana <Ridhwana.Khan16@gmail.com>
* Swagger schema for Display Ad
---------
Co-authored-by: Ben Halpern <bendhalpern@gmail.com>
Co-authored-by: Ridhwana <Ridhwana.Khan16@gmail.com>
* Revert "(Temporarily) Remove multiple reactions from #index (#19142)"
This reverts commit a45d300639.
* Clean up reaction category count mechanism for #index
* Remove, unnecessary
* Expose reaction categories in JSON response
* Update test with new categories
* Fix flaky sample / minimum floor
* buildArticle (infinite scroll) with multiple reactions
* If we're doing #index front-end, we aren't feature-flag'd
* nbsp
* react (home feed) has multiple_reactions
* Update app/assets/javascripts/utilities/buildArticleHTML.js
Co-authored-by: Rajat Talesra <rajat@forem.com>
* Clean up Reactable#reaction_categories
* Use 'multiple_reactions_icons_container'
* Try adding a ReactionCount test
* Adapt memory fix from 76dd53d
* Try adding categories to fixture
* Attempt to eager-load distinct public categories
* Setting dependent to the default for rubocop
* Try making image assets more public?
* Revert "Fix flaky sample / minimum floor"
---------
Co-authored-by: Rajat Talesra <rajat@forem.com>
Co-authored-by: Mac Siri <mac@forem.com>
* Initial setup work with error
* Dropdown working with error fixed
* Removed repition
* Home page billboard dropdowns added
* Created common file for dropdown
* Complete display ad dropdown usage
* Minor indentation fix
* Minor UI updates
* Minor test update
* Dropdown for billboard optimisation
* Added anchor tags
* Display ad unified code
* Design changes
* Design changes
* Changes to display ad click tracking
* Style changes
* Design change to admin display ad
* Nit fix
* Nit fix
* Updated test
* migration init
* create an initializers directory
* remove console log
* migrate localDateTime functions and remove comment date from asset pipeline
* add unit test
* add one more
* year test
* Add retry with timeout if window.Forem.runtime is not available
* Refactor asset pipeline initializer into webpack bundle
* Remove leftover comment
* Fix CodeQL issue
* Revert Regexp interpolation
* Revert regexp interpolation without verify
* Remove problematic Regexp marked as dangerous by CodeQL
* baseTracking pack
* Define dataLayer
* disable unused var
* disable another unused var
* remove initializer call from base of asset pipeline
* remove asset pipeline baseTracking file
* Remove extraneous comment (see 9361d2 and 5c18f8)
* Flexible, multiple reaction types
* Fix reaction counts
* Re-use svg for active state for now
* Update yml, update spec
* Possible temp fix for failing tests
* Colorize reaction icon svgs
* Reaction engagement above post title
* Index reactions engagements (for logged-out)
* Maybe readinglist is special
* Try using crayons' dropdown as a drawer?
* readinglist isn't really public now
* feat: update the styles for the reaction drawer
* Grey background highlight, turn off border/shadow
* Read our feature flag docs, saw this was recommended
* Missed fifth emoji: party/tada
* Fix JS test errors
* Update test with tada
* Suppress flashing engagements when no public reactions
* Liberate jump-to-comments from unicorn replacement
* 'Add reaction' on tooltip
* Don't show reaction emoji on index unless it's been used
* rubocop
* Update heart+ total count when toggling
* Do not include 'readinglist' in drawer/public counts
* Fix semi-public readinglist so that icon is badged for current user
* Tweak heart-plus svg
* Style tweak: border on active reaction
* Show reacted icon on drawer trigger for 1.5 sec
* Tweak styles for engagements bar
* Style tweaks for multiple engagements (#index)
* Trying to get size working through crayons/inline_svg
* Sparkle hearts
* Restore unicorn
* Make heart-plus-active work when user has an active reaction
* Try 'hoverdown' a dropdown that activates with hover
* Long touch?
* Tap *outside* the drawer to close
* Mobile reaction drawer is also supposed to be columns
* More reaction count cleanup
* Final emoticons maybe?
* Fix reaction bug when feature disabled
* Remove readinglist from public reaction counts
* Update specs for new reaction categories
* Shuffle makes specs flaky
* Order does not matter
* rubocop
* Update to preserve readinglist analytics
* Shuffle makes specs flaky
* Fix flickering images, remove icon highlight for now
* Don't update total for readinglist
* reactions_by_user_id
* Try renaming this observer function
* Try unid ids for SVGs
* Remove local test file
* Simplistic test for the unique svg transform
* Fix javascript for current SVG
* Signifcant string literals in this case, rubocop
* Use the right expected output
Co-authored-by: Ridhwana <ridhwana.khan16@gmail.com>