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
|
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
|
-
+
-
+
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
+
-
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
|
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);
//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"){
if (typeof dataToSend.IdAction === "undefined") {
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 });
document.dispatchEvent(eventGrammalecte);
return dataToSend.IdAction;
}
// ! 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) {
if (typeof tinyMCE !== "undefined" && tinyMCE.majorVersion && tinyMCE.majorVersion >= 3 && tinyMCE.majorVersion <= 5) {
//console.log("Have TinyMCE");
function TinyOnEditor(event, editor = null) {
let xEditorAdd = editor || event.editor;
if (typeof xEditorAdd.settings.Grammalecte === "undefined") {
let aBtn;
let plugSep;
let bIsAdded = false;
function addBtnTiny(bIsAdded, eBtn, iBtn, nBtn) {
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] === "") {
eBtn = m[1] + (parseInt(m[2]) - 1);
xEditorAdd.settings[eBtn] = (xEditorAdd.settings[eBtn] + ",Grammalecte").trim();
} else {
xEditorAdd.settings[eBtn] = "Grammalecte";
}
}
}
let bIsAdded = false;
if (tinyMCE.majorVersion >= 4) {
plugSep = " ";
aBtn = ["toolbar3", "toolbar2", "toolbar1", "toolbar"];
} else if (tinyMCE.majorVersion >= 3) {
plugSep = ",";
aBtn = ["theme_advanced_buttons3", "theme_advanced_buttons2", "theme_advanced_buttons1", "theme_advanced_buttons1_add_before"];
}
let iBtn = 0;
let nBtn = aBtn.length;
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] = (xEditorAdd.settings[eBtn] + plugSep + "Grammalecte").trim();
} else {
let m = /(.*)([0-9])/.exec(eBtn);
if (m.length === 3 && parseInt(m[2]) > 1 && xEditorAdd.settings[eBtn] === "") {
eBtn = m[1] + (parseInt(m[2]) - 1);
xEditorAdd.settings[eBtn] = (xEditorAdd.settings[eBtn] + plugSep + "Grammalecte").trim();
} else {
xEditorAdd.settings[eBtn] = "Grammalecte";
}
}
}
return bIsAdded;
}
iBtn++;
}
xEditorAdd.settings.Grammalecte = true;
let aBtn;
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"];
//xEditorAdd.settings.theme_advanced_buttons1_add_before = "Grammalecte";
}
let nBtn = aBtn.length;
for (let eBtn of aBtn) {
bIsAdded = addBtnTiny(bIsAdded, eBtn, iBtn, nBtn);
iBtn++;
}
xEditorAdd.addButton("Grammalecte", {
text: "",
icon: false,
image: browserURL +"img/logo-16.png",
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 )
//console.log( xEditorAdd.getContent() );
//console.log( xEditorAdd.getBody().innerText )
let sText = xEditorAdd.getBody().innerText;
let iframeElement;
if (typeof xEditorAdd.iframeElement !== "undefined" && typeof xEditorAdd.iframeElement.id !== "undefined") {
iframeElement = xEditorAdd.iframeElement.id;
} else if (typeof xEditorAdd.editorId !== "undefined") {
iframeElement = xEditorAdd.editorId + "_ifr";
}
sendToGrammalecte({ spellcheck: sText });
sendToGrammalecte({ spellcheck: sText, iframe: iframeElement });
}
});
};
if (tinymce.majorVersion >= 4) {
tinymce.on("AddEditor", TinyOnEditor);
} else if (tinymce.majorVersion >= 3) {
tinymce.onAddEditor.add(TinyOnEditor);
}
if (tinyMCE.majorVersion >= 4) {
tinyMCE.on("AddEditor", TinyOnEditor);
} 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) {
tinymce.execCommand("mceRemoveEditor", true, idTiny);
tinymce.execCommand("mceAddEditor", true, idTiny);
} else if (tinymce.majorVersion >= 3) {
tinymce.execCommand("mceRemoveControl", true, idTiny);
tinymce.execCommand("mceAddControl", true, idTiny);
for (var i = tinyMCE.editors.length - 1; i > -1; i--) {
let idTiny = tinyMCE.editors[i].id;
if (tinyMCE.majorVersion >= 4) {
tinyMCE.execCommand("mceRemoveEditor", true, idTiny);
tinyMCE.execCommand("mceAddEditor", true, idTiny);
} else if (tinyMCE.majorVersion >= 3) {
//tinyMCE.editors[i].onInit.add(TinyOnEditor);
tinyMCE.execCommand("mceRemoveControl", true, idTiny);
tinyMCE.execCommand("mceAddControl", true, idTiny);
}
//tinymce.settings = old_global_settings;
//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
|