-
Notifications
You must be signed in to change notification settings - Fork 0
/
code.js
147 lines (113 loc) · 4.47 KB
/
code.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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//funzione che scrolla ll'ultimo giorno del diario
function scroll_down(){
//prende l'ultimo elemento dei div filgi di box
var last_index = (document.getElementById("box").getElementsByTagName('div').length-1);
var x = document.getElementById("box").getElementsByTagName('div')[last_index];
//scrolla all'elemento x
x.scrollIntoView();
}
//funzione che scrolla ll'ultimo giorno del diario
function scroll_up(){
//prende l'ultimo elemento dei div filgi di box
var x = document.getElementById("box").getElementsByTagName('div')[0];
//scrolla all'elemento x
x.scrollIntoView();
}
// questa funzione serve per ordinare l'array che ritorna la
// chiamata AJAX all'API di GitHub.
// Ordina i record in modo crescente in base al numero del giorno
// Ogni elemento ha l'attributo nome fatto come segue:
// Giorno 23.md
function compare(a, b) {
// prendo il numero del giorno del primo operando
var nome_a = a['name']
nome_a = nome_a.substring(7, nome_a.lastIndexOf('.'));
// prendo il numero del giorno del secondo operando
var nome_b = b['name'];
nome_b = nome_b.substring(7, nome_b.lastIndexOf('.'));
// li converto ad intero per il confronto
var intA = parseInt(nome_a);
var intB = parseInt(nome_b);
//console.log('a ' + nome_a);
//console.log('b ' + nome_b);
// viene eseguito il confronto
if (intA < intB) {
return -1;
}
if (intA > intB) {
return 1;
}
return 0;
}
// sostituisce il nome dell'emoji con la rispettiva emoji
function renderEmoji(text) {
var result;
result = text.replace(/:wolf:/g, "🐺") // lupo
.replace(/:heart:/g, "🧡") // cuore
.replace(/:dragon:/g, "🐉") // drago
.replace(/:skull_and_crossbones:/g, "💀") // teschio e spade
.replace(/:evergreen_tree:/g, "🌲") // sempreverde
.replace(/:astonished:/g, "😲") // sbalordito
;
return result;
}
// converte il Markdown in HTML e lo aggiunge al corpo
function writeMarkdown(text) {
// crea l'oggetto per il rendering e converte il Markdown
var md = window.markdownit();
var result = md.render(text);
// elimina l'escaping dei br
result = result.replace(/<br>/g, "<br>");
// renderizza le emoki
result = renderEmoji(result);
// aggiunge un nuovo div con il contenuto
var tmp = document.createElement('div');
tmp.innerHTML = result;
document.getElementById("box").appendChild(tmp);
document.getElementById("box").appendChild(document.createElement('hr'));
}
// prende il contenuto del file che gli viene passato
// e chiama la funzione per scriverlo in MD
function getMdFromUrl(url) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// scrive il contenuto nel body convertendolo da MD ad HTML
writeMarkdown(this.responseText);
}
};
xhttp.open("GET", url, false); // questa chiamata non e' asincrona perche'
xhttp.send(); // potrebbe rovinare l'ordine di visualizzazione
}
// converte la stringa JSON contenente tutti i file della cartella
// in un array e avvia la procedura lettura del file e parsing
function parseResponse(risposta) {
// decodifica il JSON
var parsedData = JSON.parse(risposta);
// ordina l'array in base al nome del file
parsedData.sort(compare);
//console.log(parsedData);
// avvia la procedura di parsing per ogni elemento
parsedData.forEach(element => {
//console.log(element['name']);
//console.log(element['download_url']);
getMdFromUrl(element['download_url']);
});
}
// prende il contenuto della cartella pagine della repo di GitHub
// ed avvia la procedura di conversione e parsing MD
function callGitHubAPI() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// converte la stringa JSON in array e converte ed effettua il parsing da MD ad HTML
// per ogni file
parseResponse(this.responseText);
}
};
xhttp.open("GET", "https://api.github.com/repos/Typing-Monkeys/Il-Magico-Viaggio-di-Franchino/contents/pagine?ref=main", true);
xhttp.send();
}
// funzione per avviare tutta la procedura
var populate = function() {callGitHubAPI()};
// wolf face 🐺