Grammalecte  Check-in [e026bff1c5]

Overview
Comment:[fx] content-script interface + remove SharedWorker
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fx | webext2
Files: files | file ages | folders
SHA3-256: e026bff1c5825a748e65e54d41d72ab9895d1248a3230d46486f53118bc91bb8
User & Date: olr on 2017-08-10 09:59:32
Other Links: branch diff | manifest | tags
Context
2017-08-11
12:38
[fx] use objects for communication with Worker (normalization) check-in: 1938527edc user: olr tags: fx, webext2
2017-08-10
09:59
[fx] content-script interface + remove SharedWorker check-in: e026bff1c5 user: olr tags: fx, webext2
2017-08-09
19:33
[fx] Correct the intialisation of the SharedWorker check-in: 08f0167b9e user: IllusionPerdu tags: fx, webext2
Changes

Modified gc_lang/fr/webext/content_scripts/modify_page.js from [a5f9d0af95] to [15a0d2d897].

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
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

+
+
+
+
+
+
+




+
+
+
+
+
+
+
+
+





-
-
-
-
-
+
-
-
-
-
-
-
+
+
+
-



-
+
-

+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
-
-
-
-
+
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+




-
-
+
-
-


-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+


-
-
-
-
-
+
+
+


-
+
-
-
-
-
-
-
-
+
-
-


-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-










-
+







// Modify page

/*
    JS sucks (again and again and again and again…)
    Not possible to load content from within the extension:
    https://bugzilla.mozilla.org/show_bug.cgi?id=1267027
    No SharedWorker, no images allowed for now…
*/

"use strict";

console.log("Content script [start]");


let nWrapper = 0;

let xConjPanel = null;
let xTFPanel = null;
let xLxgPanel = null;
let xGCPanel = null;


