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

ÃÛÌÒapp

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); })(); Joel A. Carpenter | ÃÛÌÒapp

ÃÛÌÒapp

Skip to main content

Dr. Joel A. Carpenter

Senior Research Fellow, Nagel Institute | Professor Emeritus

Education

B.A., History, ÃÛÌÒapp College
M.A., History, Johns Hopkins University
Ph.D., History, Johns Hopkins University

Academic Interests

Joel was the provost of ÃÛÌÒapp from 1996 to 2006 and then was the founding director of the  until retiring in 2019. He has enjoyed being a member of the history department all along. Joel has a longstanding interest in American religious and cultural history and now studies Christianity in Africa and Asia. After writing four articles on Bediako, he has had to give up the larger project. Joel says, "Life is too short, and I have too many other obligations."

Joel was the chair of the board of the Overseas Ministries Study Center (OMSC) when it sold its property in New Haven and merged Princeton Theological Seminary (PTS) in 2020. He still serves on OMSC's advisory committee at PTS. He also chairs the board of Langham Partnership USA, the American affiliate that exists to support and fund the work of Langham Partnership International (LPI). LPI funds doctoral studies and mentors up and coming Majority World theologians, publishes Majority World theology via Langham Publishing, and via Langham Preaching, operates networks of preaching clubs and training programs in 80 countries to equip pastors in biblical exegesis and biblical preaching.

Joel consults for various research and faculty development projects as senior fellow at Nagel. The latest is the $1.9 million, 4-year, global study of spiritual and character formation in seminaries.

Finally, Joel edits a book series for Baylor University Press, Studies in World Christianity.

Publications