, but this code // executes before the first paint, when

°ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ

is not yet present. The // classes are added to so styling immediately reflects the current // toolbar state. The classes are removed after the toolbar completes // initialization. const classesToAdd = ['toolbar-loading', 'toolbar-anti-flicker']; if (toolbarState) { const { orientation, hasActiveTab, isFixed, activeTray, activeTabId, isOriented, userButtonMinWidth } = toolbarState; classesToAdd.push( orientation ? `toolbar-` + orientation + `` : 'toolbar-horizontal', ); if (hasActiveTab !== false) { classesToAdd.push('toolbar-tray-open'); } if (isFixed) { classesToAdd.push('toolbar-fixed'); } if (isOriented) { classesToAdd.push('toolbar-oriented'); } if (activeTray) { // These styles are added so the active tab/tray styles are present // immediately instead of "flickering" on as the toolbar initializes. In // instances where a tray is lazy loaded, these styles facilitate the // lazy loaded tray appearing gracefully and without reflow. const styleContent = ` .toolbar-loading #` + activeTabId + ` { background-image: linear-gradient(rgba(255, 255, 255, 0.25) 20%, transparent 200%); } .toolbar-loading #` + activeTabId + `-tray { display: block; box-shadow: -1px 0 5px 2px rgb(0 0 0 / 33%); border-right: 1px solid #aaa; background-color: #f5f5f5; z-index: 0; } .toolbar-loading.toolbar-vertical.toolbar-tray-open #` + activeTabId + `-tray { width: 15rem; height: 100vh; } .toolbar-loading.toolbar-horizontal :not(#` + activeTray + `) > .toolbar-lining {opacity: 0}`; const style = document.createElement('style'); style.textContent = styleContent; style.setAttribute('data-toolbar-anti-flicker-loading', true); document.querySelector('head').appendChild(style); if (userButtonMinWidth) { const userButtonStyle = document.createElement('style'); userButtonStyle.textContent = `#toolbar-item-user {min-width: ` + userButtonMinWidth +`px;}` document.querySelector('head').appendChild(userButtonStyle); } } } document.querySelector('html').classList.add(...classesToAdd); })(); Empowerment: Participatory Development and the Problem of Cooptation | °ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ

°ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ

Skip to main content

Publications

Empowerment: Participatory Development and the Problem of Cooptation

Mon, Jul 16, 2018
Karie Riddle

This chapter delineates the evolution of two contested, closely related concepts in development ethics – empowerment and participatory development. While empowerment originated in radical feminist movements of the Global South, it has been recently taken up by large international institutions such as the World Bank, losing much of its political impact and critical potential. Authors such as Naila Kabeer, Serene Khader, and Jay Drydyk have called for a return to conceptualizations of empowerment that relate it to well-being or flourishing, through a contextualized analysis of power relations. Such a conception of empowerment relies on people’s and communities’ participation in their own development. A parallel exploration of the thinking of Denis Goulet, David Crocker, Séverine Deneulin, and others shows that participatory development, like empowerment, must be explicitly political, contextual, and unafraid of critiquing sensitive problems like corruption if it is to be truly emancipatory, leading to an improved quality of life for citizens of the Global South. The chapter closes with an argument calling for development ethicists to broaden their sources to include more voices from feminist, post-colonial, indigenous, and ethnic/racial critics of Western ideals of democracy and justice.