Skip to content

Commit

Permalink
feat: fetch files with the query params, fixed #303
Browse files Browse the repository at this point in the history
  • Loading branch information
QingWei-Li committed Nov 7, 2017
1 parent 0d54c0c commit 2a2ed96
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 20 deletions.
54 changes: 35 additions & 19 deletions src/core/fetch/index.js
Original file line number Diff line number Diff line change
@@ -1,59 +1,74 @@
import { get } from './ajax'
import { callHook } from '../init/lifecycle'
import { getParentPath } from '../router/util'
import { getParentPath, stringifyQuery } from '../router/util'
import { noop } from '../util/core'
import { getAndActive } from '../event/sidebar'

function loadNested (path, file, next, vm, first) {
function loadNested (path, qs, file, next, vm, first) {
path = first ? path : path.replace(/\/$/, '')
path = getParentPath(path)

if (!path) return

get(vm.router.getFile(path + file))
.then(next, _ => loadNested(path, file, next, vm))
get(vm.router.getFile(path + file) + qs).then(next, _ =>
loadNested(path, qs, file, next, vm)
)
}

export function fetchMixin (proto) {
let last
proto._fetch = function (cb = noop) {
const { path } = this.route
const { path, query } = this.route
const qs = stringifyQuery(query, ['id'])
const { loadNavbar, loadSidebar } = this.config

// Abort last request
last && last.abort && last.abort()

last = get(this.router.getFile(path), true)
last = get(this.router.getFile(path) + qs, true)

// Current page is html
this.isHTML = /\.html$/g.test(path)

const loadSideAndNav = () => {
if (!loadSidebar) return cb()

const fn = result => { this._renderSidebar(result); cb() }
const fn = result => {
this._renderSidebar(result)
cb()
}

// Load sidebar
loadNested(path, loadSidebar, fn, this, true)
loadNested(path, qs, loadSidebar, fn, this, true)
}

// 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()
},
_ => {
this._renderMain(null)
loadSideAndNav()
}
)

// Load nav
loadNavbar &&
loadNested(path, loadNavbar, text => this._renderNav(text), this, true)
loadNested(
path,
qs,
loadNavbar,
text => this._renderNav(text),
this,
true
)
}

proto._fetchCover = function () {
const { coverpage } = this.config
const query = this.route.query
const root = getParentPath(this.route.path)
const path = this.router.getFile(root + coverpage)

Expand All @@ -63,8 +78,9 @@ export function fetchMixin (proto) {
}

this.coverIsHTML = /\.html$/g.test(path)
get(path)
.then(text => this._renderCover(text))
get(path + stringifyQuery(query, ['id'])).then(text =>
this._renderCover(text)
)
}

proto.$fetch = function (cb = noop) {
Expand Down
3 changes: 2 additions & 1 deletion src/core/router/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@ export function parseQuery (query) {
return res
}

export function stringifyQuery (obj) {
export function stringifyQuery (obj, ignores = []) {
const qs = []

for (const key in obj) {
if (ignores.indexOf(key) > -1) continue
qs.push(
obj[key]
? `${encode(key)}=${encode(obj[key])}`.toLowerCase()
Expand Down

0 comments on commit 2a2ed96

Please # to comment.