Close Menu
    Facebook X (Twitter) Instagram
    • Home
    • Contact Us
    • About Us
    • Privacy Policy
    • Terms Of Service
    • Advertisement
    Monday, July 6
    Facebook X (Twitter) Instagram Pinterest Vimeo
    ABS Africa TV
    • Breaking News
    • Trending
    • Africa News
    • World News
    • Features
    • Technology
    • Sports
    • Politics
    • More
      • Culture
      • Lifestyle
      • Travel
      • Business
      • Environment
      • Legal
      • Health
      • Cameroon
      • Ambazonia
      • AfroSingles
      • Environ/Climate
      • Editorial
      • The Leak Magazine
    • Donate
    Subscription
    ABS Africa TV
    Home»Sports»CAF sets date for U20 AFCON 2025 draw in Côte d’Ivoire
    Sports

    CAF sets date for U20 AFCON 2025 draw in Côte d’Ivoire

    Johnson BenguruBy Johnson BenguruJuly 5, 2026No Comments9 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Share
    Facebook Twitter LinkedIn Pinterest Email
    Post Views: 10

    CAF sets date for U20 AFCON 2025 draw in Côte d’Ivoire

    CAF sets date for U20 AFCON 2025 draw in Côte d’Ivoire

    Rising Stars’ Aldrine Kibet Kevin Wangaya celebrate a goal in a previous match (C) Courtesy

    Read this story aloud

    Listen to the clean text version of this article

    Ready
    3 min listen
    Audio reading is not supported on this browser.

    CAF has confirmed the final draw date for the 2025 Under-20 Africa Cup of Nations (AFCON), which will be held in Côte d’Ivoire. The draw will take place on 13 February at the CAF headquarters in Cairo, setting the stage for Africa’s top young talents to battle for World Cup qualification

    The Confederation of African Football (CAF) has confirmed the date for the final draw of the 2025 Under-20 Africa Cup of Nations (AFCON), scheduled for 13 February at its headquarters in Cairo. The draw will take place at 14:25 local time (12:25 GMT)

    The tournament, set to run from 26 April to 18 May 2025 in Côte d’Ivoire, will feature 13 teams. The top four finishers will secure qualification for the 2025 FIFA Under-20 World Cup, which will be held in Chile from 27 September to 19 October

    Teams will be divided into three groups: Group A will consist of five teams, including hosts Côte d’Ivoire, while Groups B and C will each feature four teams. Côte d’Ivoire is automatically assigned position A1, with the remaining seeds determined based on final rankings from the 2023 edition of the tournament in Egypt

    More To Read

    • From Pipeline to MLS history: How Lawrence Olum became Kenya’s quiet football pioneer
    • Victor Wanyama backs AFCON 2027 to usher in new era for Kenyan football
    • Harambee Stars climb to 109 in provisional FIFA rankings after emphatic 4-0 win over Lesotho
    • Bajaber and Okoth braces power Harambee Stars to emphatic victory over Lesotho
    • Harambee Stars seek improved showing against Lesotho in second friendly
    • McCarthy rues missed chances against Lesotho, says draw offered lessons for new players

    Reigning champions Senegal will take position C1, while Nigeria, the third-place finishers in 2023, will occupy B1

    Following Congo’s FIFA suspension, the identity of the second team from the UNIFFAC Zonal Union remains uncertain. However, the UNIFFAC representative will be placed in Pot 1 (Level 2) alongside Egypt and Zambia. Teams in this pot will be drawn into positions A2, B2, and C2

    The tournament structure will see the top two teams from each group advance to the quarter-finals, along with the two best third-placed teams. The knockout stage will then determine the eventual champions

    Latest Stories

    • Faith Kipyegon reveals hamstring injury after rare defeat as focus shifts to second half of season
    • Less sunshine may worsen anxiety and depression symptoms, new research suggests
    • Coast leaders intensify unity drive, back 10-point agenda and urge end to divisive politics
    • 2026 FIFA World Cup claims seven national team coaches

    The 13 teams that have qualified for the 2025 Under-20 AFCON are: Côte d’Ivoire (hosts), DR Congo, Egypt, Ghana, Kenya, Morocco, Nigeria, Senegal, Sierra Leone, South Africa, Tanzania, Zambia, and a UNIFFAC Zonal Union team yet to be determined

    4o

    Other Topics To Read

    • U20 AFCON
    • Harambee Stars
    • Rising Stars

    Top Stories Today

    • Coast leaders rally support for 10-point agenda, reject divisive politics
    • Faith Kipyegon reveals hamstring injury after rare defeat in Eugene
    • Study finds weather changes drive demand for mental health care
    • Government releases Sh4 billion to settle NHIF hospital claims
    • Kiharu MP Ndindi Nyoro announces exit from UDA
    • Rising political violence draws condemnation from Mombasa religious leaders

    `;
    }

    return “;
    }

    function commentActionsMarkup(comment, canComment) {
    const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
    const likeCount = Number(comment.like_count || 0) > 0
    ? “
    : ”;

    const likeButton = canComment && comment.status === ‘approved’
    ? “
    : “;

    const replyButton = canComment && comment.status === ‘approved’
    ? “
    : ”;

    return `

    `;
    }

    function commentMarkup(comment, canComment, isReply = false) {
    const pendingBadge = comment.status && comment.status !== ‘approved’
    ? “
    : ”;

    const edited = comment.is_edited
    ? “
    : ”;

    const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
    ? `

    `
    : “;

    return `

    `;
    }

    function replyFormMarkup(commentId) {
    return `

    `;
    }

    function setNotice(widget, message, type = ‘info’) {
    const notice = widget.querySelector(‘[data-role=”notice”]’);
    if (!notice) return;

    if (!message) {
    notice.hidden = true;
    notice.textContent = ”;
    notice.classList.remove(‘is-error’);
    return;
    }

    notice.hidden = false;
    notice.textContent = message;
    notice.classList.toggle(‘is-error’, type === ‘error’);
    }

    function setCount(widget, total) {
    const count = widget.querySelector(‘[data-role=”count”]’);
    if (!count) return;

    const num = Number(total || 0);
    count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
    }

    function openReplyBox(widget, commentId) {
    widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
    box.hidden = true;
    box.innerHTML = ”;
    });

    const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (!targetItem) return;

    const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
    if (!replyBox) return;

    replyBox.hidden = false;
    replyBox.innerHTML = replyFormMarkup(commentId);

    const textarea = replyBox.querySelector(‘textarea’);
    if (textarea) textarea.focus();
    }

    function closeReplyBox(container) {
    if (!container) return;
    container.hidden = true;
    container.innerHTML = ”;
    }

    async function initCommentsWidget(widget) {
    const state = {
    articleId: Number(widget.dataset.articleId),
    loadUrl: widget.dataset.loadUrl,
    storeUrl: widget.dataset.storeUrl,
    commentsBaseUrl: widget.dataset.commentsBaseUrl,
    canComment: widget.dataset.canComment === ‘1’,
    page: 1,
    perPage: 10,
    sort: ‘newest’,
    total: 0,
    hasMore: false,
    busy: false
    };

    const list = widget.querySelector(‘[data-role=”list”]’);
    const loading = widget.querySelector(‘[data-role=”loading”]’);
    const empty = widget.querySelector(‘[data-role=”empty”]’);
    const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
    const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
    const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);

    async function loadComments(reset = true) {
    if (state.busy) return;

    state.busy = true;
    setNotice(widget, ”);
    loading.hidden = false;

    if (reset) {
    state.page = 1;
    list.innerHTML = ”;
    empty.hidden = true;
    }

    try {
    const url = new URL(state.loadUrl, window.location.origin);
    url.searchParams.set(‘page’, state.page);
    url.searchParams.set(‘per_page’, state.perPage);
    url.searchParams.set(‘sort’, state.sort);

    const response = await requestJson(url.toString(), {
    method: ‘GET’,
    headers: {
    ‘Accept’: ‘application/json’,
    ‘X-Requested-With’: ‘XMLHttpRequest’
    }
    });

    const items = Array.isArray(response.data) ? response.data : [];
    const meta = response.meta || {};

    state.total = Number(meta.total || 0);
    state.hasMore = !!meta.has_more;

    setCount(widget, state.total);

    if (reset) {
    list.innerHTML = ”;
    }

    if (!items.length && reset) {
    empty.hidden = false;
    } else {
    empty.hidden = true;
    list.insertAdjacentHTML(
    ‘beforeend’,
    items.map(item => commentMarkup(item, state.canComment, false)).join(”)
    );
    }

    loadMoreBtn.hidden = !state.hasMore;
    } catch (error) {
    if (!list.children.length) {
    empty.hidden = false;
    empty.textContent = ‘Unable to load comments right now.’;
    }
    setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
    } finally {
    loading.hidden = true;
    state.busy = false;
    }
    }

    async function submitTopLevelComment(form) {
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘[data-role=”submit-comment”]’);

    if (!textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(state.storeUrl, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    textarea.value = ”;

    if (response?.data) {
    list.insertAdjacentHTML(
    ‘afterbegin’,
    commentMarkup(response.data, state.canComment, false)
    );
    empty.hidden = true;

    if ((response.data.status || ”) === ‘approved’) {
    state.total += 1;
    setCount(widget, state.total);
    }
    }

    setNotice(widget, response.message || ‘Comment posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post comment’;
    }
    }
    }

    async function submitReply(form) {
    const commentId = Number(form.dataset.commentId || 0);
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘.ev-comments__reply-submit’);

    if (!commentId || !textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    if (response?.data) {
    const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (parentItem) {
    const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
    if (repliesWrap) {
    repliesWrap.insertAdjacentHTML(
    ‘beforeend’,
    commentMarkup(response.data, state.canComment, true)
    );
    }
    }
    }

    closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
    setNotice(widget, response.message || ‘Reply posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post reply’;
    }
    }
    }

    async function toggleLike(button) {
    const commentId = Number(button.dataset.commentId || 0);
    if (!commentId) return;

    const originalHtml = button.innerHTML;

    try {
    button.disabled = true;
    button.innerHTML = ‘Working…’;

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({})
    });

    const liked = !!response?.data?.liked;
    const likeCount = Number(response?.data?.like_count || 0);

    button.classList.toggle(‘is-liked’, liked);
    button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
    } catch (error) {
    button.innerHTML = originalHtml;
    setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
    } finally {
    button.disabled = false;
    }
    }

    if (composerForm) {
    composerForm.addEventListener(‘submit’, function (e) {
    e.preventDefault();
    submitTopLevelComment(composerForm);
    });
    }

    if (sortSelect) {
    sortSelect.addEventListener(‘change’, function () {
    state.sort = this.value || ‘newest’;
    loadComments(true);
    });
    }

    if (loadMoreBtn) {
    loadMoreBtn.addEventListener(‘click’, function () {
    if (state.busy || !state.hasMore) return;
    state.page += 1;
    loadComments(false);
    });
    }

    widget.addEventListener(‘click’, function (e) {
    const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
    if (likeBtn) {
    e.preventDefault();
    toggleLike(likeBtn);
    return;
    }

    const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
    if (replyBtn) {
    e.preventDefault();
    openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
    return;
    }

    const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
    if (cancelReplyBtn) {
    e.preventDefault();
    closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
    }
    });

    widget.addEventListener(‘submit’, function (e) {
    const replyForm = e.target.closest(‘.ev-comments__reply-form’);
    if (replyForm) {
    e.preventDefault();
    submitReply(replyForm);
    }
    });

    loadComments(true);
    }

    document.addEventListener(‘DOMContentLoaded’, function () {
    document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
    });
    })();

    Trending

    Faith Kipyegon reveals hamstring injury after rare defeat as focus shifts to second half of season
    Faith Kipyegon reveals hamstring injury after rare defeat as focus shifts to second half of seasonAthletics
    |Erick Kariuki
    |7 minutes ago
    Race for 2026 FIFA World Cup Golden Boot
    Race for 2026 FIFA World Cup Golden BootInfographics
    |Charity Pancras
    |3 hours ago
    Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killings
    Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killingsNews
    |Lucy Mumbi
    |7 hours ago
    Eight arrested in Marsabit over Sh1.2 million SIM swap fraud
    Eight arrested in Marsabit over Sh1.2 million SIM swap fraudNorthern Kenya
    |Bashir Mbuthia
    |1 day ago
    Invisible peacebuilders: How ‘diplomacy works’ to prevent conflict
    Invisible peacebuilders: How ‘diplomacy works’ to prevent conflictWorld
    |UN News
    |8 hours ago
    UN reviews impact as US ends support for AUSSOM logistics
    UN reviews impact as US ends support for AUSSOM logisticsSomalia
    |Abdirahman Khalif
    |5 hours ago
    Coast leaders intensify unity drive, back 10-point agenda and urge end to divisive politics
    Coast leaders intensify unity drive, back 10-point agenda and urge end to divisive politicsPolitics
    |Farhiya Hussein
    |1 hour ago
    2026 FIFA World Cup claims seven national team coaches
    2026 FIFA World Cup claims seven national team coachesInfographics
    |Charity Pancras
    |2 hours ago
    Quiet revolution behind foldable smartphones and why they're making a comeback
    Quiet revolution behind foldable smartphones and why they’re making a comebackTechnology
    |Margaret Wanjiru
    |7 hours ago
    Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeat
    Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeatSports
    |Erick Kariuki
    |10 hours ago

    2025 AFCON Date Draw sets
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Johnson Benguru
    • Website

    Related Posts

    Who Is Erling Haaland? Norway Striker Shining At FIFA World Cup 2026

    July 6, 2026

    Cape Verde hailed as national heroes after historic World Cup campaign

    July 6, 2026

    FIFA dismisses Belgium appeal over Folarin Balogun ban decision

    July 6, 2026
    Leave A Reply Cancel Reply

    Search
    Latest Post

    Fake Uber scam targets Cape Town airport travellers

    July 6, 2026

    South Africa Launches First National Science Month | Science

    July 6, 2026

    Emirates NBD backs AI startup adoption with Techstars

    July 6, 2026

    Why Pope Leo’s visit to Lampedusa matters for migrants, the church and global politics

    July 6, 2026

    US opens bidding for $200m Nigeria healthcare support

    July 6, 2026

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    • Facebook
    • Twitter
    • Pinterest
    • Instagram
    • YouTube
    • TikTok
    ABS TV and ABS Network News is a leading Pan-African 24/7 broadcasting network delivering nonstop news, talk shows, lifestyle programs, and digital media content worldwide through Satellite, Streaming Platforms, and Roku TV.
     
    Based in the United States, we connect Africa to the world while empowering creators, journalists, and brands through innovative media and broadcasting services.
    Facebook X (Twitter) Pinterest WhatsApp Instagram

    Our Picks

    Fake Uber scam targets Cape Town airport travellers

    South Africa Launches First National Science Month | Science

    Emirates NBD backs AI startup adoption with Techstars

    Most Popular

    Why Pope Leo’s visit to Lampedusa matters for migrants, the church and global politics

    US opens bidding for $200m Nigeria healthcare support

    Italy ordered to compensate woman after allegations of rape by partner dismissed as ‘normal’

    © 2026 Copyright. All Rights Reserved by ABSAFRICATV
    • Privacy Policy
    • Terms of Services

    Type above and press Enter to search. Press Esc to cancel.

    We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.