-
Notifications
You must be signed in to change notification settings - Fork 1
/
MMM-MD.js
168 lines (138 loc) · 4.51 KB
/
MMM-MD.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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*
@author: Andrea Grandieri [email protected]
*/
// Posizione consigliata: "center"
// Funzioni
// - Lettura contenuto "file"
// - Trasformazione contenuto MD in HTML
// - Applicazione contenuto HTML in "drop" (elemento HTML)
function makeEverything(file, drop) {
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function () {
if (rawFile.readyState === 4) {
if (rawFile.status === 200 || rawFile.status == 0) {
var converter = new showdown.Converter();
var allText = rawFile.responseText;
var html = converter.makeHtml(allText);
drop.innerHTML = html;
}
}
};
rawFile.send(null);
}
Module.register("MMM-MD", {
// Default module config.
defaults: {
// Velocità di scorrimento (ms)
// Min interval: 45ms
// Ideal (default) interval: 50ms
// Max interval: +INFms
interval: 50,
// Tempo di stalo prima (ms) che l'autoscroll,
// una volta raggiunto il limite verso il basso,
// ricominci il processo di scorrimento
// dall'inizio (limite verso l'alto)
// Min interval: 0ms
// Ideal (default) interval: 100ms
// Max interval: +INFms
staller: 100,
// Width (larghezza) del box del modulo
width: "calc(100 % - 25 %)",
// Height (altezza) del box del modulo
height: "500px",
// Nome del documento contenente il contenuto
// MD da convertire in HTML (compresa l'estensione)
// IL DOCUMENTO DEVE ESSERE LOCALIZZATO ALL'INTERNO
// DELLA DIR: "modules/MMM-MD/public/"
docname: "content.md"
},
/*
getScripts: function () {
// Caricamento libreria da cdn (cdnjs.cloudflare.com)
return ["https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.0/showdown.min.js"];
},
*/
getScripts: function () {
// Caricamento libreria da locale
return ["modules/MMM-MD/lib/showdownjs/dist/showdown.min.js"];
},
// Override dom generator.
getDom: function () {
// Controlli sulla configurazione
// "this.config.interval"
var checkStatus = false;
if (typeof (this.config.interval) === "number") {
if (this.config.interval >= 45) {
checkStatus = true;
}
}
if (!checkStatus) {
this.config.interval = 50;
}
// Controlli sulla configurazione
// "this.config.staller"
checkStatus = false;
if (typeof (this.config.staller) === "number") {
if (this.config.staller >= 0) {
checkStatus = true;
}
}
if (!checkStatus) {
this.config.staller = 100;
}
// "this.config.width"
// "this.config.height"
// Data la presenza di stringhe, è fondamentalmente
// impossibile controllare l'esetta correttezza degli input;
// risulta molto prossimo al futile. Per parametri sbagliati,
// il riscontro sarà il semplice non-rendering del modulo.
// "this.config.docname"
// Data la presenza di stringhe, è fondamentalmente
// impossibile controllare l'esetta correttezza degli input;
// risulta molto prossimo al futile. Per parametri sbagliati,
// il riscontro sarà il riscontro di errori nella localizzazione,
// lettura, conversione [...] dei contenuti del documento.
// content
var wrapper = document.createElement("div");
// container
var bigWrapper = document.createElement("div");
// Applicazione attributi
wrapper.setAttribute("class", "content");
bigWrapper.setAttribute("class", "container");
bigWrapper.setAttribute("id", "autoScroll");
// Composizione stringa "style" (Template Literals not available)
var strStyle = "display:inline-block; width:";
strStyle += this.config.width + "; margin:0 auto; height:";
strStyle += this.config.height + "; overflow:hidden;";
bigWrapper.setAttribute("style", strStyle);
// Applicazione parentele
bigWrapper.appendChild(wrapper);
var doc = "modules/MMM-MD/public/";
doc += this.config.docname;
makeEverything(doc, wrapper);
// Scroll automatico up-down per gestire overflow
// del contenuto in altezza (height) (*)
var i = 0;
var maxima = null;
var staller = this.config.staller;
// Schedulamento funzione (*)
window.setInterval(function () {
// Valore massimo che può assumere "bigWrapper.scrollTop"
maxima = bigWrapper.scrollHeight - $(bigWrapper).outerHeight() + staller;
// E' ancora possibile scorrere verso il basso
if (i < maxima) {
// SCROLL THE ELEMENT TO THE SCROLL VALUE WITH A SMOOTH BEHAVIOR
bigWrapper.scrollTo({ top: i, behavior: 'smooth' });
} else {
// Scorrimento massimo raggiunto. Ricomincio
// dall'inizio dall'alto
i = 0;
bigWrapper.scrollTop = i;
}
// Incremento indice di scorrimento
i++;
}, this.config.interval);
return bigWrapper;
}
});