Grammalecte  Check-in [e6dcf47f18]

Overview
Comment:[fx] button and menu for editable content
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | webext3
Files: files | file ages | folders
SHA3-256: e6dcf47f182126b7d0c650dd5262c565a13248fc22cb0951b02a3f748cd2c271
User & Date: olr on 2017-09-22 09:31:28
Other Links: branch diff | manifest | tags
Context
2017-10-10
14:30
merge trunk check-in: d25e2ed843 user: olr tags: webext3
2017-09-22
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
Changes

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);
        }
    }
}