feat(fetch): Add fallback languages configuration. (#402)
fallbackLanguages give the possibility to configure a list of languages which must used the default language when a page is missing in the requested language.
This commit is contained in:
parent
278a75ebd5
commit
ecc0e04c70
2 changed files with 56 additions and 11 deletions
|
|
@ -22,18 +22,40 @@ export function fetchMixin (proto) {
|
|||
proto._fetch = function (cb = noop) {
|
||||
const { path, query } = this.route
|
||||
const qs = stringifyQuery(query, ['id'])
|
||||
const { loadNavbar, loadSidebar, requestHeaders } = this.config
|
||||
|
||||
const { loadNavbar, loadSidebar, requestHeaders, fallbackLanguages } = this.config
|
||||
// Abort last request
|
||||
last && last.abort && last.abort()
|
||||
|
||||
const file = this.router.getFile(path)
|
||||
|
||||
last = get(file + qs, true, requestHeaders)
|
||||
|
||||
// Current page is html
|
||||
this.isHTML = /\.html$/g.test(file)
|
||||
|
||||
const getFallBackPage = (file) => {
|
||||
if (!fallbackLanguages) {
|
||||
return false
|
||||
}
|
||||
|
||||
const local = file.split('/')[1]
|
||||
|
||||
if (fallbackLanguages.indexOf(local) === -1) {
|
||||
return false
|
||||
}
|
||||
|
||||
file = file.replace(new RegExp(`^/${local}`), '')
|
||||
|
||||
return get(file + qs, true, requestHeaders)
|
||||
.then(
|
||||
(text, opt) => {
|
||||
this._renderMain(text, opt, loadSideAndNav)
|
||||
},
|
||||
_ => {
|
||||
return this._renderMain(null, {}, loadSideAndNav)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
const loadSideAndNav = () => {
|
||||
if (!loadSidebar) return cb()
|
||||
|
||||
|
|
@ -47,14 +69,15 @@ export function fetchMixin (proto) {
|
|||
}
|
||||
|
||||
// Load main content
|
||||
last.then(
|
||||
(text, opt) => {
|
||||
this._renderMain(text, opt, loadSideAndNav)
|
||||
},
|
||||
_ => {
|
||||
this._renderMain(null, {}, loadSideAndNav)
|
||||
}
|
||||
)
|
||||
last
|
||||
.then(
|
||||
(text, opt) => {
|
||||
this._renderMain(text, opt, loadSideAndNav)
|
||||
},
|
||||
_ => {
|
||||
return getFallBackPage(file) || this._renderMain(null, {}, loadSideAndNav)
|
||||
}
|
||||
)
|
||||
|
||||
// Load nav
|
||||
loadNavbar &&
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue