, 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); })(); Faculty and Staff Clean Water Institute | ÃÛÌÒapp

ÃÛÌÒapp

Skip to main content

Faculty and Staff

The Clean Water Institute of ÃÛÌÒapp draws on the expertise and passion of faculty and staff from varied and complementary disciplines. Because issues around clean water in developing global regions are almost always multifaceted problems, confronting these issues requires tailored approaches that draw from wide-ranging areas of focus, experience, and expertise.

Staff

Stuart Dykstra

Stuart Dykstra

Director of Programs
Full profile

Douglas Vander Griend

Douglas Vander Griend

Professor; Director, Clean Water Institute;, Department Chair
Full profile

Faculty Researchers

Kristen Alford

Kristen Alford

Associate Professor, Public Health Program Director
Full profile

Stacy De Ruiter

Stacy De Ruiter

Associate Professor
Full profile

Omar Helferich

Omar Helferich

Visiting Scholar
Full profile

Robert Hoeksema

Robert Hoeksema

Professor
Full profile

Victor Norman

Victor Norman

Associate Professor
Full profile

Randall Pruim

Randall Pruim

Professor, Department Chair (Mathematics and Statistics)
Contributing Faculty (Computer Science), Department Chair
Full profile

Chad Tatko

Chad Tatko

Associate Professor
Pre-Pharmacy faculty advisor for chemistry and biochemistry majors
Full profile

Donald Tellinghuisen

Donald Tellinghuisen

Department Chair, Professor, Department Chair
Full profile

Jason VanHorn

Jason VanHorn

Professor, Director of Master of Science in GIScience Program
Full profile

Julie Wildschut

Julie Wildschut

Assistant Professor, Project Engineer
Full profile

David Wunder

David Wunder

Dean for Faculty Development and Research Initiatives
Full profile