Grammalecte  Check-in [12dd6264d6]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:merge trunk
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | comdic
Files: files | file ages | folders
SHA3-256:12dd6264d689b30fc49d2c9555571faefbc9a6d1bf4c85667f5b3ef5262d2eb3
User & Date: olr 2019-02-13 21:37:17
Context
2019-02-22
10:59
[fr] tests supplémentaires check-in: e2afd07d43 user: olr tags: comdic, fr
2019-02-13
21:37
merge trunk check-in: 12dd6264d6 user: olr tags: comdic
20:03
[fx] observePage update: don’t add menu if option.textarea doesn’t require it check-in: 35b97b66b5 user: olr tags: fx, trunk
19:53
[fx] dictionaries manager: update check-in: 50fe201fc1 user: olr tags: comdic, fx
Changes

Changes to gc_lang/fr/rules.grx.

11184
11185
11186
11187
11188
11189
11190

11191
11192
11193



11194
11195
11196
11197
11198
11199



11200
11201
11202
11203
11204
11205
11206
.....
11463
11464
11465
11466
11467
11468
11469

11470
11471
11472
11473
11474
11475
11476
.....
14489
14490
14491
14492
14493
14494
14495




14496
14497
14498
14499
14500
14501
14502
14503

14504
14505
14506
14507
14508
14509
14510
.....
14998
14999
15000
15001
15002
15003
15004
15005
15006
15007
15008
15009
15010
15011
15012
.....
15024
15025
15026
15027
15028
15029
15030
15031



15032
15033
15034
15035
15036

15037
15038
15039
15040
15041
15042
15043
15044
15045
15046
15047
15048
15049
15050
15051
15052
15053
15054
15055
15056
.....
17369
17370
17371
17372
17373
17374
17375
17376
17377
17378
17379
17380
17381
17382
17383
17384
17385

17386
17387
17388
17389
17390
17391
17392
.....
18582
18583
18584
18585
18586
18587
18588

18589
18590
18591
18592
18593
18594
18595
        <<- ~1:3>> *

    en de multiples occasions  @¬:A.*:[fe]:[pi]
        <<- ~1:4>> *

    entre autres choses  @¬:A.*:[fe]:[pi]
        <<- ~1:3>> *


    [quelques|plusieurs] [secondes|minutes|heures|journées|semaines|années|décennies]  @¬:A.*:[fe]:[pi]
        <<- ~1:2>> *




    de nombreuses [secondes|minutes|heures|journées|semaines|années|décennies]  @¬:A.*:[fe]:[pi]
        <<- ~1:3>> *

    [quelques|plusieurs] [instants|moments|jours|mois|ans|siècles]  @¬:A.*:[me]:[pi]
        <<- ~1:2>> *




    de nombreux [instants|moments|jours|mois|ans|siècles]  @¬:A.*:[me]:[pi]
        <<- ~1:3>> *

    pour partie  @:¬:A.*:f:s
        <<- ~1:2>> *

................................................................................
TEST: En colère, les ambulanciers une nouvelle fois mobilisés contre une réforme qui met en péril leur activité
TEST: Au-delà des réponses qu’a tenté d’apporter cette semaine le président, le mouvement des “gilets jaunes” marque un tournant dans la vie politique et sociale de la France.
TEST: S’y inventent de nouvelles solidarités, s’y expérimentent des joies politiques dont on avait perdu le goût et la découverte qu’on peut désobéir ensemble.
TEST: Les femmes, quant à elles, ont aussi tendance à sous-estimer le harcèlement dont elles sont dans leur globalité victimes
TEST: Elles ont avec constance démontré l’inanité de leur politique.
TEST: On l’a mauvaise, j’peux vous l’dire.
TEST: Défigurée, travestie, dans tous les cas contestée.




@@@@
@@@@
@@@@
@@@@
................................................................................

    >savoir [grès|grés]
        <<- /conf/ -2>> gré                                     # Confusion. Locution “savoir gré” pour manifester sa satisfaction.|https://fr.wiktionary.org/wiki/savoir_gr%C3%A9

    >prendre en [grès|grés]
        <<- /conf/ -3>> gré                                     # Confusion. Locution “prendre en gré” pour dire “recevoir avec résignation”.|https://fr.wiktionary.org/wiki/prendre_en_gr%C3%A9





