You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by ov...@apache.org on 2020/11/12 03:32:40 UTC

[incubator-echarts-handbook] branch master updated: chore(navbar): build navbar from -www

This is an automated email from the ASF dual-hosted git repository.

ovilia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-echarts-handbook.git


The following commit(s) were added to refs/heads/master by this push:
     new f67e51d  chore(navbar): build navbar from -www
f67e51d is described below

commit f67e51d641d787c923fd49eb5e897be932c42107
Author: Ovilia <zw...@gmail.com>
AuthorDate: Thu Nov 12 11:27:45 2020 +0800

    chore(navbar): build navbar from -www
---
 app.html                                           | 13 +++
 build/generate.js                                  | 96 +++++++++-------------
 components/partials/Navbar.vue                     | 22 +++++
 components/partials/Navbar/en.js                   |  1 +
 components/partials/Navbar/zh.js                   |  1 +
 components/partials/Navigator.vue                  |  8 --
 components/partials/Sidebar.vue                    | 38 ++++++---
 configs/config.asf.js                              |  3 +-
 configs/config.dev.js                              |  3 +-
 .../chart-specificatio/bar/bi-directional-bar.md   | 10 ++-
 contents/zh/posts.js                               |  2 +-
 layouts/default.vue                                | 20 +++--
 nuxt.config.js                                     | 16 ++--
 package.json                                       |  5 +-
 pages/helper/contributors.ts                       |  3 +
 pages/helper/post.ts                               |  6 +-
 16 files changed, 141 insertions(+), 106 deletions(-)

diff --git a/app.html b/app.html
new file mode 100644
index 0000000..22c790b
--- /dev/null
+++ b/app.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html {{ HTML_ATTRS }}>
+    <head {{ HEAD_ATTRS }}>
+        <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css">
+        <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/apache/incubator-echarts-website@asf-site/zh/css/main.css">
+        {{ HEAD }}
+    </head>
+    <body {{ BODY_ATTRS }}>
+        {{ APP }}
+        <script src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script>
+        <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
+    </body>
+</html>
diff --git a/build/generate.js b/build/generate.js
index d4d1f48..a3b3065 100644
--- a/build/generate.js
+++ b/build/generate.js
@@ -1,61 +1,43 @@
-const {exec} = require('child_process');
 const fs = require('fs');
 
-console.log('[1/2] Running nuxt generate');
-exec('nuxt generate', (error, stdout, stderr) => {
-    if (error) {
-        console.error(error);
-    }
-    if (stderr) {
-        console.error(stderr);
-    }
-    if (stdout) {
-        console.log(stdout);
-    }
-
-    console.log('[2/2] Updating nav.');
-    setNav();
-});
-
-function setNav() {
-    try {
-        const navContent = fs.readFileSync('../incubator-echarts-website/components/nav.html', 'utf-8');
-        setNavDir('./dist', navContent);
-    }
-    catch (e) {
-        console.error(e);
-        console.error('Setting nav failed due to the error loading nav.html. Please make sure you have incubator-echarts-www and incubator-echarts-website project being under the same directory of this repo and have run `npm run build` under incubator-echarts-www.');
-    }
-}
+const config = {
+  cdnThirdParty: {
+      jquery: 'https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js',
+      bootstrapCSS: 'https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css',
+      bootstrapJS: 'https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js'
+  },
+  cdnPayRootMap: 'https://cdn.jsdelivr.net/gh/apache/incubator-echarts-website@asf-site'
+};
+
+let template = `<!DOCTYPE html>
+<html {{ HTML_ATTRS }}>
+    <head {{ HEAD_ATTRS }}>
+        <link rel="stylesheet" type="text/css" href="{{ bootstrapCSS }}">
+        <link rel="stylesheet" type="text/css" href="{{ cdnPayRootMap }}/zh/css/main.css">
+        {{ HEAD }}
+    </head>
+    <body {{ BODY_ATTRS }}>
+        {{ APP }}
+        <script src="{{ jquery }}"></script>
+        <script src="{{ bootstrapJS }}"></script>
+    </body>
+</html>
+`;
+template = template.replace(new RegExp('{{ bootstrapCSS }}', 'g'), config.cdnThirdParty.bootstrapCSS);
+template = template.replace(new RegExp('{{ jquery }}', 'g'), config.cdnThirdParty.jquery);
+template = template.replace(new RegExp('{{ bootstrapJS }}', 'g'), config.cdnThirdParty.bootstrapJS);
+template = template.replace(new RegExp('{{ cdnPayRootMap }}', 'g'), config.cdnPayRootMap);
+
+fs.writeFileSync('./app.html', template, 'utf-8');
+
 
