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
|
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
|
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
+
-
-
+
+
+
+
-
+
-
-
-
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
-
-
-
-
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
-
+
-
+
-
+
-
+
+
|
var min = Math.ceil(0);
var max = Math.floor(9999999);
function uniqueID() {
return (Date.now()).toString(36) + '-' + (Math.floor(Math.random() * (max - min)) + min).toString(36);
return Date.now().toString(36) + "-" + (Math.floor(Math.random() * (max - min)) + min).toString(36);
}
// ! Ecoute des messages venant du content script
let browserURL;
document.addEventListener("GrammalecteToPage", function respListener(event) {
var data = event.detail;
// Message envoyer dès que le script est injecté
if (typeof data.init !== "undefined") {
browserURL = data.init;
}
console.log("GrammalecteToPage",data);
});
// ! Permet d'envoyer des message vers le content script
// Retourne un identifiant unique au cas ou si besoin
// La ID unique peut être util si on permet d'intérogé grammalecte sans zone
function sendToGrammalecte(dataAction) {
let dataToSend = dataAction;
if (typeof dataToSend.IdAction === "undefined"){
dataToSend.IdAction = uniqueID();
if (dataAction.elm){
if (!dataAction.elm.id){
dataToSend.IdAction = uniqueID();
}
if (dataAction.elm) {
if (!dataAction.elm.id) {
dataAction.elm.id = uniqueID();
}
dataToSend.elm = dataAction.elm.id;
}
//console.log('dataToSend', dataToSend);
var eventGrammalecte = new CustomEvent('GrammalecteEvent', {"detail":dataToSend});
var eventGrammalecte = new CustomEvent("GrammalecteEvent", { detail: dataToSend });
document.dispatchEvent(eventGrammalecte);
return dataToSend.IdAction;
}
// On informe la page qu'il y a Grammalecte ;)
var customAPILoaded = new CustomEvent('GrammalecteIsLoaded');
// ! Envoie de l'information que l'injection est bien faite ;)
// (peut être lu aussi bien par la page web que le content script)
var customAPILoaded = new CustomEvent("GrammalecteIsLoaded");
document.dispatchEvent(customAPILoaded);
// Gros Hack : Auto add a button in tinymce ;)
// Page to test v4 https://www.quackit.com/html/html_editors/tinymce_editor.cfm
// Page to test v3 http://www.imathas.com/editordemo/demo.html
if (typeof tinymce !== "undefined" && tinymce.majorVersion && tinymce.majorVersion >= 3 && tinymce.majorVersion <= 5) {
//console.log("Have TinyMCE");
let TinyOnEditor = function(event, editor = null) {
function TinyOnEditor(event, editor = null) {
let xEditorAdd = editor || event.editor;
let bIsAdded = false;
if (tinymce.majorVersion >= 4) {
let aBtn = ["toolbar3", "toolbar2", "toolbar1", "toolbar"];
let nBtn = aBtn.length;
let iBtn = 0;
function addBtnTiny(bIsAdded, eBtn, iBtn, nBtn) {
for (let eBtn of aBtn) {
if (!bIsAdded && (typeof xEditorAdd.settings[eBtn] !== "undefined" || iBtn == nBtn)) {
bIsAdded = true;
if (typeof xEditorAdd.settings[eBtn] !== "undefined") {
xEditorAdd.settings[eBtn] = (xEditorAdd.settings[eBtn] + " Grammalecte").trim();
} else {
xEditorAdd.settings[eBtn] = "Grammalecte";
if (!bIsAdded && (typeof xEditorAdd.settings[eBtn] !== "undefined" || iBtn == nBtn)) {
bIsAdded = true;
if (typeof xEditorAdd.settings[eBtn] !== "undefined" && xEditorAdd.settings[eBtn] !== "") {
xEditorAdd.settings[eBtn] = (xEditorAdd.settings[eBtn] + ",Grammalecte").trim();
} else {
let m = /(.*)([0-9])/.exec(eBtn);
if (m.length === 3 && parseInt(m[2]) > 1 && xEditorAdd.settings[eBtn] === "") {
}
}
iBtn++;
}
} else if (tinymce.majorVersion >= 3) {
let aBtn = ["theme_advanced_buttons3", "theme_advanced_buttons2", "theme_advanced_buttons1"];
let nBtn = aBtn.length;
let iBtn = 0;
eBtn = m[1] + (parseInt(m[2]) - 1);
for (let eBtn of aBtn) {
if (!bIsAdded && (typeof xEditorAdd.settings[eBtn] !== "undefined" || iBtn == nBtn)) {
bIsAdded = true;
if (typeof xEditorAdd.settings[eBtn] !== "undefined") {
xEditorAdd.settings[eBtn] = (xEditorAdd.settings[eBtn] + ",Grammalecte").trim();
} else {
xEditorAdd.settings[eBtn] = "Grammalecte";
}
}
}
return bIsAdded;
}
let aBtn;
iBtn++;
}
let iBtn = 0;
if (tinymce.majorVersion >= 4) {
aBtn = ["toolbar3", "toolbar2", "toolbar1", "toolbar"];
} else if (tinymce.majorVersion >= 3) {
aBtn = ["theme_advanced_buttons3", "theme_advanced_buttons2", "theme_advanced_buttons1"];
}
let nBtn = aBtn.length;
for (let eBtn of aBtn) {
bIsAdded = addBtnTiny(bIsAdded, eBtn, iBtn, nBtn);
iBtn++;
}
xEditorAdd.addButton("Grammalecte", {
text: "",
icon: false,
image:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAC8UlEQVQ4jX3TbUgTcRwH8P89ddu5u9tt082aZmpFEU4tFz0QGTUwCi0heniR9MSUIKRaD0RvIlKigsooo+iNFa0XJYuwIjEK19OcDtPElsG0ktyp591t7u7+vUh7MPX3+vf5/n8/+P0BmKJIPUUVlh2rdVVeesWlzEybqg+bFOsoylnqPmNavGFfknV2Omu2Lvja3vxAURKJib3opHizu8riLK6gjRyuKgmoSoMRFENRUqfXTzvBGK62LC2uoFkOl4RhjQ8+qWt7dPNE3sbdp+2LXbsGe9qb4rIo/BfwFy6nWQ4ThWGNDzbcfu29dMDh2nHU7CypYNLmzTda0/L5cNuzmDQi/A4Y27k6eQxLI79wS/11D0AAMNvs6XT6ojVJjJEgTbMy2BT77xBMp09KcpaWV1uc41jQoi0NdUHfjeOO9WWn7AVF7s7n986SithPJGeupBh2PCSP/xxqxAp3eq6wuUV7Wc6MSZIEhA8vHjbfOe/OcW3zmAuKy+nUzAyD2bow8ODaEROFq8AyZ5WBYdEZXGqGxZ61HJV+9HYCJRbTNA0QBA40HWunaKN5dKg/DBKxeCIe09Th/m4MJwiMSZmLEzMQAABQRuNqgu8NYX3doTcMpvCkLbtQZ2AJkrPOZG1zlnY13T+Hy9EehY90h57eqcorcZ/lctZuMzAsOjLEqwNv66/6vZcPYRBC+C3cGaBxhSet2av1BpYgTTY7k5y2JPT41slIR6Axv8R9nnOs+4Pf+2r992uOxGVJwgAAAEINfgt3BGgsESWtWas1iGDyl+CT/u7WpvxNFRc4x7qtBoZFhSFejb7z1fq9NYfjsiT+cwcQavBruCOgU4SIGo18amuoq3Js3FNlynVtH385+s53ze+t8cRkURx3yMTTRBAEQVAUXbFlf3XystJKA2NExeFBdWASDAAA+MQACCEEmqbJ0b6PMC7JwhDU8YFHV5u9NZ64LErT/oW/63tPV6uJwmKoOND78u7Fg5NhAAD4CVbzY9cwrWQrAAAAAElFTkSuQmCC",
image: browserURL +"img/logo-16.png",
//"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAC8UlEQVQ4jX3TbUgTcRwH8P89ddu5u9tt082aZmpFEU4tFz0QGTUwCi0heniR9MSUIKRaD0RvIlKigsooo+iNFa0XJYuwIjEK19OcDtPElsG0ktyp591t7u7+vUh7MPX3+vf5/n8/+P0BmKJIPUUVlh2rdVVeesWlzEybqg+bFOsoylnqPmNavGFfknV2Omu2Lvja3vxAURKJib3opHizu8riLK6gjRyuKgmoSoMRFENRUqfXTzvBGK62LC2uoFkOl4RhjQ8+qWt7dPNE3sbdp+2LXbsGe9qb4rIo/BfwFy6nWQ4ThWGNDzbcfu29dMDh2nHU7CypYNLmzTda0/L5cNuzmDQi/A4Y27k6eQxLI79wS/11D0AAMNvs6XT6ojVJjJEgTbMy2BT77xBMp09KcpaWV1uc41jQoi0NdUHfjeOO9WWn7AVF7s7n986SithPJGeupBh2PCSP/xxqxAp3eq6wuUV7Wc6MSZIEhA8vHjbfOe/OcW3zmAuKy+nUzAyD2bow8ODaEROFq8AyZ5WBYdEZXGqGxZ61HJV+9HYCJRbTNA0QBA40HWunaKN5dKg/DBKxeCIe09Th/m4MJwiMSZmLEzMQAABQRuNqgu8NYX3doTcMpvCkLbtQZ2AJkrPOZG1zlnY13T+Hy9EehY90h57eqcorcZ/lctZuMzAsOjLEqwNv66/6vZcPYRBC+C3cGaBxhSet2av1BpYgTTY7k5y2JPT41slIR6Axv8R9nnOs+4Pf+2r992uOxGVJwgAAAEINfgt3BGgsESWtWas1iGDyl+CT/u7WpvxNFRc4x7qtBoZFhSFejb7z1fq9NYfjsiT+cwcQavBruCOgU4SIGo18amuoq3Js3FNlynVtH385+s53ze+t8cRkURx3yMTTRBAEQVAUXbFlf3XystJKA2NExeFBdWASDAAA+MQACCEEmqbJ0b6PMC7JwhDU8YFHV5u9NZ64LErT/oW/63tPV6uJwmKoOND78u7Fg5NhAAD4CVbzY9cwrWQrAAAAAElFTkSuQmCC",
onclick: function(e) {
//console.log( editorAdd.getContent() );
//console.log( editorAdd.getBody().innerText )
let sText = xEditorAdd.getBody().innerText;
sendToGrammalecte({ spellcheck: sText });
}
});
};
if ( tinymce.majorVersion >= 4 ){
if (tinymce.majorVersion >= 4) {
tinymce.on("AddEditor", TinyOnEditor);
} else if ( tinymce.majorVersion >= 3 ){
} else if (tinymce.majorVersion >= 3) {
tinymce.onAddEditor.add(TinyOnEditor);
}
for (var i = tinymce.editors.length - 1; i > -1; i--) {
let idTiny = tinymce.editors[i].id;
if ( tinymce.majorVersion >= 4 ){
if (tinymce.majorVersion >= 4) {
tinymce.execCommand("mceRemoveEditor", true, idTiny);
tinymce.execCommand("mceAddEditor", true, idTiny);
} else if ( tinymce.majorVersion >= 3 ){
} else if (tinymce.majorVersion >= 3) {
tinymce.execCommand("mceRemoveControl", true, idTiny);
tinymce.execCommand("mceAddControl", true, idTiny);
}
//tinymce.settings = old_global_settings;
}
}
/* // ! In the webpage script :
document.addEventListener('GrammalecteIsLoaded', function() {
// Le gestionnaire d'évènement est prêt!
// La page web peut effectuer des actions
|