TEST: il en sera fait à votre {{grès}}
TEST: Il est venu contre son {{grès}}.
TEST: Il viendra de bon {{grès}} ou de mauvais {{grès}}.
TEST: Errer au {{grès}} des vents.
TEST: Errer au {{grès}} du vent.
TEST: Il acceptera de {{grès}} ou de force.
TEST: nous vaincrons, {{bon grès mal grès}}
TEST: Il faut prendre en {{grès}} les afflictions que Dieu nous envoie.



# jeune / jeûne
__conf_jeûne_jeune__
    >jeune du [carême|ramadan]
    >jeune [alimentaire|eucharistique|rituel|sacramentel]
        <<- /conf/ -1>> =\1.replace("u", "û").replace("U", "Û")         # Confusion. Pour les privations alimentaires, écrivez “jeûne”.|https://fr.wiktionary.org/wiki/je%C3%BBne
................................................................................

# tâche / tache (de chocolat / rousseur / vin / sang / café / gras / graisse / huile / etc.)
__conf_tache_tâche__
    >tâche  [de|d’]  @:N¬:[GMY]|>(?:contrôle|fonds?|envergure|ampleur|importance|départ|surveillance|supervision)/
        <<- /conf/ not before("[aA]ccompl|[dD]él[éè]gu") -1>> =\1.replace("â", "a").replace("Â", "A")
        # Confusion probable. Une tâche est un travail à accomplir. Pour une salissure, une altération, une marque, une coloration… employez “tache”.

    >tâche  [>indélébile|>rouge|>verte|>noire|>bleue|>jaune|>grise|>blanche|>brune|>pourpre|>chocolat|>mauve|>fushia|>violette|>rose|>claire|>sombre|>solaire]
        <<- /conf/ -1>> =\1.replace("â", "a").replace("Â", "A")
        # Confusion. Une tâche est un travail à accomplir. Pour une salissure, une altération, une marque, une coloration… employez “tache”.

    >tâche sur @:D [>bermuda|>blouse|>blouson|bois|bras|>caleçon|>canapé|>carrelage|>chemise|>chemisier|>col|>conscience|corps|>costume|>cravate|>cuir|>culotte|CV|>dent|>doigt|document|dos|>fauteuil|>feuille|>front|>habit|>jambe|>jean|>joue|>jupe|>jupon|>lèvre|>linge|>livre|>livret|>maillot|>main|>marbre|>meuble|>moquette|>mur|>nappe|nez|>ongle|>papier|>parquet|>pantalon|>peau|pénis|>photo|>photographie|>pied|>pull|>réputation|>robe|>sexe|>siège|>slip|>sol|>t-shirt|>teeshirt|>tee-shirt|>tapis|>tête|>tissu|>veste|>vêtement|>visage]
        <<- /conf/ -1>> =\1.replace("â", "a").replace("Â", "A")
        # Confusion. Une tâche est un travail à accomplir. Pour une salissure, une altération, une marque, une coloration… employez “tache”.

................................................................................
TEST: c’est une tâche de grande envergure
TEST: déléguer des tâches de sécurité publique à des machines autonomes
TEST: tirer bénéfice de nouvelles données en fonction de la tâche de départ qui leur a été assignée
TEST: Les « pervenches » fonctionnaires seraient alors affectées à d’autres tâches de surveillance, notamment au sein de la nouvelle brigade anti-insécurité.