function showError (e) {
    console.error(e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}

/*
    Worker (separate thread to avoid freezing Firefox)
*/
let xGCEWorker = new SharedWorker(browser.extension.getURL("../gce_sharedworker.js"));

function wrapTextareas () {
xGCEWorker.onerror = function(e) {
    console.log('There is an error with your worker!');
    console.log(typeof(e));
    console.log(e);
    for (let sParam in e) {
        console.log(sParam);
    let lNode = document.getElementsByTagName("textarea");
    for (let xNode of lNode) {
        createWrapper(xNode);
        console.log(e.sParam);
    }
}

xGCEWorker.port.onmessage = function (e) {
function createWrapper (xTextArea) {
    // https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent
    try {
        let xParentElement = xTextArea.parentElement;
        let xWrapper = document.createElement("div");
        xWrapper.style = "padding: 5px; color: hsl(210, 10%, 90%); background-color: hsl(210, 50%, 50%); border-radius: 3px;";
        xWrapper.id = nWrapper + 1;
        nWrapper += 1;
        xParentElement.insertBefore(xWrapper, xTextArea);
        xWrapper.appendChild(xTextArea); // move textarea in wrapper
        let xToolbar = createWrapperToolbar(xTextArea);
        xWrapper.appendChild(xToolbar);
    }
        switch (e.data[0]) {
            case "grammar_errors":
    catch (e) {
        showError(e);
                console.log("GRAMMAR ERRORS (SHARE)");
                console.log(e.data[1].aGrammErr);
                //browser.runtime.sendMessage({sCommand: "grammar_errors", aGrammErr: e.data[1].aGrammErr});
                break;
            case "spelling_and_grammar_errors":
                console.log("SPELLING AND GRAMMAR ERRORS (SHARE)");
    }
}


let sButtonStyle = "display: inline-block; padding: 0 5px; margin-left: 5px; background-color: hsl(210, 50%, 60%); border-radius: 2px; cursor: pointer;";

                console.log(e.data[1].aSpellErr);
                console.log(e.data[1].aGrammErr);
                break;
function createWrapperToolbar (xTextArea) {
            case "text_to_test_result":
                console.log("TESTS RESULTS (SHARE)");
                console.log(e.data[1]);
                break;
    try {
            case "fulltests_result":
                console.log("TESTS RESULTS (SHARE)");
                console.log(e.data[1]);
                break;
        let xToolbar = document.createElement("div");
            case "options":
                console.log("OPTIONS (SHARE)");
                console.log(e.data[1]);
                break;
            case "tokens":
                console.log("TOKENS (SHARE)");
                console.log(e.data[1]);
                let xLxgTab = browser.tabs.create({
                    url: browser.extension.getURL("panel/lexicographer.html"),
                });
                xLxgTab.then(onCreated, onError);
                break;
        xToolbar.style = "display: flex; justify-content: flex-end; margin-top: 5px; padding: 5px 10px;";
        /*let xLogo = document.createElement("img");
        xLogo.src = browser.extension.getURL("img/logo-16.png");
        xTitle.appendChild(xLogo);*/
        xToolbar.appendChild(document.createTextNode("Grammalecte"));
        let xConjButton = document.createElement("div");
        xConjButton.textContent = "Conjuguer";
        xConjButton.style = sButtonStyle;
        xConjButton.onclick = function() {
            createConjPanel();
        };
        xToolbar.appendChild(xConjButton);
        let xTFButton = document.createElement("div");
        xTFButton.textContent = "Formater";
        xTFButton.style = sButtonStyle;
        xTFButton.onclick = function() {
            createTFPanel();
            case "error":
                console.log("ERROR (SHARE)");
                console.log(e.data[1]);
                break;
        };
        xToolbar.appendChild(xTFButton);
        let xLxgButton = document.createElement("div");
        xLxgButton.textContent = "Analyser";
        xLxgButton.style = sButtonStyle;
        xLxgButton.onclick = function() {
            createLxgPanel();
        };
        xToolbar.appendChild(xLxgButton);
        let xGCButton = document.createElement("div");
        xGCButton.textContent = "Corriger";
        xGCButton.style = sButtonStyle;
        xGCButton.onclick = function() {
            createGCPanel();
            default:
                console.log("Unknown command (SHARE): " + e.data[0]);
        }
        };
        xToolbar.appendChild(xGCButton);
        return xToolbar;
    }
    catch (e) {
        showError(e);
    }
};

}
console.log("Content script [worker]");
console.log(xGCEWorker);


//xGCEWorker.port.start();
//console.log("Content script [port started]");

//xGCEWorker.port.postMessage(["init", {sExtensionPath: browser.extension.getURL("."), sOptions: "", sContext: "Firefox"}]);

console.log("Content script [worker initialzed]");

function createConjPanel () {
    console.log("Conjugueur");
    if (xConjPanel !== null) {
        xConjPanel.style.display = "block";
    } else {
        // create the panel
        xConjPanel = document.createElement("div");
        xConjPanel.style = "position: fixed; left: 50%; top: 50%; z-index: 100; height: 400px; margin-top: -200px; width: 600px; margin-left: -300px; border-radius: 10px;"
                         + " color: hsl(210, 10%, 4%); background-color: hsl(210, 20%, 90%); border: 10px solid hsla(210, 20%, 70%, .5);";
        xConjPanel.textContent = "Conjugueur";
        xConjPanel.setAttribute("draggable", true);
        xConjPanel.appendChild(createCloseButton(xConjPanel));
        document.body.appendChild(xConjPanel);
    }
xGCEWorker.port.postMessage(["parse", {sText: "Vas... J’en aie mare...", sCountry: "FR", bDebug: false, bContext: false}]);
//xGCEWorker.port.postMessage(["parseAndSpellcheck", {sText: oRequest.sText, sCountry: "FR", bDebug: false, bContext: false}]);
//xGCEWorker.port.postMessage(["getListOfTokens", {sText: oRequest.sText}]);
//xGCEWorker.port.postMessage(["textToTest", {sText: oRequest.sText, sCountry: "FR", bDebug: false, bContext: false}]);
//xGCEWorker.port.postMessage(["fullTests"]);

}


function wrapTextareas() {;
    let lNode = document.getElementsByTagName("textarea");
    for (let xNode of lNode) {
        createGCButton(xNode);
    }

function createTFPanel () {
    console.log("Formateur de texte");
}

function createGCButton (xActiveTextZone) {
function createLxgPanel () {
    let xParentElement = xActiveTextZone.parentElement;
    let xGCButton = document.createElement("div");
    xGCButton.textContent = "@";
    xGCButton.title = "Grammalecte"
    xGCButton.style = "padding: 5px; color: #FFF; background-color: hsla(210, 50%, 50%, 80%); border-radius: 3px; cursor: pointer";
    xGCButton.onclick = function() {
        console.log(xActiveTextZone.value);
    console.log("Analyse");
    };
    xParentElement.insertBefore(xGCButton, xActiveTextZone);
}

function removeEverything () {
function createGCPanel () {
    while (document.body.firstChild) {
        document.body.firstChild.remove();
    }
}

function change (param) {
    console.log("Correction grammaticale");
}

function createCloseButton (xParentNode) {
    let xButton = document.createElement("div");
    xButton.style = "float: right; width: 20px; padding: 5px 10px; color: hsl(210, 0%, 100%); text-align: center;"
                  + "font-size: 20px; font-weight: bold; background-color: hsl(0, 80%, 50%); border-radius: 0 0 0 3px; cursor: pointer;";
    xButton.textContent = "×";
    xButton.onclick = function () {
        xParentNode.style.display = "none";
    }
    return xButton;
    document.getElementById("title").setAttribute("background-color", "#809060");
    console.log("param: " + param);
    document.getElementById("title").setAttribute("background-color", "#FF0000");
}


/*
    Assign do_something() as a listener for messages from the extension.
*/


function handleMessage2 (oRequest, xSender, sendResponse) {
    console.log(`[Content script] received: ${oRequest.content}`);
    change(request.myparam);
    //change(request.myparam);
    //browser.runtime.onMessage.removeListener(handleMessage);
    sendResponse({response: "response from content script"});
}

browser.runtime.onMessage.addListener(handleMessage2);