Extension:GrowthExperiments/Technical documentation/Structured tasks/Add an image

Project page: https://www.mediawiki.org/wiki/Growth/Personalized_first_day/Structured_tasks/Add_an_image

Main phab epic: https://phabricator.wikimedia.org/T285587

Figma specs: https://www.figma.com/file/ULhJr1isDstRbGE5vjYDsr/Add-images-structured-task?node-id=4029%3A51683

At a high level, users are prompted to match images suggested by an algorithm with articles on Wikipedia; users can accept, reject or skip the suggestions. Accepting a suggestion prompts the user to write a caption for the image, and the final step involves publishing an edit to the article with the image and caption (the interactive prototype can be found here).

How are the image suggestions generated?
There is an algorithm that generates a list of suggested images for unillustrated articles across all Wikipedias. For details on the algorithm, see https://www.mediawiki.org/wiki/Growth/Personalized_first_day/Structured_tasks/Add_an_image#Algorithm. The quick summary is:


 * Look at the Wikidata item for the article. If it has an image (P18), choose that image.
 * Look at the Wikidata item for the article. If it has a Commons category associated (P373), choose an image from the category.
 * Look at the articles about the same topic in other language Wikipedias. Choose a lead image from those articles.

The output of the algorithm is a CSV file with this data, which was then loaded one-time into the ElasticSearch index for each wiki. Using  on a wiki allows one to find information about which articles have suggestions.

How do we access the image suggestions?
Having found an article that has an image suggestion using, you can then call the image suggestion API on WMCS here.

What happens when the user accepts an image suggestion?

 * Temporarily disable readonly mode of the surface (so that the image can be added)
 * Walk through the linear model to find the first position that is a content offset, and the next item is not a transclusion or a hidden/meta object or whitespace followed by one of those things
 * Insert the linear model representation of the thumbnail with an empty string as the caption
 * Show the caption flow and set  to true; since the caption is initially set in the previous step, the default inline caption editing experience is shown (rather than the default caption entry experience which occurs in a dialog rather than inline)

Local development
The following should be included in LocalSettings.php: Optionally, CLDR extension should be installed in order for the suggestion reason to show up correctly (CLDR is used to retrieve the localized language name so we can show the language names in the suggestion reason (for example: "Used in the same article in 2 other languages: English, French").

To tag an article for add an image: