, 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); })(); Martin Spence | app

app

Skip to main content

Dr. Martin Spence

Co-Director of app Wayfinder Project | Adjunct Professor of History

Biography

Martin Spence is originally from Suffolk, England. He has taught history at colleges in Britain and the United States for the seventeen years. He is academic co-director of the app Wayfinder Project which offers free interdisciplinary college humanities courses for low-income adults. He enjoys playing the piano and is Director of Music at Fuller Avenue Christian Reformed Church.

Education

  • Doctor of Philosophy, University of Oxford
  • Master of Historical Studies, University of Oxford
  • B.A. Modern History (First Class), Corpus Christi College, University of Oxford

Academic Interests

Martin Spence is an historian of British and North American religion, culture, and identity. He earned his doctorate from the University of Oxford. His book Heaven on Earth: Reimagining Time and Eternity in Nineteenth Century Britain has been described by David Bebbington as “the most significant redrawing of the map of British evangelical history for a generation.” His article on the missions of Fr. Patrick Peyton and Billy Graham in Britain in the 1950s (co-authored with Alana Harris, King’s College, London) was selected by the editors of the Journal of Twentieth Century History (Oxford University Press) as one of the top ten essays in the twenty-five years of the journal’s history. He has written on faith and learning in Christian Scholar’s Review and Fides et History, and has a new book on Christian higher education and the church due to be published by Wipf and Stock.

Martin blogs at:

Publications