__conf_tâche_tache__
    >tache [>ingrate|>dévalorisante|>valorisante]



        <<- /conf/ -1>> =\1.replace("a", "â").replace("A", "Â")
        # Confusion. Une tache est une salissure, une altération, une marque, une coloration… Pour parler d’un travail à accomplir, écrivez “tâche”.

    [>abstenir|>accepter|>accomplir|>affecter|>effectuer|>entreprendre|>exécuter|>finir|>partager|>refaire|>refuser|>terminer]  @:D  >tache
    à la tache

        <<- /conf/ -3>> =\3.replace("a", "â").replace("A", "Â")
        # Confusion. Une tache est une salissure, une altération, une marque, une coloration… Pour parler d’un travail à accomplir, écrivez “tâche”.

    >tacher  [de|d’]  [ne|n’|me|m’|te|t’|se|s’]
    >tacher  [de|d’]  ?[le|la|l’|les|en|nous|vous|lui|leur|y]¿  @:Y
    >tacher  [de|d’]  [nous|vous]     [le|la|l’|les|en|y]       @:Y
    >tacher  [de|d’]  [le|la|l’|les]  [lui|leur|en|y]           @:Y
    >tacher  [de|d’]  [lui|leur]      en                        @:Y
        <<- /conf/ -1>> =\1.replace("a", "â").replace("A", "Â")
        # Confusion. Tache signifie faire une salissure, une altération, une marque, une coloration… Pour parler de l’accomplissement d’un travail, écrivez “tâcher”.

TEST: Quelle {{tache}} ingrate.
TEST: Une {{tache}} ingrate.
TEST: Elle se tue à la {{tache}}.
TEST: Il a accompli la {{tache}} facilement.
TEST: {{Tache}} de partir tôt.
TEST: {{Tachez}} d’arriver à l’heure.
TEST: {{Tache}} de ne pas faire trop de bruit.
TEST: une tâche dévalorisante.
TEST: peiner à la tâche.
................................................................................



!!!! du / dû                                                                                      !!

__ppas_avoir_dû_vinfi__
    >avoir  [du|dus|due|dues]  [le|la|les|l’|me|m’|te|t’|se|lui|s’|nous|vous|leur|@:Y]
        <<- /ppas/ -2>> dû                                      # Participe passé de devoir : “dû”.

    /VCint  [du|dus|due|dues]  [le|la|les|l’|me|m’|te|t’|se|lui|s’|nous|vous|leur|@:Y]
        <<- /ppas/ -2>> dû                                      # Participe passé de devoir : “dû”.

TEST: Il a {{du}} leur prendre.
TEST: J’ai {{du}} lui donner.
TEST: J’ai {{du}} leur prendre.
TEST: A-t-il {{du}} se résoudre à céder ?
TEST: Aurait-il {{du}} {{prendre}} son repas plus tôt ?



__ppas_qui_être_dû__
    qui  ?[ne|n’]¿  [me|m’|te|t’|lui|nous|vous|leur]  >être  du
        <<- /ppas/ --1>> dû                                     # Confusion. Ce qui est dû.

TEST: Voici ce qui t’est {{du}}.
................................................................................

    *WORD  ~.[td]$  [il|on]
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GNW]") and not value(\1, "|ce|il|elle|on|") and morph(>1, ":|<end>|,", ":3s")
        -2:3>> \2-\3                                                                                   # Forme interrogative ? Mettez un trait d’union.

TEST: {{prend on}} le temps d’y réfléchir ?
TEST: De quel droit {{vient il}} m’{{ennuyer}} ?



__inte_union_elle__
    [<start>|,]  ~.[td]$  elle
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GW]") and morph(>1, ":|<end>|,", ":3s")
        -2:3>> \2-elle                                                                              # Forme interrogative ? Mettez un trait d’union.








>



>
>
>






>
>
>







 







>







 







>
>
>
>








>







 







|







 







|
>
>
>



|

>
|











|







 







|


|






>







 







>







