Skip to content

Commit 1d39570

Browse files
author
Kuniwak
committed
Implement stage3
1 parent d57332b commit 1d39570

File tree

6 files changed

+304
-6
lines changed

6 files changed

+304
-6
lines changed

test/index.html

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ <h1>mixi JavaScript Training</h1>
2626
</div>
2727
<ol>
2828
<li><a href="stage1">意図した DOM を取得するトレーニング</a></li>
29-
<li><a href="stage2">意図通りに DOM の構造・スタイルを変更するトレーニング</a></li>
30-
<li><a href="stage3">意図通りにイベントを利用するトレーニング</a></li>
31-
<li><a href="stage4">意図通りにサーバーと通信するトレーニング</a></li>
32-
<li><a href="stage5">意図通りにモジュールを実装するトレーニング</a></li>
33-
<li><a href="stage6">よくあるイディオムを読み書きするトレーニング</a></li>
29+
<li><a href="stage2">意図通りに DOM のスタイルを変更するトレーニング</a></li>
30+
<li><a href="stage3">意図通りに DOM の構造を変更するトレーニング</a></li>
31+
<li><a href="stage4">意図通りにイベントを利用するトレーニング</a></li>
32+
<li><a href="stage5">意図通りにサーバーと通信するトレーニング</a></li>
33+
<li><a href="stage6">意図通りにモジュールを実装するトレーニング</a></li>
34+
<li><a href="stage7">よくあるイディオムを読み書きするトレーニング</a></li>
3435
</ol>
3536
</div>
3637
</body>

