-
Sören Möller
-
Forschungszentrum Jülich GmbH, Jülich, Germany
-
Presents modern accelerator applications in science, medicine and industry in a single book
Explains the technical and physical foundations of accelerator applications
Enables physicists and non-physicists to understand the basis and technological boundaries of accelerators and their applications
')
var head = document.getElementsByTagName("head")[0]
var script = document.createElement("script")
script.type = "text/javascript"
script.src = "https://web.archive.org/web/20220923225830/https://buy.springer.com/assets/js/buybox-bundle-abe5f44a67.js"
script.id = "ecommerce-scripts-" + timestamp
head.appendChild(script)
var buybox = document.querySelector("[data-id=id_"+ timestamp +"]").parentNode
var now = new Date().getTime()
var start = 1650956400000
var end = 1652338800000
var isMeasuringTime = now > start && now < end
var campaignPricesMetricsGroup = initMetrics(start, end)
var campaignPricesActive = campaignPricesMetricsGroup === "B"
if (campaignPricesActive) {
revealCampaignPriceVersion()
}
var priceNS = campaignPricesActive ? ".buying-option-price-campaign " : ""
;[].slice.call(buybox.querySelectorAll(".buying-option")).forEach(initCollapsibles)
;[].slice.call(buybox.querySelectorAll(".buying-option")).forEach(addMetrics)
if (document.cookie.indexOf("preOrderEnabled=true") > -1) {
;[].slice.call(buybox.querySelectorAll(".buying-option button[type=submit]")).forEach(function (button, index) {
button.removeAttribute("disabled")
})
;[].slice.call(buybox.querySelectorAll(".buying-option-pre-order-info")).forEach(function (el, index) {
el.style.display = 'none'
})
;[].slice.call(buybox.querySelectorAll(".buying-option-pre-order-info.new-feature")).forEach(function (el, index) {
el.style.display = ''
})
}
function initMetrics(start, end) {
var metricsKey = "abMetricsCampaignPrices-v1"
var campaignPricesMetricsGroup = "X"
if (!window.localStorage || !window.fetch) return campaignPricesMetricsGroup
if (!isMeasuringTime) {
window.localStorage.removeItem(metricsKey)
return "NONE"
}
try {
var metricsValue = window.localStorage.getItem(metricsKey)
campaignPricesMetricsGroup = metricsValue || randomDistribution(metricsKey)
} catch (err) {
console.log(err)
}
return campaignPricesMetricsGroup
}
function randomDistribution(metricsKey) {
var randomGroup = Math.random() < 0.5 ? "A" : "B"
window.localStorage.setItem(metricsKey, randomGroup)
return randomGroup
}
function revealCampaignPriceVersion() {
buybox.querySelector(".c-box").classList.add("campaign-prices")
buybox.querySelectorAll(".buying-option-price-campaign").forEach(function (campaignPrice) {
campaignPrice.removeAttribute("style")
})
}
function initCollapsibles(buyingOption, index) {
var toggle = buyingOption.querySelector(priceNS + ".buying-option-price")
buyingOption.classList.remove("expanded")
var form = buyingOption.querySelector(".buying-option-form")
if (form) {
var formAction = form.getAttribute("action")
document.querySelector("#ecommerce-scripts-" + timestamp).addEventListener("load", bindModal(form, formAction, timestamp, index), false)
}
var priceInfo = buyingOption.querySelector(priceNS + ".price-info")
if (toggle && form && priceInfo) {
toggle.setAttribute("role", "button")
toggle.setAttribute("tabindex", "0")
toggle.addEventListener("click", function (event) {
var expanded = toggle.getAttribute("aria-expanded") === "true" || false
toggle.setAttribute("aria-expanded", !expanded)
form.hidden = expanded
if (!expanded) {
buyingOption.classList.add("expanded")
} else {
buyingOption.classList.remove("expanded")
}
priceInfo.hidden = expanded
}, false)
}
}
function addMetrics(buyingOption) {
setTimeout(function () {
var collapsed = buybox.querySelector(".buying-option.expanded") === null
var form = buyingOption.querySelector(".buying-option-form")
var formAction = form.getAttribute("action")
if (form) {
var metricsAppendix = formAction.indexOf("?") ==! -1 ? "&" : "?"
metricsAppendix += "discount=" + (buyingOption.querySelector(".buying-option-price-campaign").className.indexOf("discounted") !== -1).toString()
metricsAppendix += "&metricsGroup=" + campaignPricesMetricsGroup
metricsAppendix += "&collapsed=" + collapsed.toString()
form.action = formAction + metricsAppendix
}
}, 1)
}
function bindModal(form, formAction, timestamp, index) {
var weHasBrowserSupport = window.fetch && Array.from
return function() {
var Buybox = EcommScripts ? EcommScripts.Buybox : null
var Modal = EcommScripts ? EcommScripts.Modal : null
if (weHasBrowserSupport && Buybox && Modal) {
var modalID = "ecomm-modal_" + timestamp + "_" + index
var modal = new Modal(modalID)
modal.domEl.addEventListener("close", close)
function close() {
form.querySelector("button[type=submit]").focus()
}
var formSubmit = Buybox.interceptFormSubmit(
Buybox.fetchFormAction(window.fetch),
function(responseBody) {
document.body.dispatchEvent(new Event("updatedCart"))
Buybox.triggerModalAfterAddToCartSuccess(modal)(responseBody)
},
function() {
form.removeEventListener("submit", formSubmit, false)
form.submit()
}
)
form.addEventListener("submit", formSubmit, false)
document.body.appendChild(modal.domEl)
}
}
}
function initKeyControls() {
document.addEventListener("keydown", function (event) {
if (document.activeElement.classList.contains("buying-option-price") && (event.code === "Space" || event.code === "Enter")) {
if (document.activeElement) {
event.preventDefault()
document.activeElement.click()
}
}
}, false)
}
function initialStateOpen() {
var narrowBuyboxArea = buybox.offsetWidth <= 480
var allOptionsInitiallyCollapsed = buybox.className.indexOf("all-options-initially-collapsed") > -1
;[].slice.call(buybox.querySelectorAll(".buying-option")).forEach(function (option, index) {
var toggle = option.querySelector(priceNS + ".buying-option-price")
var form = option.querySelector(".buying-option-form")
var priceInfo = option.querySelector(priceNS + ".price-info")
if (allOptionsInitiallyCollapsed || narrowBuyboxArea && index > 0) {
toggle.setAttribute("aria-expanded", "false")
form.hidden = "hidden"
priceInfo.hidden = "hidden"
} else {
toggle.click()
}
})
}
initialStateOpen()
if (window.buyboxInitialised) return
window.buyboxInitialised = true
initKeyControls()
if (window.fetch && isMeasuringTime) {
var collapsed = buybox.querySelector(".buying-option.expanded") === null
var metricsAppendix = ""
metricsAppendix += "&discount=" + (buybox.querySelector(".buying-option-price-campaign").className.indexOf("discounted") !== -1).toString()
metricsAppendix += "&metricsGroup=" + campaignPricesMetricsGroup
metricsAppendix += "&collapsed=" + collapsed.toString()
window.fetch("https://web.archive.org/web/20220923225830/https://test-buckets.springer.com/log?v3&time=" + now + metricsAppendix)
.then(function (res) {
return res.text()
})
.catch(function () {
})
}
})()