Index: gc_lang/fr/webext/content_scripts/event.js ================================================================== --- gc_lang/fr/webext/content_scripts/event.js +++ gc_lang/fr/webext/content_scripts/event.js @@ -10,19 +10,19 @@ 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(); @@ -39,81 +39,91 @@ // ! 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; - 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"; - } - } - } - return bIsAdded; - } - - 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"]; - } - let nBtn = aBtn.length; - for (let eBtn of aBtn) { - bIsAdded = addBtnTiny(bIsAdded, eBtn, iBtn, nBtn); - iBtn++; + + if (typeof xEditorAdd.settings.Grammalecte === "undefined") { + let aBtn; + let plugSep; + 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"; + } + } + } + iBtn++; + } + xEditorAdd.settings.Grammalecte = true; + //xEditorAdd.settings.theme_advanced_buttons1_add_before = "Grammalecte"; } xEditorAdd.addButton("Grammalecte", { text: "", icon: false, - 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) { - 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); - } - //tinymce.settings = old_global_settings; + 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( 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, iframe: iframeElement }); + } + }); + } + + 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.editors[i].onInit.add(TinyOnEditor); + tinyMCE.execCommand("mceRemoveControl", true, idTiny); + tinyMCE.execCommand("mceAddControl", true, idTiny); + } + //tinyMCE.settings = old_global_settings; } } /* // ! In the webpage script : document.addEventListener('GrammalecteIsLoaded', function() { Index: gc_lang/fr/webext/content_scripts/init.js ================================================================== --- gc_lang/fr/webext/content_scripts/init.js +++ gc_lang/fr/webext/content_scripts/init.js @@ -362,11 +362,11 @@ Pour que la page web puisse envoyer des infos au background Page web => Script injecté => Content script => Background Pour la réponse se sont les même étape en sens inverse. */ -var scriptEvent = document.createElement('script'); +var scriptEvent = document.createElement("script"); scriptEvent.src = browser.extension.getURL("content_scripts/event.js"); document.documentElement.appendChild(scriptEvent); var min = Math.ceil(0); var max = Math.floor(9999999); @@ -373,59 +373,61 @@ function uniqueID() { return Date.now().toString(36) + "-" + (Math.floor(Math.random() * (max - min)) + min).toString(36); } // ! Ecoute des messages venant du scipt injecté -document.addEventListener('GrammalecteEvent', function(event) { +document.addEventListener("GrammalecteEvent", function(event) { let actionFromPage = event.detail; //console.log(event); let sText = false; let dInfo = {}; let elmForGramma = null; - if (actionFromPage.elm){ + + if (actionFromPage.iframe) { + elmForGramma = document.getElementById(actionFromPage.iframe).contentWindow.document.body; + } + if (actionFromPage.elm) { elmForGramma = document.getElementById(actionFromPage.elm); - sText = (elmForGramma.tagName == "TEXTAREA") ? elmForGramma.value : elmForGramma.innerText; - dInfo = {sTextAreaId: elmForGramma.id}; + sText = elmForGramma.tagName == "TEXTAREA" ? elmForGramma.value : elmForGramma.innerText; + dInfo = { sTextAreaId: elmForGramma.id }; } - - if (actionFromPage.spellcheck){ + if (actionFromPage.spellcheck) { oGrammalecte.startGCPanel(elmForGramma); xGrammalectePort.postMessage({ sCommand: "parseAndSpellcheck", - dParam: {sText: sText || actionFromPage.spellcheck, sCountry: "FR", bDebug: false, bContext: false}, + dParam: { sText: sText || actionFromPage.spellcheck, sCountry: "FR", bDebug: false, bContext: false }, dInfo: dInfo }); } - if (actionFromPage.lexique){ + if (actionFromPage.lexique) { oGrammalecte.startLxgPanel(); xGrammalectePort.postMessage({ sCommand: "getListOfTokens", - dParam: {sText: sText || actionFromPage.lexique}, + dParam: { sText: sText || actionFromPage.lexique }, dInfo: dInfo }); } }); - let isLoaded = false; let bufferMsg = []; // ! Permet d'envoyer des messages vers le scipt injecté // (peut aussi être lu par un script sur la page web) function sendToWebpage(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; } - if ( !isLoaded ){ + if (!isLoaded) { bufferMsg.push(dataToSend); } else { //console.log('sendToWebpage', dataToSend); var eventGrammalecte = new CustomEvent("GrammalecteToPage", { detail: dataToSend }); document.dispatchEvent(eventGrammalecte); @@ -433,17 +435,17 @@ return dataToSend.IdAction; } // ! Les message ne peuvent être envoyer qu'après que le script est injecté -document.addEventListener('GrammalecteIsLoaded', function() { +document.addEventListener("GrammalecteIsLoaded", function() { //console.log("GrammalecteIsLoaded EXT"); isLoaded = true; - if ( bufferMsg.length > 0 ){ + if (bufferMsg.length > 0) { for (const dataToSend of bufferMsg) { var eventGrammalecte = new CustomEvent("GrammalecteToPage", { detail: dataToSend }); document.dispatchEvent(eventGrammalecte); } } }); -sendToWebpage({init: browser.extension.getURL("")}); +sendToWebpage({ init: browser.extension.getURL("") });