LoginSignup
1
1

More than 1 year has passed since last update.

ガントチャート(JSライブラリ: jquery.ganttView)をカスタマイズしてみた(1行に複数タスク)

Last updated at Posted at 2023-02-17

はじめに

今となっては古のJSライブラリ

上記ライブラリのスケジュール管理オブジェクトを1行内に複数配置するカスタマイズをしてみたので、勘所をメモ書きしておきます。

ニッチな内容だけど、誰かの参考になれば幸いです。

スタイルシートの追加

標準の管理オブジェクト(チャート部に置くスケジュール線)

div.ganttview-block {
	position: relative;
	height: 25px;
	background-color: #E5ECF9;
	border: 1px solid #c0c0c0;
	border-radius: 3px;
	-moz-border-radius: 3px;
	-webkit-border-radius: 3px;
}

を基にして、1行内に複数配置できるスタイルシートを追加します。

div.ganttview-block-cells {
	position: relative;
	height: 25px;
}

div.ganttview-block-cell {
	position: absolute;
	height: 25px;
	background-color: #E5ECF9;
	border: 1px solid #c0c0c0;
	border-radius: 3px;
	-moz-border-radius: 3px;
	-webkit-border-radius: 3px;
}

ganttview-block-cellsがコンテナとなる階層で、配下に複数タスク(ganttview-block-cell)が格納されるイメージになります。

スクリプト側の改修前イメージ

function addBlocks(div, data, cellWidth, start) {
    //  ~省略
    // 入力データのループ
    for (var i = 0; i < data.length; i++) {
        for (var j = 0; j < data[i].series.length; j++) {
            // タスクのオブジェクト生成
            block = jQuery("<div>", {"class": "ganttview-block","",""});

            // 1行データ登録
            addBlockData(block, data[i], series);
            // ~後処理省略

            jQuery(rows[rowIdx]).append(block);
            // ~後処理省略
        }
    }
}

スクリプト側の改修後イメージ

function addBlocks(div, data, cellWidth, start) {
    //  ~省略
    // 入力データのループ
    for (var i = 0; i < data.length; i++) {
        for (var j = 0; j < data[i].series.length; j++) {
            var series = data[i].series[j];
            
            if("複数オブジェクトのキー" in series && series."複数オブジェクトのキー".length > 0){
                /// 新規追加したスタイルで箱を生成
                var 複数オブジェクト群格納用 = jQuery("<div>", {
                      "class": "ganttview-block-cells"
                });
                for (var k = 0; k < series."複数オブジェクトのキー".length; k++) {

                    // ~省略

                    // 新規追加したスタイルでタスクのオブジェクト生成
                    var block = jQuery("<div>", {"class": "ganttview-block-cell","",""});
                    // ループの中では格納用に追加
                    複数オブジェクト群格納用.append(block);
                }
                // 全部の複数タスクを可能し終えたら
                jQuery(rows[rowIdx]).append(複数オブジェクト群格納用);
                // ~後処理省略
            }else{
            
                // タスクのオブジェクト生成
                block = jQuery("<div>", {"class": "ganttview-block","",""});

                // 1行データ登録
                addBlockData(block, data[i], series);
                // ~後処理省略
                jQuery(rows[rowIdx]).append(block);
                // ~後処理省略
            }
        }
    }
}

画面イメージ

  • 改修前

改修前.JPG

  • 改修後

改修後.JPG

無事に、複数タスクを表示できました。

1
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
1
1