From 5afcbe03ead9ada87621888a31a62652b10a7e4f Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 20 Sep 2023 11:18:08 +0000 Subject: Add latest changes from gitlab-org/gitlab@16-4-stable-ee --- .../javascripts/projects/project_star_button.js | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 app/assets/javascripts/projects/project_star_button.js (limited to 'app/assets/javascripts/projects/project_star_button.js') diff --git a/app/assets/javascripts/projects/project_star_button.js b/app/assets/javascripts/projects/project_star_button.js new file mode 100644 index 00000000000..06f982b500d --- /dev/null +++ b/app/assets/javascripts/projects/project_star_button.js @@ -0,0 +1,46 @@ +import { createAlert } from '~/alert'; +import axios from '~/lib/utils/axios_utils'; +import { spriteIcon } from '~/lib/utils/common_utils'; +import { __, s__ } from '~/locale'; + +export function initStarButton(containerSelector = '.project-home-panel') { + const container = document.querySelector(containerSelector); + const starToggle = container?.querySelector('.toggle-star'); + + if (!starToggle) { + return; + } + + starToggle.addEventListener('click', function toggleStarClickCallback() { + const starSpan = starToggle.querySelector('span'); + const starIcon = starToggle.querySelector('svg'); + const iconClasses = Array.from(starIcon.classList.values()); + + axios + .post(starToggle.dataset.endpoint) + .then(({ data }) => { + const isStarred = starSpan.classList.contains('starred'); + starToggle.parentNode.querySelector('.count').textContent = data.star_count; + + if (isStarred) { + starSpan.classList.remove('starred'); + starSpan.textContent = s__('StarProject|Star'); + starIcon.remove(); + // eslint-disable-next-line no-unsanitized/method + starSpan.insertAdjacentHTML('beforebegin', spriteIcon('star-o', iconClasses)); + } else { + starSpan.classList.add('starred'); + starSpan.textContent = __('Unstar'); + starIcon.remove(); + + // eslint-disable-next-line no-unsanitized/method + starSpan.insertAdjacentHTML('beforebegin', spriteIcon('star', iconClasses)); + } + }) + .catch(() => + createAlert({ + message: __('Star toggle failed. Try again later.'), + }), + ); + }); +} -- cgit v1.2.3