Grammalecte  Changes On Branch e6dcf47f182126b7

Changes In Branch webext3 Through [e6dcf47f18] Excluding Merge-Ins

This is equivalent to a diff from d560645c3f to e6dcf47f18

2017-10-10
14:30
merge trunk check-in: d25e2ed843 user: olr tags: webext3
2017-09-22
09:44
[fr] phonet_simil: remord remords check-in: 82b92a6d17 user: olr tags: trunk, fr
09:31
[fx] button and menu for editable content check-in: e6dcf47f18 user: olr tags: webext3
2017-09-21
11:52
[fr] pt: secret défense check-in: d560645c3f user: olr tags: trunk, fr
2017-09-20
10:41
[fr] phonet_simil: slam/slame check-in: 7282e496f0 user: olr tags: trunk, fr

Modified gc_lang/fr/webext/content_scripts/init.js from [52c46fcb6a] to [fb82906f86].

55
56
57
58
59
60
61








62
63
64
65
66
67
68
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76







+
+
+
+
+
+
+
+







    createMenus: function () {
        let lNode = document.getElementsByTagName("textarea");
        for (let xNode of lNode) {
            this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode));
            this.nMenu += 1;
        }
    },

    createMenus2 () {
        let lNode = document.querySelectorAll("[contenteditable]");
        for (let xNode of lNode) {
            this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode));
            this.nMenu += 1;
        }
    },

    rescanPage: function () {
        if (this.oTFPanel !== null) { this.oTFPanel.hide(); }
        if (this.oLxgPanel !== null) { this.oLxgPanel.hide(); }
        if (this.oGCPanel !== null) { this.oGCPanel.hide(); }
        for (let oMenu of this.lMenu) {
            oMenu.deleteNodes();
148
149
150
151
152
153
154

156
157
158
159
160
161
162
163







+
});


/*
    Start
*/
oGrammalecte.createMenus();
oGrammalecte.createMenus2();

Modified gc_lang/fr/webext/content_scripts/menu.js from [51ff434365] to [13d950308a].

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







-
+



-
-
-
+
+
+






-
+

+

+

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



-
+






-
-
+
+


+



-
+

-
+




-
-
+
+


+




-
-
+
+



-
-
+
+



-
-
-
-
-

















-
+



// JavaScript

"use strict";


class GrammalecteMenu {

