Africa missed out on the best, Ruto on Raila’s AUC defeat
Africa missed out on the best, Ruto on Raila’s AUC defeat
Read this story aloud
Listen to the clean text version of this article
Ready
4 min listen
Audio reading is not supported on this browser.
The president commended Raila’s dedication throughout the campaign, noting that he engaged all key stakeholders and spared no effort in his bid for the position
President William Ruto has described Raila Odinga’s loss in the African Union Commission (AUC) chairmanship race as a missed opportunity for Africa. He noted that the continent was denied the leadership of an outstanding candidate.
Speaking at a dinner event on Saturday night, just hours after Raila conceded defeat to Djibouti’s Mahamoud Ali Youssouf, Ruto expressed regret over two key aspects of the election’s outcome—Africa losing the chance to be led by a distinguished leader and Raila, whom he described as the best candidate, falling short.
“I regret that Africa missed the opportunity to be served by the finest,” Ruto said.
More To Read
- Zamzam fires back as Mombasa ODM succession battle takes shape
- DP Kindiki hails cooperatives as key to Kenya’s economic transformation
- Civil society groups warn Kenya’s Sh13 trillion debt hurting essential services
- Court grants DCI three more days to hold woman over alleged posts tracking President Ruto’s flights
- Construction of Naivasha–Kisumu–Malaba SGR begins in Narok
- How the new Ngong Road flyover is fueling growth at Dagoretti Corner
“Baba made me very proud. He was the best candidate we could have put forward.”
The president commended Raila’s dedication throughout the campaign, noting that he engaged all key stakeholders and spared no effort in his bid for the position.
“I’m very proud of Raila. He did his best, and regardless of the outcome, he made us proud,” Ruto added.
Latest Stories
- Four suspected armed robbers killed, two others flee after police shootout on Eldoret-Kiplombe Road
- Tana River activates emergency plan ahead of anticipated El Niño rains
- Bill seeks to merge state-backed farm loans under single institution
- Bill tabled in National Assembly to merge three intellectual property agencies into single authority
“Whenever he was needed, he showed up. Tinga exceeded all expectations.”
Raila initially led the race, securing victory in the first two rounds of voting before losing momentum. In the first round, he garnered 20 votes, while Mahamoud received 18 and Madagascar’s Richard Randriamandrato got 10. One country abstained.
In the second round, Raila increased his tally to 22, Mahamoud obtained 19, and Randriamandrato received 7 votes, with one abstention.
However, the third round saw Mahamoud take the lead with 23 votes, while Raila dropped to 20. Randriamandrato was eliminated after securing only 5 votes. This set the stage for a direct contest between Raila and Mahamoud.
Mahamoud widened the gap in the fourth round, securing 25 votes against Raila’s 21. One vote was spoilt, and one nation abstained.
The fifth round saw Mahamoud maintain his lead with 26 votes, while Raila got 21, with one abstention. In the sixth round, Mahamoud still had 26 votes, Raila gained 22, and one country abstained.
With Raila eliminated after the sixth round, Mahamoud advanced alone into the seventh round, where he secured the required two-thirds majority with 33 votes.
He now takes over from Chad’s Moussa Faki, who has served as the AUC chairperson for the past eight years.
He has pledged to serve the continent with dignity and accountability as he assumes office.
Mahamoud acknowledged the weight of the responsibility entrusted to him, vowing to be a leader who upholds transparency and remains answerable to the expectations of African nations.
“Responsibility is not just an honour, but rather a duty for which a person will be held accountable. I ask God to help me perform its duties,” he said, attributing his victory to divine will and seeking strength to fulfil his mandate.
He also expressed gratitude to African heads of state for placing their trust in him, promising to work towards advancing the continent’s agenda.
Other Topics To Read
- AUC
- President William Ruto
- Raila Odinga
Top Stories Today
- Ruto vows no room for ethnic politics as he fronts development milestones in fresh re-election strategy
- Four suspected armed robbers killed, two others flee after police shootout on Eldoret-Kiplombe Road
- Tana River activates emergency plan ahead of anticipated El Niño rains
- Bill seeks to merge state-backed farm loans under single institution
- Bill tabled in National Assembly to merge three intellectual property agencies into single authority
- Nigeria condemns killing of citizens in South Africa amid rising xenophobic violence
`;
}
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
Tana River activates emergency plan ahead of anticipated El Niño rainsCoast
|Farhiya Hussein
|24 minutes ago
Saba Saba organisers notify police of planned peaceful demonstration to ParliamentNews
|Rachael Mutabasi
|14 hours ago
Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killingsNews
|Lucy Mumbi
|1 day ago
Taita Taveta County unveils cooperative fund to boost rural access to creditCoast
|Farhiya Hussein
|15 hours ago
Four suspected armed robbers killed, two others flee after police shootout on Eldoret-Kiplombe RoadNews
|Lucy Mumbi
|5 minutes ago
Less sunshine may worsen anxiety and depression symptoms, new research suggestsHealth
|Charity Kilei
|19 hours ago
Bill tabled in National Assembly to merge three intellectual property agencies into single authorityNews
|Lucy Mumbi
|1 hour ago
A Super El Niño is coming: Five hard‑won lessons the world can learn from AfricaClimate Change
|The Conversation
|17 hours ago
Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeatSports
|Erick Kariuki
|1 day ago
Kenya Airways flight to New York forced to return to Nairobi after mid-air technical glitchNews
|Lucy Mumbi
|3 hours ago