-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchallenge-29.js
More file actions
155 lines (126 loc) · 3.84 KB
/
challenge-29.js
File metadata and controls
155 lines (126 loc) · 3.84 KB
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
Vamos estruturar um pequeno app utilizando módulos.
Nosso APP vai ser um cadastro de carros. Vamos fazê-lo por partes.
A primeira etapa vai ser o cadastro de veículos, de deverá funcionar da
seguinte forma:
- No início do arquivo, deverá ter as informações da sua empresa - nome e
telefone (já vamos ver como isso vai ser feito)
- Ao abrir a tela, ainda não teremos carros cadastrados. Então deverá ter
um formulário para cadastro do carro, com os seguintes campos:
- Imagem do carro (deverá aceitar uma URL)
- Marca / Modelo
- Ano
- Placa
- Cor
- e um botão "Cadastrar"
Logo abaixo do formulário, deverá ter uma tabela que irá mostrar todos os
carros cadastrados. Ao clicar no botão de cadastrar, o novo carro deverá
aparecer no final da tabela.
Agora você precisa dar um nome para o seu app. Imagine que ele seja uma
empresa que vende carros. Esse nosso app será só um catálogo, por enquanto.
Dê um nome para a empresa e um telefone fictício, preechendo essas informações
no arquivo company.json que já está criado.
Essas informações devem ser adicionadas no HTML via Ajax.
Parte técnica:
Separe o nosso módulo de DOM criado nas últimas aulas em
um arquivo DOM.js.
E aqui nesse arquivo, faça a lógica para cadastrar os carros, em um módulo
que será nomeado de "app".
*/
(function( win, DOM ) {
'use strict';
// Variables
var ajax = new XMLHttpRequest();
var Element = {
FORM: DOM('[data-form="add-car"]'),
WRAPPER_LIST_CARD: DOM('[data-wrapper-list="cars"]').get()
};
var Cache = {
company: null
};
// Events
Element.FORM.on('submit', addCar);
// Methods
function addCar( event ) {
event.preventDefault();
var $form = event.target;
var data = getFormData( $form );
showNewCar( data );
resetForm( $form );
}
function getFormData( $form ) {
var $inputs = $form.querySelectorAll('[data-input]');
var contract = {
year: 'year',
image: 'image',
brand: 'brand',
plate: 'plate',
color: 'color'
};
var data = {};
$inputs.forEach(function($input) {
var dataAtrributeName = $input.dataset.input;
if( contract[ dataAtrributeName ] ) {
data[ contract[ dataAtrributeName ] ] = $input.value;
}
});
return data;
}
function showNewCar( data ) {
var $template = getTemplateCar( data );
Element.WRAPPER_LIST_CARD.insertAdjacentHTML( 'beforeend', $template );
}
function getTemplateCar( data ) {
var $template = '';
$template += '<tr>';
$template += '<td> <img src="' + data.image + '" /></td>';
$template += '<td> ' + data.brand + ' </td>';
$template += '<td> ' + data.year + ' </td>';
$template += '<td> ' + data.plate + ' </td>';
$template += '<td> ' + data.color + ' </td>';
$template += '</tr>';
return $template;
}
function resetForm( $form ) {
$form.reset();
}
function init() {
requestCompanyInfo();
}
function showCompanyInfo() {
showCompany('name');
showCompany('phone');
}
function showCompany( prop ) {
var $company = DOM('[data-company="' + prop + '"]');
$company.forEach(function($item) {
$item.textContent = Cache.company[prop];
});
}
function isCompanyDataValid( item ) {
return infoCompanyValid[ item ];
}
function requestCompanyInfo() {
ajax.open('GET', './company.json', true);
ajax.send();
ajax.addEventListener('readystatechange' , readyStateChange, false);
}
function readyStateChange() {
if ( isRequestSuccess() ) {
saveCacheCompany( ajax.responseText );
showCompanyInfo();
}
}
function isRequestSuccess() {
return ajax.readyState === 4 && ajax.status === 200;
}
function saveCacheCompany( data ) {
Cache.company = JSON.parse( data );
}
// Public Api
win.app = {
init: init
};
// Start app
win.app.init();
})( window, DOM );