11184
11185
11186
11187
11188
11189
11190
11191
11192
11193
11194
11195
11196
11197
11198
11199
11200
11201
11202
11203
11204
11205
11206
11207
11208
11209
11210
11211
11212
11213
.....
11470
11471
11472
11473
11474
11475
11476
11477
11478
11479
11480
11481
11482
11483
11484
.....
14497
14498
14499
14500
14501
14502
14503
14504
14505
14506
14507
14508
14509
14510
14511
14512
14513
14514
14515
14516
14517
14518
14519
14520
14521
14522
14523
.....
15011
15012
15013
15014
15015
15016
15017
15018
15019
15020
15021
15022
15023
15024
15025
.....
15037
15038
15039
15040
15041
15042
15043
15044
15045
15046
15047
15048
15049
15050
15051
15052
15053
15054
15055
15056
15057
15058
15059
15060
15061
15062
15063
15064
15065
15066
15067
15068
15069
15070
15071
15072
15073
.....
17386
17387
17388
17389
17390
17391
17392
17393
17394
17395
17396
17397
17398
17399
17400
17401
17402
17403
17404
17405
17406
17407
17408
17409
17410
.....
18600
18601
18602
18603
18604
18605
18606
18607
18608
18609
18610
18611
18612
18613
18614
        <<- ~1:3>> *

    en de multiples occasions  @¬:A.*:[fe]:[pi]
        <<- ~1:4>> *

    entre autres choses  @¬:A.*:[fe]:[pi]
        <<- ~1:3>> *


    [quelques|plusieurs] [secondes|minutes|heures|journées|semaines|années|décennies]  @¬:A.*:[fe]:[pi]
        <<- ~1:2>> *

    de [quelques|plusieurs] [secondes|minutes|heures|journées|semaines|années|décennies]  @¬:A.*:[fe]:[pi]
        <<- ~1:3>> *

    de nombreuses [secondes|minutes|heures|journées|semaines|années|décennies]  @¬:A.*:[fe]:[pi]
        <<- ~1:3>> *

    [quelques|plusieurs] [instants|moments|jours|mois|ans|siècles]  @¬:A.*:[me]:[pi]
        <<- ~1:2>> *

    de [quelques|plusieurs] [instants|moments|jours|mois|ans|siècles]  @¬:A.*:[me]:[pi]
        <<- ~1:3>> *

    de nombreux [instants|moments|jours|mois|ans|siècles]  @¬:A.*:[me]:[pi]
        <<- ~1:3>> *

    pour partie  @:¬:A.*:f:s
        <<- ~1:2>> *

................................................................................
TEST: En colère, les ambulanciers une nouvelle fois mobilisés contre une réforme qui met en péril leur activité
TEST: Au-delà des réponses qu’a tenté d’apporter cette semaine le président, le mouvement des “gilets jaunes” marque un tournant dans la vie politique et sociale de la France.
TEST: S’y inventent de nouvelles solidarités, s’y expérimentent des joies politiques dont on avait perdu le goût et la découverte qu’on peut désobéir ensemble.
TEST: Les femmes, quant à elles, ont aussi tendance à sous-estimer le harcèlement dont elles sont dans leur globalité victimes
TEST: Elles ont avec constance démontré l’inanité de leur politique.
TEST: On l’a mauvaise, j’peux vous l’dire.
TEST: Défigurée, travestie, dans tous les cas contestée.
TEST: Une file d’attente de plusieurs heures s’étire au rez-de-chaussée



@@@@
@@@@
@@@@
@@@@
................................................................................

    >savoir [grès|grés]
        <<- /conf/ -2>> gré                                     # Confusion. Locution “savoir gré” pour manifester sa satisfaction.|https://fr.wiktionary.org/wiki/savoir_gr%C3%A9

    >prendre en [grès|grés]
        <<- /conf/ -3>> gré                                     # Confusion. Locution “prendre en gré” pour dire “recevoir avec résignation”.|https://fr.wiktionary.org/wiki/prendre_en_gr%C3%A9

    >être [>gré|grès]
        <<- /conf/ -1>> _                                       # Confusion probable. On dit “savoir gré” et non “être gré”. Ou bien, écrivez “être reconnaissant”.|https://fr.wiktionary.org/wiki/savoir_gr%C3%A9
        <<- /conf/ -2>> reconnaissant                           # Confusion probable. On dit “savoir gré” et non “être gré”. Ou bien, écrivez “être reconnaissant”.|https://fr.wiktionary.org/wiki/savoir_gr%C3%A9

TEST: il en sera fait à votre {{grès}}
TEST: Il est venu contre son {{grès}}.
TEST: Il viendra de bon {{grès}} ou de mauvais {{grès}}.
TEST: Errer au {{grès}} des vents.
TEST: Errer au {{grès}} du vent.
TEST: Il acceptera de {{grès}} ou de force.
TEST: nous vaincrons, {{bon grès mal grès}}
TEST: Il faut prendre en {{grès}} les afflictions que Dieu nous envoie.
TEST: Je lui en {{suis}} {{gré}}.