-function setNavDir(path, navContent) {
-    let isDir;
-    try {
-        isDir = fs.lstatSync(path).isDirectory();
-    }
-    catch (e) {
-        console.warn('File not found, ignored:', path);
-        return;
-    }
-
-    if (isDir) {
-        const files = fs.readdirSync(path);
-        files.forEach(file => setNavDir(path + '/' + file, navContent));
-    }
-    else {
-        try {
-            let content = fs.readFileSync(path, 'utf-8');
-            if (content) {
-                content = content.replace(
-                    '<div id="nav-placeholder">INJECT NAV HERE</div>',
-                    navContent
-                );
-                fs.writeFileSync(path, content, 'utf-8');
-            }
-        }
-        catch (e) {
-            console.error('Error:', e);
-        }
-
-    }
+
+updateNav('zh');
+updateNav('en');
+
+function updateNav(locale) {
+    let navContent = fs.readFileSync(`../incubator-echarts-website/${locale}/nav.html`, 'utf-8');
+    navContent = `module.exports = \`${navContent}\`\n`;
+    fs.writeFileSync(`./components/partials/Navbar/${locale}.js`, navContent, 'utf-8');
 }
+
diff --git a/components/partials/Navbar.vue b/components/partials/Navbar.vue
new file mode 100644
index 0000000..987df52
--- /dev/null
+++ b/components/partials/Navbar.vue
@@ -0,0 +1,22 @@
+<template>
+  <div v-html="navContent"></div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import zhNav from './Navbar/zh';
+
+export default Vue.extend({
+  components: {
+
+  },
+  computed: {
+    navContent() {
+      return this.$store.state.locale === 'zh'
+        ? zhNav
+        : '';
+    }
+  }
+});
+
+</script>
diff --git a/components/partials/Navbar/en.js b/components/partials/Navbar/en.js
new file mode 100644
index 0000000..28be376
--- /dev/null
+++ b/components/partials/Navbar/en.js
@@ -0,0 +1 @@
+module.exports = `<nav role="navigation" class="navbar navbar-default navbar-fixed-top"><div class="container-fluid"><div class="navbar-header"><button type="button" data-toggle="collapse" data-target="#navbar-collapse" aria-expanded="false" class="navbar-toggle collapsed"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a href="https://echarts.apache.org/en/index.html" class="navbar-brand">< [...]
diff --git a/components/partials/Navbar/zh.js b/components/partials/Navbar/zh.js
new file mode 100644
index 0000000..2a7fc84
--- /dev/null
+++ b/components/partials/Navbar/zh.js
@@ -0,0 +1 @@
+module.exports = `<nav role="navigation" class="navbar navbar-default navbar-fixed-top"><div class="container-fluid"><div class="navbar-header"><button type="button" data-toggle="collapse" data-target="#navbar-collapse" aria-expanded="false" class="navbar-toggle collapsed"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a href="https://echarts.apache.org/zh/index.html" class="navbar-brand">< [...]
diff --git a/components/partials/Navigator.vue b/components/partials/Navigator.vue
deleted file mode 100644
index f7b29ec..0000000
--- a/components/partials/Navigator.vue
+++ /dev/null
@@ -1,8 +0,0 @@
-<template>
-    <div id="nav-placeholder">INJECT NAV HERE</div>
-</template>
-<style>
-#nav-placeholder {
-    display: none;
-}
-</style>
diff --git a/components/partials/Sidebar.vue b/components/partials/Sidebar.vue
index 70b9df6..3ff41c1 100644
--- a/components/partials/Sidebar.vue
+++ b/components/partials/Sidebar.vue
@@ -3,7 +3,7 @@
     <!-- active: {{ active }}. {{ posts }} -->
     <div class="bd-docs-nav">
       <div class="bd-toc-item level0"
-        v-for="level0Post in $store.state.posts.zh"
+        v-for="level0Post in $store.state.posts[this.$store.state.locale]"
         :key="level0Post.dir"
       >
         <a class="bd-toc-link"
@@ -41,8 +41,8 @@
                     @click="toggleChildren($event)"
                   >
                     {{ level2Post.title }}
-                    <b-icon icon="chevron-down"></b-icon>
-                    <b-icon icon="chevron-up"></b-icon>
+                    <span class="glyphicon glyphicon-menu-down"></span>
+                    <span class="glyphicon glyphicon-menu-up"></span>
                   </a>
                   <ul class="nav bd-sidenav level3"
                     v-if="!level2Post.draft && level2Post.children"
@@ -102,7 +102,7 @@ export default Vue.extend({
 
 </script>
 
-<style>
+<style lang="scss">
 .bd-sidebar {
   padding: 20px;
 }
@@ -122,9 +122,18 @@ export default Vue.extend({
       color: #222;
     }
 
-    .nav {
-      display: block;
-    }
+    .page-content {
+      .nav {
+        display: block;
+      }
+
+      ul.nav {
+        padding-left: 0;
+      }
+
+      .nav>li>a:focus, .nav>li>a:hover {
+        background-color: transparent;
+      }
 
       .nav .b-icon.bi {
         font-size: 90%;
@@ -133,21 +142,24 @@ export default Vue.extend({
         top: -2px;
       }
 
-      .nav-link {
+      .glyphicon {
         padding: 5px;
-        color: #444;
+        color: #ccc;
         cursor: pointer;
+        transform: scale(0.8);
+        top: 2px;
+        left: -5px;
       }
 
-        .nav-link .bi-chevron-up {
+        .nav-link .glyphicon-menu-up {
           display: none;
         }
 
-        .active .nav-link .bi-chevron-up {
+        .active .nav-link .glyphicon-menu-up {
           display: inline-block;
         }
 
-        .active .nav-link .bi-chevron-down {
+        .active .nav-link .glyphicon-menu-down {
           display: none;
         }
 
@@ -182,4 +194,6 @@ export default Vue.extend({
         .nav-link:hover {
           text-decoration: underline;
         }
+    }
+
 </style>
diff --git a/configs/config.asf.js b/configs/config.asf.js
index 0ba1640..78bbd8a 100644
--- a/configs/config.asf.js
+++ b/configs/config.asf.js
@@ -1,5 +1,6 @@
 export default {
-  rootPath: ' http://127.0.0.1:8080/',
+  base: '',
+  rootPath: 'http://127.0.0.1:8080',
   galleryViewPath: 'https://echarts.apache.org/examples/zh/view.html?c=',
   mainSitePath: 'https://echarts.apache.org/',
   optionPath: 'https://echarts.apache.org/option.html#',
diff --git a/configs/config.dev.js b/configs/config.dev.js
index 720d1c3..746a2ee 100644
--- a/configs/config.dev.js
+++ b/configs/config.dev.js
@@ -1,5 +1,6 @@
 export default {
-  rootPath: '/echarts-handbook/dist',
+  base: '/echarts-handbook/dist',
+  rootPath: 'http://localhost:3000/echarts-handbook/dist',
   exampleViewPath: 'http://localhost/incubator-echarts-website/examples/zh/view.html?c=',
   mainSitePath: 'http://localhost/incubator-echarts-website/',
   optionPath: 'http://localhost/incubator-echarts-website/option.html#',
diff --git a/contents/zh/best-practice/chart-specificatio/bar/bi-directional-bar.md b/contents/zh/best-practice/chart-specificatio/bar/bi-directional-bar.md
index 95555e2..5b32991 100644
--- a/contents/zh/best-practice/chart-specificatio/bar/bi-directional-bar.md
+++ b/contents/zh/best-practice/chart-specificatio/bar/bi-directional-bar.md
@@ -1,15 +1,17 @@
+# 双向柱状图
+
 双向柱状图多用于展示包含相反含义的数据的对比。其中图表的一个轴显示正在比较的类别,而另一轴代表对应的刻度值。
 
 双向柱状图一般用于正负两份相反数据的对比。例如一周内个人收入和支出的统计,其中收入为正数,支出为负数。使用双向柱状图可以很明确的对收入和支出做出对比,并能从单个系列中分析收入和支出的数值及波动。
 
-<iframe max-width="830" width="100%" height="400" 
+<iframe max-width="830" width="100%" height="400"
 src="https://gallery.echartsjs.com/view-lite.html?cid=xS18jqmX4f">
 </iframe>
 
 
 双向柱状图可分为垂直方向的双向柱状图(如上图)和水平方向的双向柱状图(又叫正负条形图,如下图),例如一个客户满意度的调查数据分析中,有正面评价和负面评价,这很适合用正负条形图,所有数据在中间对齐,正面的评价数据分布在右侧,负面的评价数据分布在左侧。
 
-<iframe max-width="830" width="100%" height="400" 
+<iframe max-width="830" width="100%" height="400"
  src="https://gallery.echartsjs.com/view-lite.html?cid=xHJ1un374z">
 </iframe>
 
@@ -20,13 +22,13 @@ src="https://gallery.echartsjs.com/view-lite.html?cid=xS18jqmX4f">
 
 2、永远不要在0基线的右边画负值的水平条行图或在 0 基线的上边画负值的柱子,以免和常识违背造成误解。
 
-<img max-width="830" width="100%" height="100%" 
+<img max-width="830" width="100%" height="100%"
 src="${rootPath}/images/design/bar/bi-directional-bar01.jpg">
 </img>
 
 
 3、双向柱状图多用于展示含相反含义的数据,因此要避免不具有正负含义的数据使用而造成的误解。 如下图人口统计图表中使用双向柱状图,一侧绘制男性的数据,另一侧绘制女性的数据,只是单纯的两类不同数据的对比,并不存在负数。那么,此时将两个数据序列绘制成一个分组柱状图是更合适的。
 
-<img max-width="830" width="100%" height="100%" 
+<img max-width="830" width="100%" height="100%"
 src="${rootPath}/images/design/bar/bi-directional-bar02.jpg">
 </img>
diff --git a/contents/zh/posts.js b/contents/zh/posts.js
index 88b3a74..53a599d 100644
--- a/contents/zh/posts.js
+++ b/contents/zh/posts.js
@@ -206,7 +206,7 @@ export default [{
                 dir: 'stacked-bar'
             }, {
                 title: '双向柱状图',
-                dir: 'bi-directiona-bar'
+                dir: 'bi-directional-bar'
             }, {
                 title: '分组柱状图',
                 dir: 'grouped-bar'
diff --git a/layouts/default.vue b/layouts/default.vue
index 4539127..0c374bf 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -1,9 +1,9 @@
 <template>
   <div>
-    <navigator />
+    <navbar />
 
-    <div class="container-fluid">
-      <div class="row flex-xl-nowrap2">
+    <div class="page-main">
+      <div class="page-content single-page">
         <sidebar />
 
         <div class="bd-content col-sm-7 pl-sm-2 col-12">
@@ -12,20 +12,20 @@
           </div>
         </div>
       </div>
-    </div>
 
-    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/styles/github.min.css">
+      <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/styles/github.min.css">
+    </div>
   </div>
 </template>
 
 <script lang="ts">
-import Navigator from '~/components/partials/Navigator.vue'
 import Sidebar from '~/components/partials/Sidebar.vue'
+import Navbar from '~/components/partials/Navbar.vue'
 
 export default {
   components: {
-    Navigator,
-    Sidebar
+    Sidebar,
+    Navbar
   },
 
   computed: {
@@ -41,6 +41,10 @@ export default {
 </script>
 
 <style lang="scss">
+.handbook-content {
+  margin-top: 50px;
+}
+
 .post-content {
   margin-bottom: 80px;
 }
diff --git a/nuxt.config.js b/nuxt.config.js
index 4f8eb89..d82b2cd 100644
--- a/nuxt.config.js
+++ b/nuxt.config.js
@@ -6,7 +6,7 @@ export default {
   mode: 'universal',
 
   router: {
-    base: config.rootPath
+    base: config.base
   },
 
   /*
@@ -48,12 +48,12 @@ export default {
   */
   modules: [
     // Doc: https://bootstrap-vue.js.org
-    [
-      'bootstrap-vue/nuxt',
-      {
-        icons: true
-      }
-    ],
+    // [
+    //   'bootstrap-vue/nuxt',
+    //   {
+    //     icons: true
+    //   }
+    // ],
     [
       'nuxt-i18n',
       {
@@ -78,7 +78,7 @@ export default {
   */
   build: {
     extractCSS: {
-      allChunks: true
+      // allChunks: true
     },
     /*
     ** You can extend webpack config here
diff --git a/package.json b/package.json
index 974ce67..69d61e2 100644
--- a/package.json
+++ b/package.json
@@ -8,8 +8,7 @@
     "dev": "nuxt",
     "build": "nuxt build",
     "start": "nuxt start",
-    "prepare": "node build/generate-contributors.js",
-    "generate": "nuxt generate",
+    "generate": "node build/generate-contributors.js && node build/generate && nuxt generate",
     "lint": "eslint --ext .js,.vue --ignore-path .gitignore ."
   },
   "dependencies": {
@@ -17,7 +16,7 @@
     "bootstrap-vue": "^2.0.0",
     "markdown-it-anchor": "^6.0.0",
     "markdown-it-highlightjs": "^3.1.0",
-    "markdown-it-toc-done-right": "git+ssh://git@github.com/Ovilia/markdown-it-toc-done-right.git",
+    "markdown-it-toc-done-right": "git+https://github.com/Ovilia/markdown-it-toc-done-right.git",
     "nuxt": "^2.0.0",
     "nuxt-i18n": "^6.7.2"
   },
diff --git a/pages/helper/contributors.ts b/pages/helper/contributors.ts
index fc345b9..1cf7b11 100644
--- a/pages/helper/contributors.ts
+++ b/pages/helper/contributors.ts
@@ -1,4 +1,7 @@
 export default {
+    "contents/zh/meta/get-started.md": [
+        "Ovilia"
+    ],
     "contents/zh/get-started.md": [
         "Ovilia"
     ],
diff --git a/pages/helper/post.ts b/pages/helper/post.ts
index f0d7f97..9412913 100644
--- a/pages/helper/post.ts
+++ b/pages/helper/post.ts
@@ -12,7 +12,6 @@ export async function getPostData (path: string, lang: string) {
   let content = fileContent.default;
 
   const url = `${config.rootPath}/${lang}/${path}`;
-  console.log(url);
 
   const md = new MarkdownIt({
     html: true
@@ -29,10 +28,11 @@ export async function getPostData (path: string, lang: string) {
     .use(toc, {
       containerId: 'toc',
       level: 2,
-      href: slug => {
+      hash: slug => {
         const hash = slug.split('#');
         if (hash.length > 0) {
-          return url + '#' + hash[0];
+          // Replace all spaces with '-' and encodeURI
+          return url + '#' + encodeURI(hash[0].trim().replace(new RegExp(' ', 'g'), '-'));
         }
         else {
           return url;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org