    constructor (nMenu, xTextArea) {
    constructor (nMenu, xNode) {
        this.sMenuId = "grammalecte_menu" + nMenu;
        this.xButton = createNode("div", {className: "grammalecte_menu_main_button", textContent: " "});
        this.xButton.onclick = () => { this.switchMenu(); };
        this.xMenu = this._createMenu(xTextArea);
        this._insertAfter(this.xButton, xTextArea);
        this._insertAfter(this.xMenu, xTextArea);
        this.xMenu = this._createMenu(xNode);
        this._insertAfter(this.xButton, xNode);
        this._insertAfter(this.xMenu, xNode);
    }

    _insertAfter (xNewNode, xReferenceNode) {
        xReferenceNode.parentNode.insertBefore(xNewNode, xReferenceNode.nextSibling);
    }

    _createMenu (xTextArea) {
    _createMenu (xNode) {
        try {
            let sText = (xNode.tagName == "TEXTAREA") ? xNode.value : xNode.textContent;
            let xMenu = createNode("div", {id: this.sMenuId, className: "grammalecte_menu"});
            xMenu.appendChild(createNode("div", {className: "grammalecte_menu_header", textContent: "GRAMMALECTE"}));
            // Text formatter
            if (xNode.tagName == "TEXTAREA") {
            let xTFButton = createNode("div", {className: "grammalecte_menu_item", textContent: "Formateur de texte"});
            xTFButton.onclick = () => {
            	this.switchMenu();
                oGrammalecte.createTFPanel();
                oGrammalecte.oTFPanel.start(xTextArea);
                oGrammalecte.oTFPanel.show();
            };
                let xTFButton = createNode("div", {className: "grammalecte_menu_item", textContent: "Formateur de texte"});
                xTFButton.onclick = () => {
                    this.switchMenu();
                    oGrammalecte.createTFPanel();
                    oGrammalecte.oTFPanel.start(xNode);
                    oGrammalecte.oTFPanel.show();
                };
                xMenu.appendChild(xTFButton);
            }
            // lexicographe
            let xLxgButton = createNode("div", {className: "grammalecte_menu_item", textContent: "Lexicographe"});
            xLxgButton.onclick = () => {
            	this.switchMenu();
                this.switchMenu();
                oGrammalecte.createLxgPanel();
                oGrammalecte.oLxgPanel.clear();
                oGrammalecte.oLxgPanel.show();
                oGrammalecte.oLxgPanel.startWaitIcon();
                xGrammalectePort.postMessage({
                    sCommand: "getListOfTokens",
                    dParam: {sText: xTextArea.value},
                    dInfo: {sTextAreaId: xTextArea.id}
                    dParam: {sText: sText},
                    dInfo: {sTextAreaId: xNode.id}
                });
            };
            xMenu.appendChild(xLxgButton);
            // Grammar checker
            let xGCButton = createNode("div", {className: "grammalecte_menu_item", textContent: "Correction grammaticale"});
            xGCButton.onclick = () => {
            	this.switchMenu();
                this.switchMenu();
                oGrammalecte.createGCPanel();
                oGrammalecte.oGCPanel.start(xTextArea);
                oGrammalecte.oGCPanel.start(xNode);
                oGrammalecte.oGCPanel.show();
                oGrammalecte.oGCPanel.startWaitIcon();
                xGrammalectePort.postMessage({
                    sCommand: "parseAndSpellcheck",
                    dParam: {sText: xTextArea.value, sCountry: "FR", bDebug: false, bContext: false},
                    dInfo: {sTextAreaId: xTextArea.id}
                    dParam: {sText: sText, sCountry: "FR", bDebug: false, bContext: false},
                    dInfo: {sTextAreaId: xNode.id}
                });
            };
            xMenu.appendChild(xGCButton);
            // Conjugation tool
            let xConjButton = createNode("div", {className: "grammalecte_menu_item_block", textContent: "Conjugueur"});
            let xConjButtonTab = createNode("div", {className: "grammalecte_menu_button", textContent: "Onglet"});
            xConjButtonTab.onclick = () => {
            	this.switchMenu();
            	xGrammalectePort.postMessage({sCommand: "openConjugueurTab", dParam: null, dInfo: null});
                this.switchMenu();
                xGrammalectePort.postMessage({sCommand: "openConjugueurTab", dParam: null, dInfo: null});
            };
            let xConjButtonWin = createNode("div", {className: "grammalecte_menu_button", textContent: "Fenêtre"});
            xConjButtonWin.onclick = () => {
            	this.switchMenu();
            	xGrammalectePort.postMessage({sCommand: "openConjugueurWindow", dParam: null, dInfo: null});
                this.switchMenu();
                xGrammalectePort.postMessage({sCommand: "openConjugueurWindow", dParam: null, dInfo: null});
            };
            xConjButton.appendChild(xConjButtonTab);
            xConjButton.appendChild(xConjButtonWin);
            // Create
            xMenu.appendChild(createNode("div", {className: "grammalecte_menu_header", textContent: "GRAMMALECTE"}));
            xMenu.appendChild(xTFButton);
            xMenu.appendChild(xLxgButton);
            xMenu.appendChild(xGCButton);
            xMenu.appendChild(xConjButton);
            //xMenu.appendChild(createNode("img", {scr: browser.extension.getURL("img/logo-16.png")}));
            // can’t work, due to content-script policy: https://bugzilla.mozilla.org/show_bug.cgi?id=1267027
            xMenu.appendChild(createNode("div", {className: "grammalecte_menu_footer"}));
            return xMenu;
        }
        catch (e) {
            showError(e);
        }
    }

    deleteNodes () {
        this.xMenu.parentNode.removeChild(this.xMenu);
        this.xButton.parentNode.removeChild(this.xButton);
    }

    switchMenu () {
    	let xMenu = document.getElementById(this.sMenuId);
        let xMenu = document.getElementById(this.sMenuId);
        xMenu.style.display = (xMenu.style.display == "block") ? "none" : "block";
    }
}

Modified gc_lang/fr/webext/content_scripts/panel_gc.js from [0ba0b636f6] to [7e48ad2a90].

51
52
53
54
55
56
57
58

59
60
61
62


63
64
65
66
67
68
69
51
52
53
54
55
56
57

58
59
60


61
62
63
64
65
66
67
68
69







-
+


-
-
+
+







        this.xContentNode.appendChild(this.xParagraphList);
        this.xPanelContent.addEventListener("click", onGrammalecteGCPanelClick, false);
        this.oTooltip = new GrammalecteTooltip(this.xContentNode);
        this.xPanelContent.appendChild(this.xContentNode);
        this.oTAC = new GrammalecteTextAreaControl();
    }

    start (xTextArea=null) {
    start (xNode=null) {
        this.oTooltip.hide();
        this.clear();
        if (xTextArea) {
            this.oTAC.setTextArea(xTextArea);
        if (xNode && xNode.tagName == "TEXTAREA") {
            this.oTAC.setTextArea(xNode);
        }
    }

    clear () {
        while (this.xParagraphList.firstChild) {
            this.xParagraphList.removeChild(this.xParagraphList.firstChild);
        }
446
447
448
449
450
451
452
453

454
455
456
457
458
459
460
461
462
463
464
465
446
447
448
449
450
451
452

453
454
455
456
457
458
459
460
461
462
463
464
465







-
+












        sText = sText.replace("\r\n", "\n").replace("\r", "\n");
        while ((iEnd = sText.indexOf("\n", iStart)) !== -1) {
            this._dParagraph.set(i, sText.slice(iStart, iEnd));
            i++;
            iStart = iEnd+1;
        }
        this._dParagraph.set(i, sText.slice(iStart));
        console.log("Paragraphs number: " + (i+1));
        //console.log("Paragraphs number: " + (i+1));
    }

    write () {
        if (this._xTextArea !== null) {
            let sText = "";
            this._dParagraph.forEach(function (val, key) {
                sText += val + "\n";
            });
            this._xTextArea.value = sText.slice(0,-1);
        }
    }
}