, 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); })(); Joel H. Westra | °ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ

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

Skip to main content

Dr. Joel H. Westra

Department Chair, Professor, Director, Pre-Law Program

Biography

I grew up in various rural communities within the central United States as the son of a church pastor. Wanting to experience something bigger, I attended the University of Houston, where I received my B.A. in political science in 1998. After briefly considering law school, I went on to study international relations at The University of Chicago and received my Ph.D. in 2004. I joined the °ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ faculty in 2007 and have served as Pre-Law Advisor since 2008.

Outside of academia, I enjoy traveling, cooking, and dining out with my family, playing the piano, working out, and renovating our Prairie Style home in East Grand Rapids.

Education

  • B.A., Political Science, University of Houston
  • M.A., Social Sciences, The University of Chicago
  • Ph.D. Political Science, The University of Chicago

Professional Experience

  • Professor of Politics (2024–present)
  • Associate Professor of Politics, °ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ (2012–2024)
  • Assistant Professor of Politics, °ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ (2007–12)
  • Post-Doctoral Fellow, John G. Tower Center for Political Studies, Southern Methodist University (2005–07)
  • Visiting Lecturer, Committee on International Relations, The University of Chicago (2004– 05)

Academic Interests

My teaching and research interests include international organizations and law, international security, international relations theory, and US foreign policy. My research focuses on multilateral and regional security institutions as instruments of international order, specifically on questions pertaining to institutional design and to mechanisms of legitimation and restraint on the use of armed force within the international system.

Awards

  • °ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ Advising and Mentoring Award (2019)

Publications

Research and Scholarship