, 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); })(); Kevin Corcoran | ÃÛÌÒapp

ÃÛÌÒapp

Skip to main content

Dr. Kevin Corcoran

Professor

Biography

Outside of ÃÛÌÒapp, Professor Corcoran enjoys spending time in the gym, traveling and music.

In the Spring of 2016, students in the honors program invited Professor Corcoran to deliver the Honors Convocation address. His address, "A Life Worth Living," can be watched .

Professor Corcoran has also led a popular interim course called Pubs, Clubs and Alternative Worship, during which the class met with the Archbishop of Canterbury, Rowan Williams. Listen to part of an interview with the Archbishop during one of those interims .

Education

  • PhD, Philosophy, Purdue University, 1997
  • MAR, Yale University, 1991 (magna cum laude)
  • BA, University of Maryland Baltimore County, 1988 (magna cum laude)

Academic Interests

  • Metaphysics
  • Philosophy of Mind
  • Neuroscience

Publications