# jeune / jeûne
__conf_jeûne_jeune__
    >jeune du [carême|ramadan]
    >jeune [alimentaire|eucharistique|rituel|sacramentel]
        <<- /conf/ -1>> =\1.replace("u", "û").replace("U", "Û")         # Confusion. Pour les privations alimentaires, écrivez “jeûne”.|https://fr.wiktionary.org/wiki/je%C3%BBne
................................................................................

# tâche / tache (de chocolat / rousseur / vin / sang / café / gras / graisse / huile / etc.)
__conf_tache_tâche__
    >tâche  [de|d’]  @:N¬:[GMY]|>(?:contrôle|fonds?|envergure|ampleur|importance|départ|surveillance|supervision)/
        <<- /conf/ not before("[aA]ccompl|[dD]él[éè]gu") -1>> =\1.replace("â", "a").replace("Â", "A")
        # Confusion probable. Une tâche est un travail à accomplir. Pour une salissure, une altération, une marque, une coloration… employez “tache”.

    >tâche  [>indélébile|>rouge|>verte|>noire|>bleue|>jaune|>grise|>blanche|>brune|>pourpre|>chocolat|>mauve|>fushia|>violette|>rose|>claire|>sombre|>solaire|>cuivrée]
        <<- /conf/ -1>> =\1.replace("â", "a").replace("Â", "A")
        # Confusion. Une tâche est un travail à accomplir. Pour une salissure, une altération, une marque, une coloration… employez “tache”.

    >tâche sur @:D [>bermuda|>blouse|>blouson|bois|bras|>caleçon|>canapé|>carrelage|>chemise|>chemisier|>col|>conscience|corps|>costume|>cravate|>cuir|>culotte|CV|>dent|>doigt|document|dos|>fauteuil|>feuille|>front|>habit|>jambe|>jean|>joue|>jupe|>jupon|>lèvre|>linge|>livre|>livret|>maillot|>main|>marbre|>meuble|>moquette|>mur|>nappe|nez|>ongle|>papier|>parquet|>pantalon|>peau|pénis|>photo|>photographie|>pied|>pull|>réputation|>robe|>sexe|>siège|>slip|>sol|>t-shirt|>teeshirt|>tee-shirt|>tapis|>tête|>tissu|>veste|>vêtement|>visage]
        <<- /conf/ -1>> =\1.replace("â", "a").replace("Â", "A")
        # Confusion. Une tâche est un travail à accomplir. Pour une salissure, une altération, une marque, une coloration… employez “tache”.

................................................................................
TEST: c’est une tâche de grande envergure
TEST: déléguer des tâches de sécurité publique à des machines autonomes
TEST: tirer bénéfice de nouvelles données en fonction de la tâche de départ qui leur a été assignée
TEST: Les « pervenches » fonctionnaires seraient alors affectées à d’autres tâches de surveillance, notamment au sein de la nouvelle brigade anti-insécurité.


__conf_tâche_tache__
    tache [accomplie|dévalorisante|difforme|épuisante|exécutée|exténuante|fatigante|ingrate|menée|valorisante]
    taches [accomplies|dévalorisantes|difformes|épuisantes|exécutées|exténuantes|fatigantes|ingrates|menées|valorisantes]
    >tache >insoluble
    >tache consistant à
        <<- /conf/ -1>> =\1.replace("a", "â").replace("A", "Â")
        # Confusion. Une tache est une salissure, une altération, une marque, une coloration… Pour parler d’un travail à accomplir, écrivez “tâche”.

    [>abstenir|>accepter|>accomplir|>achever|>affecter|>effectuer|>entreprendre|>exécuter|>faciliter|>finir|>interrompre|>partager|>refaire|>refuser|>simplifier|>terminer]  @:D  >tache
    à la tache
    [à|a] la hauteur de la tache
        <<- /conf/ --1>> =\3.replace("a", "â").replace("A", "Â")
        # Confusion. Une tache est une salissure, une altération, une marque, une coloration… Pour parler d’un travail à accomplir, écrivez “tâche”.

    >tacher  [de|d’]  [ne|n’|me|m’|te|t’|se|s’]
    >tacher  [de|d’]  ?[le|la|l’|les|en|nous|vous|lui|leur|y]¿  @:Y
    >tacher  [de|d’]  [nous|vous]     [le|la|l’|les|en|y]       @:Y
    >tacher  [de|d’]  [le|la|l’|les]  [lui|leur|en|y]           @:Y
    >tacher  [de|d’]  [lui|leur]      en                        @:Y
        <<- /conf/ -1>> =\1.replace("a", "â").replace("A", "Â")
        # Confusion. Tache signifie faire une salissure, une altération, une marque, une coloration… Pour parler de l’accomplissement d’un travail, écrivez “tâcher”.

