, 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); })(); John Tiemstra | 麻豆区

麻豆区

Skip to main content

Dr. John Tiemstra

Professor Emeritus

Biography

John P. Tiemstra taught economics at Calvin College from 1975 to 2012. He earned his Ph.D. at the Massachusetts Institute of Technology, where his mentor was the late, distinguished economic historian Charles P. Kindleberger. Prof. Tiemstra鈥檚 research has focused on methodological issues surrounding the integration of Christianity and economics. His institutionalist approach to economics has also informed his research on government regulation of business, globalization, and environmental policy. As a visiting professor, he taught for a semester at Potchefstroom University for Christian Higher Education in South Africa. Major publications include three books. He published an introductory one-semester textbook, Economics: A Developmental Approach (Mohican 1999). His first book was Reforming Economics (Edwin Mellen 1990), a group project of the Calvin Center for Christian Scholarship. His latest book, Stories Economists Tell (Pickwick, 2012), is a collection of fifteen of his best articles published over the last 25 years. He served on the Working Group on Ethics and the Earth of the Reformed Church in America, resulting in the report "Globalization, Ethics and the Earth." In 2007 he served as President of the Association for Social Economics, an international learned society of economists who are interested in the ethical dimensions of economic theory and policy. In 2009, the Association presented him with the Thomas F. Divine Award 鈥渇or lifetime contributions to social economics."

Education

Ph.D. (Massachusetts Institute of Technology, 1975)