LoginSignup
3
1

More than 5 years have passed since last update.

Confluenceで子ページの中身を全て展開したページを作る[Server 6.1.4版]

Last updated at Posted at 2017-11-24

はじめに

(勝手に)以下ページを参考にしております。
Confluenceで子ページの中身を全て展開したページを作る
参考にさせてもらったコードだと、Server6.1.4では動かず、一部手直しした時の情報を残しておきます。
※問題あれば記事消します。(本家優先)

使い方

基本

本家と変わりません。
1. 「その他マクロ>子ページの表示」をページ内のどこかに配置する。

image.png
2. 以下ソースを、「その他マクロ>htmlマクロ」に記載する。
※htmlマクロを使うには管理>アドオンで有効化する必要があります。
詳しくは こちら

<div class="w-child-pages" data-url="this"></div>
<script type="text/javascript">
(function() {
    var expandScript = function($div, data) {
        $div.css({padding: '15px', border: 'solid 1px #aaa', borderRadius: '5px'});
        var page_url = $div.attr('data-url');
        if (page_url == 'this') {
            appendPage($div, data, true);
            return;
        }
        $.get(page_url, function(data) {
            appendPage($div, data, false);
        });
    };
    var appendPage = function($div, data, self) {
        if (self) {
            appendChildPages($div, data);
        } else {
            var $data = $(data);
            var $content = $data.find('div#main-content');
            $div.append($data.find('h1#title-text'));
            $div.append($content);
            expandScripts($content, data);
        }
        if (window.SyntaxHighlighter) {
            window.SyntaxHighlighter.highlight();
        }
    };
    var expandScripts = function($div, data) {
        $div.find('div.w-child-pages').each(function(){
            expandScript($(this), data);
        });
    };
    var appendChildPages = function($div, data) {
        $(data).find('ul.childpages-macro.conf-macro.output-block').find('li').each(function() {
            var $content = $('<div>').css({marginBottom: '10px'});;
            $div.append($content);
            $.get($(this).find('a').attr('href'), function(data) {
                appendPage($content, data, false);
            });
        });
    };
    var scriptTags = document.getElementsByTagName('script');
    var $div = $(scriptTags[scriptTags.length - 1]).prev();
    $(function(){
        if (location.pathname != '/pages/viewpage.action') {
            return;
        }
        expandScript($div, $('html')[0].outerHTML);
    });
})();
</script>

※サーバーがインターネット接続できないネットワークにあるので、<script src="https://・・・">ではうまくいかないので、直書き。

応用

本家と変わりません。
・任意のページを埋め込むときは最初のdivのdata-urlの部分にURLを指定する

制約

本家と変わりません。
・子ページでコードブロックが使われている場合、埋め込むページにも最低1つはコードブロックが必要

手直し箇所

たぶんconfluence本体のタグの使い方が変わったのだと思う。
before

$(data).find('li.child-item').each(function() {

after

$(data).find('ul.childpages-macro.conf-macro.output-block').find('li').each(function() {

※うちの環境では、/pages/の前に/wikiが着くように設定ファイルいじったりしてたので、ここも直してます。
before

if (location.pathname != '/pages/viewpage.action') {

after

if (location.pathname != '/wiki/pages/viewpage.action') {

気が向いたらプルリク送ります・・・

あとがき

ホントは、配下ページの添付ファイル一覧作りたいな、と思ったのがスタート。 → 作りました@201711/29
ページの再帰展開がまずできれば、きっとなんとかなるだろうと思って、いじりました。

結論的には、REST api使えばできるわ・・・ということに思い至り、このソースを拡充していく方向は取りやめにしようかと・・・
でもせっかくなので、公開しておこうかな・・・くらいの感覚です。

以上です。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1