-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathassessment.js
127 lines (109 loc) · 5.95 KB
/
assessment.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
'use strict';
const userNameInput = document.getElementById('user-name');
const assessmentButton = document.getElementById('assessment');
const resultDivided = document.getElementById('result-area');
const tweetDivided = document.getElementById('tweet-area');
assessmentButton.onclick = () => {
const userName = userNameInput.value;
if (userName.length === 0) {
// 名前が空の時は処理を終了する
return;
}
// 診断結果表示エリアの作成
resultDivided.innerText = '';
// headerDividedの作成
const headerDivided = document.createElement('div');
headerDivided.setAttribute('class','card-header');
headerDivided.innerText = '診断結果';
// bodyDividedの作成
const bodyDivided = document.createElement('div');
bodyDivided.setAttribute('class','card-body');
const paragraph = document.createElement('p');
paragraph.setAttribute('class','card-text');
const result = assessment(userName);
paragraph.innerText = result;
bodyDivided.appendChild(paragraph);
// resultDividedにBootstrapスタイルを適用する
resultDivided.setAttribute('class','card');
resultDivided.setAttribute('style','max-width: 700px;')
// headerDivided と bodyDivided を resultDivided に差し込む
resultDivided.appendChild(headerDivided);
resultDivided.appendChild(bodyDivided);
// ツイートエリアの作成
tweetDivided.innerText = '';
const anchor = document.createElement('a');
const hrefValue =
'https://twitter.com/intent/tweet?button_hashtag=' +
encodeURIComponent('あなたのいいところ') +
'&ref_src=twsrc%5Etfw';
anchor.setAttribute('href',hrefValue);
anchor.setAttribute('class','twitter-hashtag-button');
anchor.setAttribute('data-text',result);
anchor.innerText = 'Tweet #あなたのいいところ';
tweetDivided.appendChild(anchor);
// widgets,jsの設定
const script = document.createElement('script');
script.setAttribute('src','https://platform.twitter.com/widgets.js');
tweetDivided.appendChild(script);
}
userNameInput.onkeydown = event => {
if (event.key === 'Enter') {
assessmentButton.onclick();
}
};
const answers = [
'{userName}のいいところは声です。{userName}の特徴的な声は皆を惹きつけ、心に残ります。',
'{userName}のいいところはまなざしです。{userName}に見つめられた人は、気になって仕方がないでしょう。',
'{userName}のいいところは情熱です。{userName}の情熱に周りの人は感化されます。',
'{userName}のいいところは厳しさです。{userName}の厳しさがものごとをいつも成功に導きます。',
'{userName}のいいところは知識です。博識な{userName}を多くの人が頼りにしています。',
'{userName}のいいところはユニークさです。{userName}だけのその特徴が皆を楽しくさせます。',
'{userName}のいいところは用心深さです。{userName}の洞察に、多くの人が助けられます。',
'{userName}のいいところは見た目です。内側から溢れ出る{userName}の良さに皆が気を惹かれます。',
'{userName}のいいところは決断力です。{userName}がする決断にいつも助けられる人がいます。',
'{userName}のいいところは思いやりです。{userName}に気をかけてもらった多くの人が感謝しています。',
'{userName}のいいところは感受性です。{userName}が感じたことに皆が共感し、わかりあうことができます。',
'{userName}のいいところは節度です。強引すぎない{userName}の考えに皆が感謝しています。',
'{userName}のいいところは好奇心です。新しいことに向かっていく{userName}の心構えが多くの人に魅力的に映ります。',
'{userName}のいいところは気配りです。{userName}の配慮が多くの人を救っています。',
'{userName}のいいところはその全てです。ありのままの{userName}自身がいいところなのです。',
'{userName}のいいところは自制心です。やばいと思ったときにしっかりと衝動を抑えられる{userName}が皆から評価されています。',
'{userName}のいいところは優しさです。{userName}の優しい雰囲気や立ち振る舞いに多くの人が癒やされています。'
'{userName}のいいところは行動力です。{userName}の積極的に動いてたくさんの経験をしているところに多くの人が感化されます。'
];
/**
* 名前の文字列を渡すと診断結果を返す関数
* @param {string} userName userName ユーザの名前
* @return {string} 診断結果
*/
function assessment(userName) {
// 全文字のコード番号を取得してそれを足し合わせる
let sumOfCharCode = 0;
for (let i = 0; i < userName.length; i++) {
sumOfCharCode = sumOfCharCode + userName.charCodeAt(i);
}
// 文字のコード番号の合計を回答の数で割って添字の数値を求める
const index = sumOfCharCode % answers.length;
let result = answers[index];
result = result.replaceAll('{userName}', userName);
return result;
}
// テストコード
// console.assert(
// assessment('みずき') === 'みずきのいいところは厳しさです。みずきの厳しさがものごとをいつも成功に導きます。',
// '診断結果を返す関数が正しくありません'
// );
// console.assert(
// assessment('まりも') === assessment('まりも'),
// '同じ名前を入れたのに違う結果が返ってます'
// );
console.assert(
assessment('太郎') ===
'太郎のいいところは決断力です。太郎がする決断にいつも助けられる人がいます。',
'診断結果の文言の特定の部分を名前に置き換える処理が正しくありません。'
);
console.assert(
assessment('太郎') ===
assessment('太郎'),
'入力が同じなら、同じ診断結果を出す処理が正しくありません。'
);