TEST: Quelle {{tache}} ingrate.
TEST: Une {{tache}} valorisante.
TEST: Elle se tue à la {{tache}}.
TEST: Il a accompli la {{tache}} facilement.
TEST: {{Tache}} de partir tôt.
TEST: {{Tachez}} d’arriver à l’heure.
TEST: {{Tache}} de ne pas faire trop de bruit.
TEST: une tâche dévalorisante.
TEST: peiner à la tâche.
................................................................................



!!!! du / dû                                                                                      !!

__ppas_avoir_dû_vinfi__
    >avoir  [du|dus|due|dues]  [le|la|les|l’|me|m’|te|t’|se|lui|s’|nous|vous|leur|@:Y]
        <<- /ppas/ \3 != "pouvoir" -2>> dû                      # Participe passé de devoir : “dû”.

    /VCint  [du|dus|due|dues]  [le|la|les|l’|me|m’|te|t’|se|lui|s’|nous|vous|leur|@:Y]
        <<- /ppas/ \3 != "pouvoir" -2>> dû                      # Participe passé de devoir : “dû”.

TEST: Il a {{du}} leur prendre.
TEST: J’ai {{du}} lui donner.
TEST: J’ai {{du}} leur prendre.
TEST: A-t-il {{du}} se résoudre à céder ?
TEST: Aurait-il {{du}} {{prendre}} son repas plus tôt ?
TEST: Les Français ont du pouvoir.


__ppas_qui_être_dû__
    qui  ?[ne|n’]¿  [me|m’|te|t’|lui|nous|vous|leur]  >être  du
        <<- /ppas/ --1>> dû                                     # Confusion. Ce qui est dû.

TEST: Voici ce qui t’est {{du}}.
................................................................................

    *WORD  ~.[td]$  [il|on]
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GNW]") and not value(\1, "|ce|il|elle|on|") and morph(>1, ":|<end>|,", ":3s")
        -2:3>> \2-\3                                                                                   # Forme interrogative ? Mettez un trait d’union.

TEST: {{prend on}} le temps d’y réfléchir ?
TEST: De quel droit {{vient il}} m’{{ennuyer}} ?
TEST: Pourquoi le message de Jean {{était‐il}} très radical pour son époque ?


__inte_union_elle__
    [<start>|,]  ~.[td]$  elle
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GW]") and morph(>1, ":|<end>|,", ":3s")
        -2:3>> \2-elle                                                                              # Forme interrogative ? Mettez un trait d’union.

Changes to gc_lang/fr/webext/content_scripts/init.js.

55
56
57
58
59
60
61


62
63
64
65
66
67
68
..
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
    oMessageBox: null,

    xRightClickedNode: null,

    xObserver: null,

    sExtensionUrl: null,



    listenRightClick: function () {
        // Node where a right click is done
        // Bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=1325814
        document.addEventListener('contextmenu', function (xEvent) {
            this.xRightClickedNode = xEvent.target;
        }.bind(this), true);
................................................................................
        if (bChrome) {
            browser.storage.local.get("ui_options", this._createMenus.bind(this));
            return;
        }
        browser.storage.local.get("ui_options").then(this._createMenus.bind(this), showError);
    },

    _createMenus: function (dOptions) {
        if (dOptions.hasOwnProperty("ui_options")) {
            dOptions = dOptions.ui_options;
            if (dOptions.textarea) {
                for (let xNode of document.getElementsByTagName("textarea")) {
                    if (xNode.style.display !== "none" && xNode.style.visibility !== "hidden" && xNode.getAttribute("spellcheck") !== "false") {
                        this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode));
                        this.nMenu += 1;
                    }
                }
            }
            if (dOptions.editablenode) {
                for (let xNode of document.querySelectorAll("[contenteditable]")) {
                    this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode));
                    this.nMenu += 1;
                }
            }
        }
    },