test/stage2/tests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
describe('ステージ2(意図した通りに DOM 要素の構造・スタイルを変更できるようになる)', function(){
3+
describe('ステージ2(意図した通りに DOM 要素のスタイルを変更できるようになる)', function(){
44
describe('DOMインターフェース編', function() {
55
it('寿司が表示されている要素の寿司を2つに増やす', function(){
66
var element;

test/stage3/.eslintrc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"env": {
3+
"browser": true,
4+
"mocha": true
5+
},
6+
"globals": {
7+
"$": false,
8+
"jQuery": false,
9+
"HTMLCollection": false
10+
}
11+
}

test/stage3/index.html

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>mixi JS Training</title>
5+
<meta charset="UTF-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7+
<link href="http://img.mixi.net/img/basic/favicon.ico" type="image/vnd.microsoft.icon" rel="icon">
8+
<link href="http://img.mixi.net/img/basic/favicon.ico" type="image/vnd.microsoft.icon" rel="shortcut icon">
9+
<link rel="stylesheet" href="/modules/mocha/mocha.css">
10+
<link rel="stylesheet" href="../common/mocha-patch.css">
11+
<link rel="stylesheet" href="style.css">
12+
</head>
13+
<body>
14+
<div class="js-training-container">
15+
<ul class="js-training">
16+
<li id="firebrick">1<span class="firebrick-ghost">&#x1f47b;</span></li>
17+
<li id="chocolate">2<span class="chocolate-space-invader">&#x1f47e;</span></li>
18+
<li class="mediumseagreen">3<span class="mediumseagreen-ghosts">&#x1f47b;&#x1f47b;</span>&#x1f33f;<span class="mediumseagreen-ghosts">&#x1f47b;&#x1f47b;</span></li>
19+
<li class="turquoise">4</li>
20+
<li><blockquote>5</blockquote></li>
21+
</ul>
22+
<div class="js-training-trick">&#x1f420;&#x1f420;</div>
23+
</div>
24+
<div class="js-training-container">
25+
<ul class="js-training">
26+
<li id="brown">6<span class="brown-ghost">&#x1f47b;</span></li>
27+
<li id="darkorange">7<span class="darkorange-space-invader">&#x1f47e;</span></li>
28+
<li class="limegreen">8<span class="limegreen-ghosts">&#x1f47b;&#x1f47b;</span>&#x1f33f;<span class="limegreen-ghosts">&#x1f47b;&#x1f47b;</span></li>
29+
<li class="mediumturquoise">9</li>
30+
<li><p>10</p></li>
31+
</ul>
32+
<div class="js-training-trick">&#x1f420;&#x1f420;</div>
33+
</div>
34+
<div id="mocha"></div>
35+
<script src="/modules/jquery/dist/jquery.js"></script>
36+
<script src="/modules/mocha/mocha.js"></script>
37+
<script src="/modules/chai/chai.js"></script>
38+
<script src="/modules/chai-jquery/chai-jquery.js"></script>
39+
<script>
40+
mocha.ui('bdd');
41+
mocha.reporter('html');
42+
expect = chai.expect;
43+
</script>
44+
<script>mocha.setup('bdd')</script>
45+
<script src="tests.js"></script>
46+
<script>
47+
if (window.mochaPhantomJS) { mochaPhantomJS.run(); }
48+
else { mocha.run(); }
49+
</script>
50+
</body>
51+
</html>

test/stage3/style.css

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
.js-training-container {
2+
position: relative;
3+
}
4+
5+
.js-training {
6+
position: relative;
7+
z-index:10;
8+
display: -webkit-flex;
9+
display: flex;
10+
list-style: none;
11+
margin: 10px;
12+
padding: 0;
13+
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
14+
}
15+
16+
.js-training li {
17+
-webkit-flex: 1;
18+
flex: 1;
19+
margin: 0;
20+
padding: 0;
21+
height: 40px;
22+
line-height: 40px;
23+
text-align: center;
24+
color: white;
25+
font-weight: bold;
26+
font-size: 130%;
27+
text-shadow: 0 1px 0 hsla(0, 0%, 0%, 0.3);
28+
}
29+
30+
.js-training #firebrick {
31+
background-color: firebrick;
32+
font-weight: normal;
33+
}
34+
35+
.js-training #chocolate {
36+
background-color: chocolate;
37+
font-weight: normal;
38+
}
39+
40+
.js-training .mediumseagreen {
41+
background-color: mediumseagreen;
42+
font-weight: normal;
43+
}
44+
45+
.js-training .turquoise {
46+
background-color: turquoise;
47+
font-weight: normal;
48+
}
49+
50+
.js-training blockquote {
51+
background-color: steelblue;
52+
margin: 0;
53+
height: 40px;
54+
font-size: 1;
55+
font-weight: normal;
56+
}
57+
58+
.js-training [data-js-training="blueviolet"] {
59+
background-color: blueviolet;
60+
}
61+
62+
.js-training #brown {
63+
background-color: brown;
64+
font-weight: normal;
65+
}
66+
67+
.js-training #darkorange {
68+
background-color: darkorange;
69+
font-weight: normal;
70+
}
71+
72+
.js-training .limegreen {
73+
background-color: limegreen;
74+
font-weight: normal;
75+
}
76+
77+
.js-training .mediumturquoise {
78+
background-color: mediumturquoise;
79+
font-weight: normal;
80+
}
81+
82+
.js-training p {
83+
margin: 0;
84+
padding: 0;
85+
background-color: cornflowerblue;
86+
font-weight: normal;
87+
}
88+
89+
.js-training [data-js-training="darkorchid"] {
90+
background-color: darkorchid;
91+
}
92+
93+
.js-training-trick {
94+
z-index: 1;
95+
position: absolute;
96+
top: 0;
97+
height: 40px;
98+
line-height: 40px;
99+
text-indent: 60%;
100+
}

test/stage3/tests.js

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
'use strict';
2+
3+
describe('ステージ3(意図した通りに DOM 要素の構造を変更できるようになる)', function(){
4+
describe('DOMインターフェース編', function() {
5+
it('1 番の要素から幽霊要素を除去する', function(){
6+
7+
// チュートリアル
8+
//
9+
// ここに以下のコードを記述してください。
10+
//
11+
// var element = document.querySelector('#firebrick');
12+
// var ghost = document.querySelector('.ghost');
13+
// element.removeChild(ghost);
14+
15+
16+
var firebrick = document.getElementById('firebrick');
17+
expect(firebrick.childNodes.length).to.equal(1);
18+
expect(firebrick).to.have.property('textContent', '1');
19+
});
20+
21+
22+
it('2 番の要素からインベーダー要素を除去する', function(){
23+
24+
// ここにコードを記述してください。
25+
26+
27+
var darkorange = document.getElementById('chocolate');
28+
expect(darkorange.childNodes.length).to.equal(1);
29+
expect(darkorange).to.have.property('textContent', '2');
30+
});
31+
32+
33+
it('3 番の要素の左右の幽霊要素をすべて除去する', function(){
34+
35+
// ここにコードを記述してください。
36+
37+
38+
var darkorange = document.querySelector('.mediumseagreen');
39+
expect(darkorange).to.have.property('textContent', '3\uD83C\uDF3F');
40+
});
41+
42+
43+
it('4 番の水色の要素の最後に要素を追加する', function(){
44+
var elementToAdd = document.createElement('span');
45+
elementToAdd.textContent = '\uD83D\uDC2C';
46+
47+
// 上の elementToAdd を追加するコードをここに記述してください。
48+
49+
50+
var turquoise = document.querySelector('.turquoise');
51+
expect(turquoise.childNodes.length).to.equal(2);
52+
expect(turquoise).to.have.deep.property('childNodes[0].textContent', '4');
53+
expect(turquoise).to.have.deep.property('childNodes[1]').equal(elementToAdd);
54+
});
55+
56+
57+
it('5 番の青色の要素の最初に要素を追加する', function(){
58+
var elementToAdd = document.createElement('span');
59+
elementToAdd.textContent = '\uD83D\uDC1F';
60+
61+
// 上の elementToAdd を追加するコードをここに記述してください。
62+
63+
64+
var blockquote = document.querySelector('blockquote');
65+
expect(blockquote.childNodes.length).to.equal(2);
66+
expect(blockquote).to.have.deep.property('childNodes[0]').equal(elementToAdd);
67+
expect(blockquote).to.have.deep.property('childNodes[1].textContent', '5');
68+
});
69+
});
70+
71+
72+
describe('jQuery 編', function() {
73+
it('6 番の要素から幽霊要素を除去する', function(){
74+
75+
// チュートリアル
76+
//
77+
// ここに以下のコードを記述してください。
78+
//
79+
// $('.brown-ghost').remove();
80+
81+
82+
var $brown = $('#brown');
83+
expect($brown.children()).to.have.length(0);
84+
expect($brown).to.have.text('6');
85+
});
86+
87+
88+
it('7 番の要素からインベーダー要素を除去する', function(){
89+
90+
// ここにコードを記述してください。
91+
92+
93+
// 参考情報
94+
// http://api.jquery.com/category/manipulation/
95+
96+
var $darkorange = $('#darkorange');
97+
expect($darkorange.children()).to.have.length(0);
98+
expect($darkorange).to.have.text('7');
99+
});
100+
101+
102+
it('8 番の要素の左右の幽霊要素をすべて除去する', function(){
103+
104+
// ここにコードを記述してください。
105+
106+
107+
var $limegreen = $('.limegreen');
108+
expect($limegreen).to.have.text('8\uD83C\uDF3F');
109+
});
110+
111+
112+
it('9 番の水色の要素の最後に要素を追加する', function(){
113+
var $elementToAdd = $('<span>\uD83D\uDC2C</span>');
114+
115+
// 上の $elementToAdd を追加するコードをここに記述してください。
116+
117+
118+
var $mediumturquoise = $('.mediumturquoise');
119+
expect($mediumturquoise.children()).to.have.length(1);
120+
expect($mediumturquoise).to.have.text('9\uD83D\uDC2C');
121+
});
122+
123+
124+
it('10 番の青色の要素の最初に要素を追加する', function(){
125+
var $elementToAdd = $('<span>\uD83D\uDC1F</span>');
126+
127+
// 上の $elementToAdd を追加するコードをここに記述してください。
128+
129+
130+
var $p = $('p');
131+
expect($p.children()).to.have.length(1);
132+
expect($p).to.have.text('\uD83D\uDC1F10');
133+
});
134+
});
135+
});

0 commit comments

Comments
 (0)