Skip to content

Commit 037cf32

Browse files
committed
refactor
1 parent 4bb2f11 commit 037cf32

File tree

6 files changed

+65
-38
lines changed

6 files changed

+65
-38
lines changed

example/cg.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ Grid Layout Moduleの理解を深めるには、そこに登場する用語を
134134
- reset.css
135135
- space.css
136136
- ...
137-
- components/
137+
- **components/**
138138
- layout/
139139
- PageLayout.Astro
140140
- ...
@@ -154,7 +154,7 @@ Grid Layout Moduleの理解を深めるには、そこに登場する用語を
154154
- **reset.css**
155155
- space.css
156156
- ...
157-
- **components/**
157+
- ~~components/~~
158158
- layout/
159159
- PageLayout.Astro
160160
- ...

example/rendered.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ <h1>コラム</h1>
103103
<p>タイトルのないデモ</p>
104104
<section class="CG2-livecode"><header class="CG2-livecode__header"><div class="CG2-livecode__label"></div><div class="CG2-livecode__nav"><ul><li><a href="https://s3-ap-northeast-1.amazonaws.com/codegrid/2016-display-grid/demo/1/index.html">新規タブで開く</a></li></ul></div></header><div class="CG2-livecode__body"><iframe src="https://s3-ap-northeast-1.amazonaws.com/codegrid/2016-display-grid/demo/1/index.html" data-deferred></iframe></div></section>
105105
<p>見出しのないファイルツリー</p>
106-
<div class="FileTree">
106+
<div class="Tree">
107107
<ul>
108108
<li class="directory"><details open="true"><summary>src/
109109
</summary><ul>
@@ -116,7 +116,7 @@ <h1>コラム</h1>
116116
<li data-file-type="css" class="file">space.css</li>
117117
<li data-file-type class="file">...</li>
118118
</ul></details></li>
119-
<li class="directory"><details open="true"><summary>components/
119+
<li class="directory"><details open="true"><summary><strong>components/</strong>
120120
</summary><ul>
121121
<li class="directory"><details open="true"><summary>layout/
122122
</summary><ul>
@@ -131,7 +131,7 @@ <h1>コラム</h1>
131131

132132
</div>
133133
<p>見出しのあるファイルツリー</p>
134-
<div class="FileTree">
134+
<div class="Tree">
135135
<h3>CSSとテンプレートの構成</h3>
136136
<ul>
137137
<li class="directory"><details open="true"><summary>src/
@@ -145,7 +145,7 @@ <h3>CSSとテンプレートの構成</h3>
145145
<li data-file-type="css" class="file">space.css</li>
146146
<li data-file-type class="file">...</li>
147147
</ul></details></li>
148-
<li class="directory"><details open="true"><summary><strong>components/</strong>
148+
<li class="directory"><details open="true"><summary><del>components/</del>
149149
</summary><ul>
150150
<li class="directory"><details open="true"><summary>layout/
151151
</summary><ul>

lib/renderer/cgmd/tree.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"use strict";
22
var util = require("util");
33

4-
var template = "" + '<div class="FileTree">\n' + "%s\n" + "</div>\n";
4+
var template = "" + '<div class="Tree">\n' + "%s\n" + "</div>\n";
55

66
/**
77
* cg:tree をレンダリングする

lib/transformer/tree.js

+32-30
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,60 @@
11
"use strict";
22

33
/**
4-
* div.FileTreeを整形する
4+
* div.Treeを整形する
55
*
66
* @param {HTMLDocument} $
77
* cheerio
88
*/
99
module.exports = function ($) {
10-
$(".FileTree").each(function () {
10+
$(".Tree").each(function () {
1111
var $tree = $(this);
1212
$tree.find("li").each(function (idx, el) {
1313
var $li = $(el);
1414
var $ul = $li.find("> ul");
15-
var $liTextNode = $li.contents().filter(function () {
16-
return this.nodeType === 3 || $(this).is("strong");
17-
});
18-
var liText = $li.text().trim();
15+
var $label = $li.contents().not("ul");
16+
var labelText = $label.text().trim();
1917

2018
// ディレクトリを示す場合は末尾に/がある
21-
var isDirectory = /\/\s*$/.test(liText);
19+
var isDirectory = labelText.endsWith("/");
20+
var hasChildren = $ul.length > 0;
2221

23-
if ($ul.length > 0) {
22+
// 中身のあるディレクトリの場合は、details/summaryを使う
23+
// - details要素でulを囲む
24+
// - summary要素には、li内のul以外の要素をラベルとして入れる
25+
if (isDirectory && hasChildren) {
2426
var $details = $("<details>");
2527
var $summary = $("<summary>");
2628

27-
// - details要素でulを囲む
28-
// - summaryにli直下の、テキストまたはstrongで囲まれたテキストを入れる
2929
$details.append($ul);
3030
$details.attr("open", "true");
3131
$details.prepend($summary);
32-
$summary.append($liTextNode);
32+
$summary.append($label);
3333

3434
$li.prepend($details);
3535
$li.addClass("directory");
36-
} else {
37-
if (isDirectory) {
38-
// ディレクトリを示すが、中身がない場合は、ファイルが大量にあることを
39-
// 省略していることを意味するため、中身は ... とする
40-
var $details = $("<details>");
41-
var $summary = $("<summary>");
42-
var $emptyContent = $('<ul><li class="file">...</li></ul>');
43-
$details.append($emptyContent);
44-
$details.prepend($summary);
45-
$summary.append($liTextNode);
46-
47-
$li.prepend($details);
48-
$li.addClass("directory");
49-
} else {
50-
// ファイルを示す場合は、拡張子をdata属性に持たせ、CSS側で利用する
51-
var fileExtension = liText.split(".").pop();
52-
$li.attr("data-file-type", fileExtension);
53-
$li.addClass("file");
54-
}
36+
return;
5537
}
38+
39+
// ディレクトリを示すが、中身がない場合は、ファイルが大量にあることを
40+
// 省略していることを意味するため、中身は ... とする
41+
if (isDirectory && !hasChildren) {
42+
var $details = $("<details>");
43+
var $summary = $("<summary>");
44+
var $emptyContent = $('<ul><li class="file">...</li></ul>');
45+
$details.append($emptyContent);
46+
$details.prepend($summary);
47+
$summary.append($label);
48+
49+
$li.prepend($details);
50+
$li.addClass("directory");
51+
return;
52+
}
53+
54+
// ファイルを示す場合は、拡張子をdata属性に持たせ、CSS側で利用する
55+
var fileExtension = labelText.split(".").pop();
56+
$li.attr("data-file-type", fileExtension);
57+
$li.addClass("file");
5658
});
5759
});
5860
};

test/cgmd/renderer/cgmd/tree.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ describe("CodeGridMarkdown - Renderer - cgmd", function () {
88
describe("#tree", function () {
99
it("レンダリングできること", function () {
1010
var res = renderTree("foo", renderer);
11-
var expect = '<div class="FileTree">\n<p>foo</p>\n\n</div>\n';
11+
var expect = '<div class="Tree">\n<p>foo</p>\n\n</div>\n';
1212
assert.equal(res, expect);
1313
});
1414
});

test/cgmd/transformer/tree.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"use strict";
2+
var assert = require("power-assert");
3+
var Transformer = require("../../../lib/transformer");
4+
5+
describe("CodeGridMarkdown - Transformer - Tree", function () {
6+
describe("#tree", function () {
7+
it("レンダリングされること: 中身のあるディレクトリ", function () {
8+
var res = Transformer.transform(
9+
'<div class="Tree"><h3>見出し</h3><ul><li>directory/<ul><li>file1.ext</li></ul></li><li>file2.ext</li></ul></div>'
10+
);
11+
var expect =
12+
'<div class="Tree"><h3>見出し</h3><ul><li class="directory"><details open="true"><summary>directory/</summary><ul><li data-file-type="ext" class="file">file1.ext</li></ul></details></li><li data-file-type="ext" class="file">file2.ext</li></ul></div>';
13+
assert.equal(res, expect);
14+
});
15+
16+
it("レンダリングされること: 中身のないディレクトリ", function () {
17+
var res = Transformer.transform(
18+
'<div class="Tree"><h3>見出し</h3><ul><li>directory/<ul><li>file1.ext</li></ul></li><li>file2.ext</li><li>a-lot-of-files/</li></ul></div>'
19+
);
20+
var expect =
21+
'<div class="Tree"><h3>見出し</h3><ul><li class="directory"><details open="true"><summary>directory/</summary><ul><li data-file-type="ext" class="file">file1.ext</li></ul></details></li><li data-file-type="ext" class="file">file2.ext</li><li class="directory"><details><summary>a-lot-of-files/</summary><ul><li class="file">...</li></ul></details></li></ul></div^';
22+
assert.equal(res, expect);
23+
});
24+
});
25+
});

0 commit comments

Comments
 (0)