................................................................................

    observePage: function () {
        //    When a textarea is added via jascript we add the menu
        this.xObserver = new MutationObserver(function (mutations) {
            mutations.forEach(function (mutation) {
                for (let i = 0;  i < mutation.addedNodes.length;  i++){
                    if (mutation.addedNodes[i].tagName == "TEXTAREA") {

                        oGrammalecte.lMenu.push(new GrammalecteMenu(oGrammalecte.nMenu, mutation.addedNodes[i]));
                        oGrammalecte.nMenu += 1;

                    } else if (mutation.addedNodes[i].getElementsByTagName) {

                        for (let xNode of mutation.addedNodes[i].getElementsByTagName("textarea")) {
                            oGrammalecte.lMenu.push(new GrammalecteMenu(oGrammalecte.nMenu, xNode));
                            oGrammalecte.nMenu += 1;
                        }
                    }
                }

            });
        });
        this.xObserver.observe(document.body, {
            childList: true,
            subtree: true
        });
    },







>
>







 







|
|
|
|







|







 







>
|
|
>

>






>







55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
..
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
    oMessageBox: null,

    xRightClickedNode: null,

    xObserver: null,

    sExtensionUrl: null,

    oOptions: null,

    listenRightClick: function () {
        // Node where a right click is done
        // Bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=1325814
        document.addEventListener('contextmenu', function (xEvent) {
            this.xRightClickedNode = xEvent.target;
        }.bind(this), true);
................................................................................
        if (bChrome) {
            browser.storage.local.get("ui_options", this._createMenus.bind(this));
            return;
        }
        browser.storage.local.get("ui_options").then(this._createMenus.bind(this), showError);
    },

    _createMenus: function (oOptions) {
        if (oOptions.hasOwnProperty("ui_options")) {
            this.oOptions = oOptions.ui_options;
            if (this.oOptions.textarea) {
                for (let xNode of document.getElementsByTagName("textarea")) {
                    if (xNode.style.display !== "none" && xNode.style.visibility !== "hidden" && xNode.getAttribute("spellcheck") !== "false") {
                        this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode));
                        this.nMenu += 1;
                    }
                }
            }
            if (this.oOptions.editablenode) {
                for (let xNode of document.querySelectorAll("[contenteditable]")) {
                    this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode));
                    this.nMenu += 1;
                }
            }
        }
    },
................................................................................

    observePage: function () {
        //    When a textarea is added via jascript we add the menu
        this.xObserver = new MutationObserver(function (mutations) {
            mutations.forEach(function (mutation) {
                for (let i = 0;  i < mutation.addedNodes.length;  i++){
                    if (mutation.addedNodes[i].tagName == "TEXTAREA") {
                        if (this.oOptions === null || this.oOptions.textarea) {
                            oGrammalecte.lMenu.push(new GrammalecteMenu(oGrammalecte.nMenu, mutation.addedNodes[i]));
                            oGrammalecte.nMenu += 1;
                        }
                    } else if (mutation.addedNodes[i].getElementsByTagName) {
                        if (this.oOptions === null || this.oOptions.textarea) {
                            for (let xNode of mutation.addedNodes[i].getElementsByTagName("textarea")) {
                                oGrammalecte.lMenu.push(new GrammalecteMenu(oGrammalecte.nMenu, xNode));
                                oGrammalecte.nMenu += 1;
                            }
                        }
                    }
                }
            });
        });
        this.xObserver.observe(document.body, {
            childList: true,
            subtree: true
        });
    },