This is a follow-up to #19772, which allowed setting custom icons for each unit in Studio. By default the icon would be derived from unit's type. The suggestion was to do move it to a plugin. This PR introduces some changes required to move it to external Django application
Most of this diff is about extracting modals from monolithic `cms/static/js/views/modals/course_outline_modals.js` to make them reusable. We also extracted `CourseOutlineView` class into a field in `cms/static/js/views/pages/course_outline.js` to make this view easily extendable.
For overriding implementation of getting icon, we implemented `pluggable_override` decorator.
*JIRA tickets*: TBD
*Merge deadline*: None
1. Install [custom-unit-icons](https://github.com/open-craft/custom-unit-icons) for both LMS (`make lms-shell` and studio (`make studio-shell`):
pip install git+https://github.com/open-craft/custom-unit-icons.git@agrendalath/bb-933-custom-icons`
1. Set `GET_UNIT_ICON_IMPL = 'custom_unit_icons.icons.get_icon'` in `lms/envs/private.py` and `make lms-restart`.
1. Install a comprehensive theme that adds icon editor to studio (we'll publish this part after the internal review). It is also possible to do this one and the next step by updating modulestore directly via mongo shell, but the level of nesting makes it a little more complex.
1. Use the "eye" button next to the unit in studio and change icon for the unit.
1. Check in the LMS that the icon has been changed.
[ ] @viadanna
[ ] edX reviewer[s] TBD