Kia Motors sorgte auf der SEMA 2018 für Aufsehen: Der Hersteller präsentierte einige neue exklusive Modelle und umgebaute Fahrzeuge.
Kia Motors America überraschte alle mit der Erstvorstellung des neuen Forte GT – doch das war noch nicht alles. Im Gepäck hatte man auch einen knallgrünen Lamborghini Kia Forte Federation, den 2020 Kia Telluride, ein Kia Forte Drift Car, den Queensland Police Stinger sowie den K900 und Stinger DUB Edition.
Kia nutzte zudem den Bereich zwischen Central und South Hall für Mitfahrgelegenheiten im Stinger und im brandneuen 2020 Telluride. Der Stinger drehte auf dem kleinen Kurs seine Driftrunden, während für alle vier neu gebauten Telluride-Modelle ein Offroad-Parcours vorbereitet wurde.
- {
const btn = w.querySelector(`[data-action="${action}"]`)
if (!btn) return
btn.dataset.state = on ? 'on' : 'off'
const label = btn.querySelector('.post-action-label')
if (label) label.textContent = on ? label.dataset.labelOn : label.dataset.labelOff
})
}
function setCountAll(n) {
wrappers.forEach((w) => {
const c = w.querySelector('[data-count]')
if (c) c.textContent = String(n)
})
}
function getCount() {
const c = wrappers[0]?.querySelector('[data-count]')
return Number(c?.textContent || 0)
}
function getState(action) {
const btn = wrappers[0]?.querySelector(`[data-action="${action}"]`)
return btn?.dataset.state === 'on'
}
async function loadInitial() {
try {
// Comprobar sesion PRIMERO. Sin esto, lanzabamos 3 fetches en
// paralelo y los anonimos (mayoria) generaban 2 invocations
// inutiles (vote + bookmark devolvian 401). Con miles de page
// renders/h post-cutover ese desperdicio se notaba en logs y
// function invocations facturadas.
//
// Reusa el helper kcbFetchSession (BaseLayout) que cachea el resultado
// en sessionStorage 10 min. Navbar/PostComments/PostActions todos
// usan el mismo helper → 1 fetch por sesion en lugar de 1 por page.
// Fallback in-place si el helper no esta cargado (orden inesperado).
if (typeof window.kcbFetchSession === 'function') {
window.__kcbSession = window.kcbFetchSession()
} else {
window.__kcbSession = window.__kcbSession || new Promise((resolve) => {
const start = () => {
fetch('/api/auth/session-check/', { credentials: 'same-origin' })
.then((r) => (r.ok ? r.json() : null))
.then(resolve)
.catch(() => resolve(null))
}
if ('requestIdleCallback' in window) {
requestIdleCallback(start, { timeout: 2000 })
} else {
setTimeout(start, 1000)
}
})
}
const s = await window.__kcbSession
if (s) {
userAuthenticated = Boolean(s.authenticated)
}
// Solo si el usuario esta autenticado pedimos su estado per-post.
// Para anonimos: vote_count se queda con el valor SSR inicial
// (data-count en el HTML); voted/bookmarked permanecen 'off'.
if (!userAuthenticated) return
const [voteRes, bmRes] = await Promise.all([
fetch(`/api/vote/${encodeURIComponent(slug)}`).catch(() => null),
fetch(`/api/bookmark/${encodeURIComponent(slug)}`).catch(() => null),
])
if (voteRes && voteRes.ok) {
const v = await voteRes.json()
setStateAll('like', Boolean(v.voted))
if (typeof v.vote_count === 'number') setCountAll(v.vote_count)
}
if (bmRes && bmRes.ok) {
const b = await bmRes.json()
setStateAll('bookmark', Boolean(b.bookmarked))
}
} catch {
/* silencioso — botones quedan en estado off */
}
}
function flashStatusAll(action, msg) {
wrappers.forEach((w) => {
const btn = w.querySelector(`[data-action="${action}"]`)
if (!btn) return
const prevTitle = btn.title
btn.title = msg
btn.classList.add('is-flash')
setTimeout(() => {
btn.title = prevTitle
btn.classList.remove('is-flash')
}, 1800)
})
}
async function handleVote() {
if (!userAuthenticated) {
flashStatusAll('like', signinHint)
const next = encodeURIComponent(location.pathname + location.search)
location.href = `/login/?next=${next}`
return
}
const prevState = getState('like')
// Optimistic UI (todas las instancias sincronizadas)
setStateAll('like', !prevState)
setCountAll(getCount() + (prevState ? -1 : 1))
try {
const res = await fetch(`/api/vote/${encodeURIComponent(slug)}`, { method: 'POST' })
if (!res.ok) throw new Error('vote failed')
const data = await res.json()
setStateAll('like', Boolean(data.voted))
if (typeof data.vote_count === 'number') setCountAll(data.vote_count)
// GA4: solo cuenta el voto positivo (toggle ON), no la retirada.
if (data.voted && window.kcbTrack) {
window.kcbTrack('post_vote', { slug })
}
} catch {
setStateAll('like', prevState)
setCountAll(getCount() + (prevState ? 1 : -1))
}
}
async function handleBookmark() {
if (!userAuthenticated) {
flashStatusAll('bookmark', signinHint)
const next = encodeURIComponent(location.pathname + location.search)
location.href = `/login/?next=${next}`
return
}
const prevState = getState('bookmark')
setStateAll('bookmark', !prevState)
try {
const res = await fetch(`/api/bookmark/${encodeURIComponent(slug)}`, { method: 'POST' })
if (!res.ok) throw new Error('bookmark failed')
const data = await res.json()
setStateAll('bookmark', Boolean(data.bookmarked))
// GA4: solo cuenta el bookmark positivo (toggle ON), no la retirada.
if (data.bookmarked && window.kcbTrack) {
window.kcbTrack('post_bookmark', { slug })
}
} catch {
setStateAll('bookmark', prevState)
}
}
// Bind click en TODOS los botones de TODAS las instancias
wrappers.forEach((w) => {
w.querySelector('[data-action="like"]')?.addEventListener('click', handleVote)
w.querySelector('[data-action="bookmark"]')?.addEventListener('click', handleBookmark)
})
loadInitial()
} // bindAll
})()
})(); Korean Car Blog hinzufügen zu Füge Korean Car Blog zu deinen bevorzugten Quellen bei Google hinzu
Weiterlesen
Mehr zu diesem Thema
Spy Shots1. Sept. 2020
Kia Forte Facelift in und von außen erwischt
Spy Shots27. Aug. 2020
Kia Forte Facelift aus nächster Nähe gesichtet
Spy Shots18. Aug. 2020
2021 Sonata N-Line: Die komplette Galerie
Spy Shots17. Aug. 2020

































Kommentare
Noch keine Kommentare. Sei der Erste.