element/examples/route.config.js

148 lines
3.3 KiB
JavaScript
Raw Normal View History

2016-07-27 14:15:02 +08:00
import navConfig from './nav.config.json';
import langs from './i18n/route.json';
2016-07-27 14:15:02 +08:00
2017-05-12 16:33:36 +08:00
const LOAD_MAP = {
'zh-CN': name => {
return r => require.ensure([], () =>
r(require(`./pages/zh-CN/${name}.vue`)),
'zh-CN');
},
'en-US': name => {
return r => require.ensure([], () =>
r(require(`./pages/en-US/${name}.vue`)),
'en-US');
}
};
const load = function(lang, path) {
return LOAD_MAP[lang](path);
};
const LOAD_DOCS_MAP = {
'zh-CN': path => {
return r => require.ensure([], () =>
r(require(`./docs/zh-CN${path}.md`)),
'zh-CN');
},
'en-US': path => {
return r => require.ensure([], () =>
r(require(`./docs/en-US${path}.md`)),
'en-US');
}
};
const loadDocs = function(lang, path) {
return LOAD_DOCS_MAP[lang](path);
};
const registerRoute = (navConfig) => {
let route = [];
Object.keys(navConfig).forEach((lang, index) => {
let navs = navConfig[lang];
route.push({
path: `/${ lang }/component`,
redirect: `/${ lang }/component/installation`,
2017-05-12 16:33:36 +08:00
component: load(lang, 'component'),
children: []
});
navs.forEach(nav => {
2017-05-10 20:44:49 +08:00
if (nav.href) return;
if (nav.groups) {
nav.groups.forEach(group => {
group.list.forEach(nav => {
addRoute(nav, lang, index);
});
});
} else if (nav.children) {
nav.children.forEach(nav => {
addRoute(nav, lang, index);
});
} else {
addRoute(nav, lang, index);
}
});
});
function addRoute(page, lang, index) {
const component = page.path === '/changelog'
2017-05-12 16:33:36 +08:00
? load(lang, 'changelog')
: loadDocs(lang, page.path);
2016-09-14 11:15:28 +08:00
let child = {
2016-08-23 17:39:58 +08:00
path: page.path.slice(1),
meta: {
title: page.title || page.name,
description: page.description,
lang
2016-08-23 17:39:58 +08:00
},
2016-11-22 10:22:20 +08:00
name: 'component-' + (page.title || page.name),
2016-08-23 17:39:58 +08:00
component: component.default || component
2016-09-14 11:15:28 +08:00
};
route[index].children.push(child);
2016-08-23 17:39:58 +08:00
}
2016-07-27 14:15:02 +08:00
return route;
2016-07-27 14:15:02 +08:00
};
let route = registerRoute(navConfig);
2016-07-27 14:15:02 +08:00
2016-11-13 02:34:39 +08:00
const generateMiscRoutes = function(lang) {
let guideRoute = {
path: `/${ lang }/guide`, // 指南
redirect: `/${ lang }/guide/design`,
2017-05-12 16:33:36 +08:00
component: load(lang, 'guide'),
children: [{
path: 'design', // 设计原则
2016-11-22 10:22:20 +08:00
name: 'guide-design' + lang,
meta: { lang },
2017-05-12 16:33:36 +08:00
component: load(lang, 'design')
}, {
path: 'nav', // 导航
2016-11-22 10:22:20 +08:00
name: 'guide-nav' + lang,
meta: { lang },
2017-05-12 16:33:36 +08:00
component: load(lang, 'nav')
}]
};
2016-08-22 17:49:20 +08:00
let resourceRoute = {
path: `/${ lang }/resource`, // 资源
meta: { lang },
2016-11-22 10:22:20 +08:00
name: 'resource' + lang,
2017-05-12 16:33:36 +08:00
component: load(lang, 'resource')
};
2016-08-22 17:49:20 +08:00
let indexRoute = {
path: `/${ lang }`, // 首页
meta: { lang },
2016-11-22 10:22:20 +08:00
name: 'home' + lang,
2017-05-12 16:33:36 +08:00
component: load(lang, 'index')
};
return [guideRoute, resourceRoute, indexRoute];
2016-08-23 17:39:58 +08:00
};
langs.forEach(lang => {
route = route.concat(generateMiscRoutes(lang.lang));
});
2016-07-27 14:15:02 +08:00
2016-11-13 02:34:39 +08:00
route.push({
path: '/play',
name: 'play',
component: require('./play/index.vue')
});
let userLanguage = localStorage.getItem('ELEMENT_LANGUAGE') || window.navigator.language || 'en-US';
2016-11-11 16:58:44 +08:00
let defaultPath = '/en-US';
if (userLanguage.indexOf('zh-') !== -1) {
defaultPath = '/zh-CN';
}
route = route.concat([{
path: '/',
2016-11-11 16:58:44 +08:00
redirect: defaultPath
}, {
2016-07-27 17:05:28 +08:00
path: '*',
2016-11-11 16:58:44 +08:00
redirect: defaultPath
}]);
2016-07-27 17:05:28 +08:00
export default route;