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
|
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
|
+
+
+
+
+
+
-
-
+
+
-
-
+
-
-
-
+
+
+
-
+
-
-
+
+
-
-
-
+
+
+
-
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
+
-
-
-
+
+
-
+
-
+
-
+
-
-
+
-
+
-
+
-
+
-
-
-
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
+
-
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
|
// Injected script into web page
"use strict";
function uniqueID () {
var min = Math.ceil(0);
var max = Math.floor(9999999);
let nMin = Math.ceil(0);
let nMax = 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() * (nMax - nMin)) + nMin).toString(36);
}
// ! Ecoute des messages venant du content script
let browserURL;
document.addEventListener("GrammalecteToPage", function respListener(event) {
// ! Ecoute des messages venant du content-script
let sBrowserURL;
document.addEventListener("GrammalecteToPage", function respListener (event) {
//console.log(event);
var data = JSON.parse(event.detail);
let oData = JSON.parse(event.detail);
// Message envoyer dès que le script est injecté
if (typeof data.init !== "undefined") {
browserURL = data.init;
if (typeof oData.init !== "undefined") {
sBrowserURL = oData.init;
}
if (typeof data.tiny !== "undefined") {
//console.log('Detect Tiny', data.tiny);
TinyIDInPage(data.tiny);
if (typeof oData.tiny !== "undefined") {
//console.log('Detect Tiny', oData.tiny);
TinyIDInPage(oData.tiny);
}
//console.log("GrammalecteToPage",data);
//console.log("GrammalecteToPage", oData);
});
// ! 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();
function sendToGrammalecte (oDataAction) {
let oDataToSend = oDataAction;
if (typeof oDataToSend.sActionId === "undefined") {
oDataToSend.sActionId = uniqueID();
}
if (dataAction.elm) {
if (!dataAction.elm.id) {
dataAction.elm.id = uniqueID();
if (oDataAction.elm) {
if (!oDataAction.elm.id) {
oDataAction.elm.id = uniqueID();
}
dataToSend.elm = dataAction.elm.id;
oDataToSend.elm = oDataAction.elm.id;
}
//console.log('dataToSend', dataToSend);
var eventGrammalecte = new CustomEvent("GrammalecteEvent", { detail: JSON.stringify(dataToSend) });
//console.log('oDataToSend', oDataToSend);
let eventGrammalecte = new CustomEvent("GrammalecteEvent", { detail: JSON.stringify(oDataToSend) });
document.dispatchEvent(eventGrammalecte);
return dataToSend.IdAction;
return oDataToSend.sActionId;
}
// ! Envoie de l'information que l'injection est bien faite ;)
// ! 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("GLInjectedScriptIsReady");
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
// https://www.responsivefilemanager.com/demo.php
// Page to test v3 http://www.imathas.com/editordemo/demo.html
function TinyOnEditor(event, editor = null) {
function TinyOnEditor (event, editor=null) {
let xEditorAdd = editor || event.editor;
//console.log(xEditorAdd);
if (typeof xEditorAdd.settings.Grammalecte === "undefined") {
let aBtn;
let plugSep;
let cPlugSep;
let bIsAdded = false;
if (tinyMCE.majorVersion >= 4) {
plugSep = " ";
cPlugSep = " ";
aBtn = ["toolbar3", "toolbar2", "toolbar1", "toolbar"];
} else if (tinyMCE.majorVersion >= 3) {
plugSep = ",";
cPlugSep = ",";
aBtn = ["theme_advanced_buttons3", "theme_advanced_buttons2", "theme_advanced_buttons1", "theme_advanced_buttons1_add_before"];
}
let eBtn;
let sBtn;
let iBtn = 0;
let nBtn = aBtn.length;
for (eBtn of aBtn) {
if (!bIsAdded && (typeof xEditorAdd.settings[eBtn] !== "undefined" || iBtn == nBtn)) {
for (sBtn of aBtn) {
if (!bIsAdded && (typeof xEditorAdd.settings[sBtn] !== "undefined" || iBtn == aBtn.length)) {
bIsAdded = true;
if (typeof xEditorAdd.settings[eBtn] !== "undefined" && xEditorAdd.settings[eBtn] !== "") {
xEditorAdd.settings[eBtn] = (xEditorAdd.settings[eBtn] + plugSep + "Grammalecte").trim();
if (typeof xEditorAdd.settings[sBtn] !== "undefined" && xEditorAdd.settings[sBtn] !== "") {
xEditorAdd.settings[sBtn] = (xEditorAdd.settings[sBtn] + cPlugSep + "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();
let m = /(.*)([0-9])/.exec(sBtn);
if (m.length === 3 && parseInt(m[2]) > 1 && xEditorAdd.settings[sBtn] === "") {
sBtn = m[1] + (parseInt(m[2]) - 1);
xEditorAdd.settings[sBtn] = (xEditorAdd.settings[sBtn] + cPlugSep + "Grammalecte").trim();
} else {
xEditorAdd.settings[eBtn] = "Grammalecte";
xEditorAdd.settings[sBtn] = "Grammalecte";
}
}
}
iBtn++;
}
if (!bIsAdded) {
//Valeur par defaut
xEditorAdd.settings[eBtn] =
xEditorAdd.settings[sBtn] =
"undo redo | styleselect | bold italic | alignleft" +
" aligncenter alignright alignjustify | " +
" bullist numlist outdent indent | link image" +
" Grammalecte";
}
xEditorAdd.settings["Grammalecte"] = true;
}
xEditorAdd.addButton("Grammalecte", {
text: "",
icon: false,
image: browserURL + "img/logo-16.png",
image: sBrowserURL + "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( xEditorAdd.getContent() );
//console.log( xEditorAdd.getBody().innerText )
onclick: function (e) {
//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({ sTextToParse: sText, iframe: iframeElement });
}
});
}
function TinyInPage() {
for (var i = tinyMCE.editors.length - 1; i > -1; i--) {
let idTiny = tinyMCE.editors[i].id;
function TinyInPage () {
for (let i = tinyMCE.editors.length - 1; i > -1; i--) {
let sTinyId = tinyMCE.editors[i].id;
if (typeof tinyMCE.editors[i].settings.Grammalecte === "undefined") {
TinyIDInPage(idTiny);
TinyIDInPage(sTinyId);
}
}
}
function TinyIDInPage(idTiny) {
function TinyIDInPage (sTinyId) {
if (tinyMCE.majorVersion >= 4) {
tinyMCE.EditorManager.execCommand("mceFocus", true, idTiny);
tinyMCE.EditorManager.execCommand("mceRemoveEditor", true, idTiny);
tinyMCE.EditorManager.execCommand("mceAddEditor", false, idTiny);
tinyMCE.EditorManager.execCommand("mceFocus", true, sTinyId);
tinyMCE.EditorManager.execCommand("mceRemoveEditor", true, sTinyId);
tinyMCE.EditorManager.execCommand("mceAddEditor", false, sTinyId);
} else if (tinyMCE.majorVersion >= 3) {
tinyMCE.execCommand("mceFocus", false, idTiny);
tinyMCE.execCommand("mceRemoveControl", true, idTiny);
tinyMCE.execCommand("mceAddControl", false, idTiny);
tinyMCE.execCommand("mceFocus", false, sTinyId);
tinyMCE.execCommand("mceRemoveControl", true, sTinyId);
tinyMCE.execCommand("mceAddControl", false, sTinyId);
}
}
if (typeof tinyMCE !== "undefined" && tinyMCE.majorVersion && tinyMCE.majorVersion >= 3 && tinyMCE.majorVersion <= 5) {
//console.log("Have TinyMCE");
if (tinyMCE.majorVersion >= 4) {
tinyMCE.on("AddEditor", TinyOnEditor);
|