Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

サイドバーをメタ情報として抜き出す #28

Closed
saki7 opened this issue Oct 31, 2017 · 30 comments
Closed

サイドバーをメタ情報として抜き出す #28

saki7 opened this issue Oct 31, 2017 · 30 comments

Comments

@saki7
Copy link
Contributor

saki7 commented Oct 31, 2017

ファイルの仕様については特に深く考えず json で良いと思う (階層構造を表現できていればどんな形式でもいい)

json を XHR で読みに行って動的に生成するフロントエンド側は15分くらいあれば書けるので、問題はバックエンド

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

refs #26, #27

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

せっかく crsearch の機能追加で綺麗な json を吐いているので、site_generator の crsearch.json 生成処理で

  • 現段階で省かれているページを Index オブジェクトとして追加。 type"meta"
  • Namespace オブジェクトに サイドバー上の名前を表す name 属性を追加
  • crsearch.js のクイックジャンプの検索結果で除外して欲しい Index にだけ "nojump": true を追加

この仕様変更でいけそう

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

現行のhtmlについている active が消えるという問題があるけど、 js 側で breadcrumb を見に行って頑張ればどうにかなりそう

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

boostjpでまだcrsearch.jsonを吐いていないのを忘れてた……

とりあえず cpprefjp の時だけ true になるフラグを立てますかね……

@melpon
Copy link
Member

melpon commented Oct 31, 2017

crsearch とサイドバーは全く別の機能なので、混ぜるよりも別々に置いた方が綺麗そうではありますね。容量的にはダメかもしれないですけど。

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

そうなんですよね。容量の問題があるのでとりあえず一本化した方がいいかなと。

@melpon
Copy link
Member

melpon commented Oct 31, 2017

boostjp の場合はサイドバーを静的に出力して、cpprefjp はサイドバーを出力せず動的に組み立てるようにする感じですかね?

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

はい。boostjpのメタ情報を正しく吐くようにするのはやり始めると手間がかかるので、まずcpprefjpだけ動的に作ってみたいと思います。 boostjp / cpprefjp かどうかのフラグはフロントエンドでも持てるので、 <body>class="boostjp" と追加していただけると

@melpon
Copy link
Member

melpon commented Oct 31, 2017

了解です。

あとメタ情報ですが、

現段階で省かれているページを Index オブジェクトとして追加。 type は "meta"
Namespace オブジェクトに サイドバー上の名前を表す name 属性を追加
crsearch.js のクイックジャンプの検索結果で除外して欲しい Index にだけ "nojump": true を追加

並び順のルール があるので、順序の情報が必要そうです。 get_order_priority 関数が返す値だけ入れておけば何とかなりますかね?

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

それでお願いします。なんとかします。

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

と思ったのですが、 page_id があるので 並び順は一切入れなくてもこちらで対応できると思います。 ORDER_PRIORITY_LIST にハードコードされているものを 生 json の配列か何かに抜き出した上で、 cpprefjp/meta のようなまっさらなリポジトリの中に置いておいて頂ければ、フロントエンド側でそれだけ submodule で取りに行けます。

@melpon
Copy link
Member

melpon commented Oct 31, 2017

確かにフロントエンドと site_generator が共有して使う設定を置いたリポジトリはあっても良いかもしれないですね。

@melpon
Copy link
Member

melpon commented Oct 31, 2017

とりあえず以下の2つを実装しました fdcef2b

現段階で省かれているページを Index オブジェクトとして追加。 type は "meta"
crsearch.js のクイックジャンプの検索結果で除外して欲しい Index にだけ "nojump": true を追加

feature/sidebar ブランチをチェックアウトして、./crsearch.json/docker.sh run を実行すれば新しい形式の crsearch.json が出てくると思います。

Namespace オブジェクトに サイドバー上の名前を表す name 属性を追加

これは何を追加すればいいでしょうか? cpp11[meta cpp] とかのメタ情報?

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

Namespace オブジェクトに サイドバー上の名前を表す name 属性を追加

これは何を追加すればいいでしょうか? cpp11[meta cpp] とかのメタ情報?

今のツリーのトップレベルの要素に表示されている名前です。

処理系
コンパイラの実装状況
メーリングリスト
外部ライブラリ
スタイル
article
editors_doc
言語機能
リファレンス

