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

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

Skip to main content

Philip Johnson

Assistant Professor

Biography

I grew up in the Kansas City area the son of a small business owner and a telecommunications employee.  When not carting my brothers and I to sports practices business was a constant topic of conversation.  I started investing in elementary school and have always harbored a keen interest in the impact business can have on the world – and the role that our faith can play in a flourishing business.

I have spent vast majority of my career in finance, supply chain management and operations roles for a large agricultural original equipment manufacturer (OEM) and an electronics supplier for multiple OEM end-user markets.  I love developing teams and people and started as an adjunct at Calvin, now focused on building out our operations and supply chain management depth here at Calvin.

My wife, Leah, and I have three children so we spend our time with them in various sports, camping and gardening.  If you want to get me going feel free to ask questions about Kansas City sports teams or farming – but we should grab a cup of coffee for the conversation.

Education

  • B.S. – Business Management, Baker University
  • M.S. – Legal Administration, University of Denver
  • M.B.A. – Michigan State University
  • J.D. – Michigan State University

Academic Interests

At present I am working to build out our operations and supply chain management program offerings for this vital area of business.

Specific to research I am investigating the impact of local operations on economic deserts and what role our faith has on actions taken in sourcing decision and/or operations decisions within these areas. 

I am also involved in the °ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ Clean Water Institute as we seek to engage students in helping alleviate challenges associated with access to clean water globally.