このうち、上5つについては元々crsearchで扱いが無かったものだと思います。これは、同名の Index (type: meta なもの)を作って、それだけを含む同名のNamespaceを追加すれば良いのではないかなと。

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

CRSearch オブジェクトに追加:

{
  "ids": [
    {
      "key" : ["コンパイラの実装状況"], // これが 12340001 相当
      "type": "meta"
    }
  ]
}

今まで省かれていたサイドバー上の要素について新しい Namespace オブジェクトを追加:

{
  "indexes": [
    {
      "id": 12340001, // このIDは適当
      "page_id": [
        "",
      ]
    },
  ],
  "name": "コンパイラの実装状況",
  "namespace": [
    "implementation-status"
  ],
  "path_prefixes": [
    "implementation-status"
  ]
},

というものを想像しています(もしかするとこれだと仕様的に欠陥があるかもしれない)

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

meta な物は IndexID::key で名前を指定すれば良いのですが、サイドバーのツリーのトップレベルの要素の名前に相当する概念がcrsearch.jsonの仕様上今まで無かったのです。なので、専用のNamespaceを掘って、
Namespace::name を新設すれば良いのではないかなと。

これをやっておくと、例えば "コンパイラの実装状況" が将来的に

  • "コンパイラの実装状況" >> "Windows"
  • "コンパイラの実装状況" >> "Mac"

に細分化された場合にも同じ仕様で対応できるので、一石二鳥のような気がしています。

@melpon
Copy link
Member

melpon commented Oct 31, 2017

あーなるほど、今だと "namespace" を空にして、"page_id" にファイル名を入れるようにしてます。こんな感じです。

{
  "indexes": [
    {
      "id": 12340001, // このIDは適当
      "page_id": [
        "implementation-status",
      ],
      "nojump": true
    },
  ],
  "namespace": [],
  "path_prefixes": []
},

こうじゃなくて、特定の "namespace" で作ってしまえばいいってことですね。

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

@melpon なるほど。これだとやはり僕の上記コメントのように入れ子になった時につらい思いをしそうなので、僕が書いたような構造の方が良いのかなと(あれで欠陥が無ければ、ですが……)

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

上のjsonの例で肝心のnameを書き忘れていたので書いておきました……

@melpon
Copy link
Member

melpon commented Oct 31, 2017

対応しました(たぶん)。 41a34cc

@saki7
Copy link
Contributor Author

saki7 commented Oct 31, 2017

ありがとうございます!フロントエンドのブランチになるはやでとりこみます。

@melpon
Copy link
Member

melpon commented Nov 1, 2017

今デイリーで全 html に更新を掛けている理由は、追加したページの情報を全ページに反映させるためなので、もしこれが出来るようになったらデイリーで全 html を更新する必要も無くなりますね。結構メリット多い…。

@faithandbrave
Copy link
Member

グローバル修飾リストの適用は、全変換じゃないといけなそうな気がします。

@melpon
Copy link
Member

melpon commented Nov 1, 2017

site_generator を更新すると全変換走るようにしたので、サイドバーを抜き出すことで十分に変換が早くなってればそれで問題ないはず…!

@melpon
Copy link
Member

melpon commented Nov 1, 2017

と思ったけど GLOBAL_QUALIFY_LIST.txt は site 側にあった…。
まあほんとに変換が十分早くなってれば、site の更新でも全変換すればいいですしですし

@saki7
Copy link
Contributor Author

saki7 commented Nov 3, 2017

@melpon 実装をお願いしておきながら大変申し訳無いのですが、 cpprefjp/kunai_config#1 に統合した方が良さそうという理由から Namespace::name は向こうに移動しました。現行のsite_generatorの対応箇所は僕が直しておきます。

@saki7
Copy link
Contributor Author

saki7 commented Nov 3, 2017

nojump はcrsearch.jsonの範囲なので、めっちゃ助かってます。

@saki7
Copy link
Contributor Author

saki7 commented Nov 3, 2017

@saki7
Copy link
Contributor Author

saki7 commented Nov 3, 2017

「サイドバーをメタ情報として抜き出す」ために必要な site_generator の変更は、全て完了しました 🎉

このIssueはcloseします。今後の実装は kunai の実装になります

@saki7 saki7 closed this as completed Nov 3, 2017
@saki7 saki7 mentioned this issue Nov 4, 2017
@saki7
Copy link
Contributor Author

saki7 commented Nov 6, 2017

Feature complete in tag v2.x.x

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants