Grammalecte  Check-in [8a66c7c437]

Overview
Comment:[fx] WebExt: lexicon editor (ß)
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fx
Files: files | file ages | folders
SHA3-256: 8a66c7c4376e6be318f95e5ce1e530af3737e04a7a3920e196435b8af8e7ff62
User & Date: olr on 2018-01-16 16:45:01
Other Links: manifest | tags
Context
2018-01-17
17:37
[fx] update: lexicon editor check-in: 8396b80e31 user: olr tags: trunk, fx
2018-01-16
16:45
[fx] WebExt: lexicon editor (ß) check-in: 8a66c7c437 user: olr tags: trunk, fx
16:43
[fr] codes de positionnement pour JS check-in: 697267bdcf user: olr tags: trunk, fr
Changes

Modified gc_lang/fr/webext/background.js from [814bdfcd81] to [f7965949be].

267
268
269
270
271
272
273



274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293













294
295
296
297
298
299
300
    switch (sCommand) {
        case "conjugueur_tab":
            openConjugueurTab();
            break;
        case "conjugueur_window":
            openConjugueurWindow();
            break;



    }
});


/*
    Actions
*/

function storeGCOptions (dOptions) {
    if (bChrome) {
        // JS crap again. Chrome can’t store Map object.
        dOptions = helpers.mapToObject(dOptions);
    }
    browser.storage.local.set({"gc_options": dOptions});
}

function sendCommandToTab (sCommand, iTab) {
    let xTabPort = dConnx.get(iTab);
    xTabPort.postMessage({sActionDone: sCommand, result: null, dInfo: null, bEnd: false, bError: false});
}














function openConjugueurTab () {
    if (bChrome) {
        browser.tabs.create({
            url: browser.extension.getURL("panel/conjugueur.html")
        });
        return;







>
>
>




















>
>
>
>
>
>
>
>
>
>
>
>
>







267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
    switch (sCommand) {
        case "conjugueur_tab":
            openConjugueurTab();
            break;
        case "conjugueur_window":
            openConjugueurWindow();
            break;
        case "lex_editor":
            openLexEditor();
            break;
    }
});


/*
    Actions
*/

function storeGCOptions (dOptions) {
    if (bChrome) {
        // JS crap again. Chrome can’t store Map object.
        dOptions = helpers.mapToObject(dOptions);
    }
    browser.storage.local.set({"gc_options": dOptions});
}

function sendCommandToTab (sCommand, iTab) {
    let xTabPort = dConnx.get(iTab);
    xTabPort.postMessage({sActionDone: sCommand, result: null, dInfo: null, bEnd: false, bError: false});
}

function openLexEditor () {
    if (bChrome) {
        browser.tabs.create({
            url: browser.extension.getURL("panel/lex_editor.html")
        });
        return;
    }
    let xLexEditor = browser.tabs.create({
        url: browser.extension.getURL("panel/lex_editor.html")
    });
    xLexEditor.then(onCreated, onError);
}

function openConjugueurTab () {
    if (bChrome) {
        browser.tabs.create({
            url: browser.extension.getURL("panel/conjugueur.html")
        });
        return;

Modified gc_lang/fr/webext/gce_worker.js from [7786f58fad] to [2a64cce6de].

49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
importScripts("grammalecte/tests.js");
/*
    Warning.
    Initialization can’t be completed at startup of the worker,
    for we need the path of the extension to load data stored in JSON files.
    This path is retrieved in background.js and passed with the event “init”.
*/
console.log("[Worker] imports odne");

function createResponse (sActionDone, result, dInfo, bEnd, bError=false) {
    return {
        "sActionDone": sActionDone,
        "result": result, // can be of any type
        "dInfo": dInfo,
        "bEnd": bEnd,







|







49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
importScripts("grammalecte/tests.js");
/*
    Warning.
    Initialization can’t be completed at startup of the worker,
    for we need the path of the extension to load data stored in JSON files.
    This path is retrieved in background.js and passed with the event “init”.
*/


function createResponse (sActionDone, result, dInfo, bEnd, bError=false) {
    return {
        "sActionDone": sActionDone,
        "result": result, // can be of any type
        "dInfo": dInfo,
        "bEnd": bEnd,

Modified gc_lang/fr/webext/manifest.json from [84fab8d7b3] to [e08a3d0ea1].

102
103
104
105
106
107
108






109
110
111
112
113
114
115
      "description": "Ouvre le conjugueur dans un onglet"
    },
    "conjugueur_window": {
      "suggested_key": {
        "default": "Ctrl+Shift+7"
      },
      "description": "Ouvre le conjugueur dans une fenêtre"






    }
  },

  "web_accessible_resources": [
    "grammalecte/_dictionaries/French.json",
    "grammalecte/fr/conj_data.json",
    "grammalecte/fr/mfsp_data.json",







>
>
>
>
>
>







102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
      "description": "Ouvre le conjugueur dans un onglet"
    },
    "conjugueur_window": {
      "suggested_key": {
        "default": "Ctrl+Shift+7"
      },
      "description": "Ouvre le conjugueur dans une fenêtre"
    },
    "lex_editor": {
      "suggested_key": {
        "default": "Ctrl+Shift+8"
      },
      "description": "Ouvre l’éditeur lexical"
    }
  },

  "web_accessible_resources": [
    "grammalecte/_dictionaries/French.json",
    "grammalecte/fr/conj_data.json",
    "grammalecte/fr/mfsp_data.json",

Added gc_lang/fr/webext/panel/lex_editor.css version [00c320e4d1].





















































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
/*
   CSS Document
   White
   Design par Olivier R.
*/

* { margin: 0; padding: 0; }
img { border: none; }


/* Generic classes */

.fleft { float: left; }
.fright { float: right; }
.center { text-align: center; }
.right { text-align: right; }
.left { text-align: left; }
.justify { text-align: justify; }
.hidden { display: none; }
.clearer { clear: both; font-size: 0; height: 0; }

body {
    background: hsl(0, 0%, 100%) url(../img/lines.png);
    font: normal 16px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
    color: #505050;
}



/* MAIN ====================================================================== */

#main .inbox {
    width: 600px;
    margin: 20px auto 10px auto;
    padding: 10px 30px 30px 30px;
    background: hsl(0, 0%, 100%);
    border: 2px solid #F0F0F0;
    border-radius: 20px;
}

#main h1 {
    margin: 5px 0 20px 0;
    color: hsl(210, 50%, 50%);
    font: bold 30px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
}
#main h2 {
    margin: 5px 0 2px 0;
    color: hsl(0, 50%, 50%);
    font: bold 20px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
}
#main h3 {
    margin: 3px 0 2px 0;
    color: hsl(210, 50%, 50%);
    font: bold 16px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
}


#categories {
    display: flex;
    padding: 10px 0;
}

.category {
    padding: 10px;
    border-radius: 3px;
    cursor: pointer;
}
.category:hover {
    background-color: hsl(0, 0%, 90%);
}


.empty_section {
    padding: 80px;
    font-size: 24px;
    text-align: center;
}
.section {
    display: none;
    padding: 10px;
}

.container {
    display: flex;
}

.block {
    flex-grow: 1;
    margin: 5px;
    padding: 10px 15px 15px 15px;
    background-color: hsl(0, 10%, 96%);
    border-radius: 3px;
}


input#word {
    display: inline-block;
    width: 230px;
    margin-left: 5px;
    padding: 5px 10px;
    border: 2px solid hsl(0, 0%, 80%);
    border-radius: 3px;
    height: 24px;
    background: transparent;
    font: normal 20px Tahoma, "Ubuntu Condensed";
    color: hsl(0, 0%, 30%);
}
input[placeholder]#word {
    color: hsl(0, 0%, 70%);
}


#generated_words {
    padding: 10px;
}

#buttonline {
    text-align: right;
}

#add_to_dictionary {
    display: inline-block;
    padding: 7px 10px;
    font-size: 20px;
    background-color: hsl(0, 30%, 30%);
    color: hsl(0, 30%, 60%);
    border-radius: 3px;
    text-transform: uppercase;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
}
#add_to_dictionary:hover {
    background-color: hsl(0, 60%, 40%);
    color: hsl(0, 60%, 70%);
    box-shadow: 0 0 2px hsl(0, 60%, 50%);
}

Added gc_lang/fr/webext/panel/lex_editor.html version [4e9fa3bf55].





































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
<!DOCTYPE HTML>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="lex_editor.css" />
        <title>Grammalecte · Éditeur lexical</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    </head>
    
    <body>


        <div id="main">
            <div class="inbox">

                <h1>Éditeur lexical</h1>

                <input type="text" id="word" name="word" maxlength="60" value="" placeholder="votre mot" autofocus />

                <div id="categories">
                    <div class="category" id="select_nom">Nom</div>
                    <div class="category" id="select_adjectif">Adjectif</div>
                    <div class="category" id="select_verbe">Verbe</div>
                    <div class="category" id="select_adverbe">Adverbe</div>

                    <div class="separator"></div>

                    <div class="category" id="select_prenom">Prénom</div>
                    <div class="category" id="select_patronyme">Patronyme</div>
                    <div class="category" id="select_nom_propre">Nom propre</div>

                    <div class="separator"></div>

                    <div class="category" id="select_autre">Autre</div>
                </div>


                <div id="editor">

                    <div id="section_vide" class="empty_section">
                        Sélectionnez une catégorie.
                    </div>

                    <div id="section_nom" class="section">
                        <h2>Nom</h2>
                        <p><input type="checkbox" id="nom_adj" /><label for="nom_adj"> c’est aussi un adjectif</label></p>
                        <div class="container">
                            <div class="block">
                                <h3>Genre</h3>
                                <p><input type="radio" id="nom_genre_e" name="genre" value="epi" checked /><label for="nom_genre_e"> épicène</label></p>
                                <p><input type="radio" id="nom_genre_m" name="genre" value="mas" /><label for="nom_genre_m"> masculin</label></p>
                                <p><input type="radio" id="nom_genre_f" name="genre" value="fem" /><label for="nom_genre_f"> féminin</label></p>
                            </div>
                            <div class="block">
                                <h3>Pluriel</h3>
                                <p><input type="radio" id="nom_pluriel_e" name="pluriel" value="s" checked /><label for="nom_pluriel_e"> pluriel en ·s</label></p>
                                <p><input type="radio" id="nom_pluriel_m" name="pluriel" value="x" /><label for="nom_pluriel_m"> pluriel en ·x</label></p>
                                <p><input type="radio" id="nom_pluriel_f" name="pluriel" value="inv" /><label for="nom_pluriel_f"> invariable</label></p>
                            </div>
                        </div>

                        <h3>[optionnel] Autre forme (masculine, féminine, variante, etc.)</h3>
                        <input type="text" id="word2" name="word2" maxlength="60" value="" placeholder="votre mot" />
                        <p><input type="checkbox" id="nom_adj2" /><label for="nom_adj2"> c’est aussi un adjectif</label></p>
                        <div class="container">
                            <div class="block">
                                <h3>Genre</h3>
                                <p><input type="radio" id="nom2_genre_e" name="genre2" value="epi" checked /><label for="nom2_genre_e"> épicène</label></p>
                                <p><input type="radio" id="nom2_genre_m" name="genre2" value="mas" /><label for="nom2_genre_m"> masculin</label></p>
                                <p><input type="radio" id="nom2_genre_f" name="genre2" value="fem" /><label for="nom2_genre_f"> féminin</label></p>
                            </div>
                            <div class="block">
                                <h3>Pluriel</h3>
                                <p><input type="radio" id="nom2_pluriel_e" name="pluriel2" value="s" checked /><label for="nom2_pluriel_e"> pluriel en ·s</label></p>
                                <p><input type="radio" id="nom2_pluriel_m" name="pluriel2" value="x" /><label for="nom2_pluriel_m"> pluriel en ·x</label></p>
                                <p><input type="radio" id="nom2_pluriel_f" name="pluriel2" value="inv" /><label for="nom2_pluriel_f"> invariable</label></p>
                            </div>
                        </div>
                    </div>

                    <div id="section_adjectif" class="section">
                        <h2>Adjectif</h2>

                    </div>

                    <div id="section_verbe" class="section">
                        <h2>Verbe</h2>
                        <div class="block">
                            <h3><input type="checkbox" id="v_i" /><label for="v_i"> intransitif</label></h3>
                            <div class="description">Cochez cette case, si ce verbe peut s’utiliser sans complément d’objet.</div>
                            <div class="examples_true">Je mange. Je pars. Je pense.</div>
                            <div class="examples_false">J’appartiens à…</div>
                        </div>
                        <div class="block">
                            <h3><input type="checkbox" id="v_t" /><label for="v_t"> transitif direct</label></h3>
                            <div class="description">Cochez cette case, si ce verbe peut s’utiliser avec un complément d’objet direct.</div>
                            <div class="examples_true">Je mange <i>une pomme</i>. Je donne <i>une gifle</i>.</div>
                            <div class="examples_false">Je pars. J’appartiens à…</div>
                        </div>
                        <div class="block">
                            <h3><input type="checkbox" id="v_n" /><label for="v_n"> transitif indirect</label></h3>
                            <div class="description">Cochez cette case, si ce verbe peut s’utiliser avec un complément d’objet indirect direct.</div>
                            <div class="examples_true">Je donne une bise <i>à sa femme</i>.J’appartiens <i>à ce groupe.</i>.</div>
                            <div class="examples_false"></div>
                        </div>
                        <div class="block">
                            <h3><input type="checkbox" id="v_p" /><label for="v_p"> pronominal</label></h3>
                            <div class="description">Cochez cette case, si ce verbe peut s’utiliser pronominalement.</div>
                            <div class="examples_true">Je me suis trompé.</div>
                            <div class="examples_false"></div>
                        </div>
                        <div class="block">
                            <h3><input type="checkbox" id="v_m" /><label for="v_m"> impersonnel</label></h3>
                            <div class="description">Cochez cette case, si ce verbe ne peut s’utiliser à la première personne, mais uniquement à la troisième personne du singulier ou du pluriel.</div>
                            <div class="examples_true">.</div>
                            <div class="examples_false"></div>
                        </div>
                        <div class="block">
                            <h3><input type="checkbox" id="v_ae" /><label for="v_ae">passé compsé avec l’auxiliaire “être”</label></h3>
                            <div class="description">Cochez cette case, si ce verbe s’emploie au passé composé avec l’auxilaire “être”.</div>
                            <div class="examples_true">Je suis venu. Je suis parti.</div>
                            <div class="examples_false">J’ai venu. J’ai parti.</div>
                        </div>
                        <div class="block">
                            <h3><input type="checkbox" id="v_aa" /><label for="v_aa">passé compsé avec l’auxiliaire “avoir”</label></h3>
                            <div class="description">Cochez cette case, si ce verbe s’emploie au passé composé avec l’auxilaire “avoir”.</div>
                            <div class="examples_true">J’ai mangé. J’ai prié.</div>
                            <div class="examples_false">Je suis mangé. Je suis prié.</div>
                        </div>
                    </div>

                    <div id="section_adverbe" class="section">
                        <h2>Adverbe</h2>
                        <p>Les adverbes sont invariables en genre et en nombre.</p>
                    </div>

                    <div id="section_prenom" class="section">
                        <h2>Prénom</h2>
                        <div class="container">
                            <div class="block">
                                <h3>Genre</h3>
                                <p><input type="radio" id="prenom_genre_e" name="genre" value="epi" checked /><label for="prenom_genre_e"> épicène</label></p>
                                <p><input type="radio" id="prenom_genre_m" name="genre" value="mas" /><label for="prenom_genre_m"> masculin</label></p>
                                <p><input type="radio" id="prenom_genre_f" name="genre" value="fem" /><label for="prenom_genre_f"> féminin</label></p>
                            </div>
                            <div class="block">
                                <h3>Pluriel</h3>
                                <p>Les prénoms sont invariables en nombre.</p>
                            </div>
                        </div>
                    </div>

                    <div id="section_patronyme" class="section">
                        <h2>Patronyme</h2>
                        <div class="container">
                            <div class="block">
                                <h3>Genre</h3>
                                <p><input type="radio" id="patronyme_genre_e" name="genre" value="epi" checked /><label for="patronyme_genre_e"> épicène</label></p>
                                <p><input type="radio" id="patronyme_genre_m" name="genre" value="mas" /><label for="patronyme_genre_m"> masculin</label></p>
                                <p><input type="radio" id="patronyme_genre_f" name="genre" value="fem" /><label for="patronyme_genre_f"> féminin</label></p>
                            </div>
                            <div class="block">
                                <h3>Pluriel</h3>
                                <p>Les noms de famille sont invariables en nombre.</p>
                            </div>
                        </div>
                    </div>

                    <div id="section_nom_propre" class="section">
                        <h2>Nom propre</h2>
                        <div class="container">
                            <div class="block">
                                <h3>Genre</h3>
                                <p><input type="radio" id="nom_propre_genre_e" name="genre" value="epi" checked /><label for="nom_propre_genre_e"> épicène</label></p>
                                <p><input type="radio" id="nom_propre_genre_m" name="genre" value="mas" /><label for="nom_propre_genre_m"> masculin</label></p>
                                <p><input type="radio" id="nom_propre_genre_f" name="genre" value="fem" /><label for="nom_propre_genre_f"> féminin</label></p>
                            </div>
                            <div class="block">
                                <h3>Pluriel</h3>
                                <p>Les noms propres sont invariables en nombre.</p>
                            </div>
                        </div>
                    </div>

                    <div id="section_autre" class="section">
                        <h2>Autre</h2>
                        <p>Indiquez les étiquettes grammaticales que vous voulez appliquer au mot. À utiliser seulement si vous savez ce que vous faites. Dans le cas contraire, tant pis pour vous.</p>
                        <h3>Étiquettes</h3>
                        <p><input type="text" id="tag" name="tag" maxlength="20" value="" placeholder="étiquettes" autofocus /></p>
                    </div>
                </div>
                    
                <div id="generated_words">
                    <h2>Mots générés</h2>
                    <pre></pre>
                </div>

                <div id="buttonline">
                    <div id="add_to_dictionary">Ajouter au dictionnaire</div>
                </div>
                
            </div>


        </div>

        <script src="../grammalecte/graphspell/helpers.js"></script>
        <script src="lex_editor.js"></script>
    </body>
    
</html>

Added gc_lang/fr/webext/panel/lex_editor.js version [30d4ca29ce].









































































































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

"use strict";


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


function onSelectionClick (xEvent) {
    try {
        let xElem = xEvent.target;
        if (xElem.id) {
            if (xElem.id.startsWith("select_")) {
                showSection("section_" + xElem.id.slice(7));
            } else {
                
            }
        } else {
            
        }
    }
    catch (e) {
        showError(e);
    }
}


document.getElementById("categories").addEventListener("click", onSelectionClick, false);




/*
    ACTIONS
*/

function hideAllSections () {
    for (let xElem of document.getElementById("editor").childNodes) {
        if (xElem.id) {
            xElem.style.display = "none";
        }
    }
}

function showSection (sName) {
    hideAllSections();
    if (document.getElementById(sName)) {
        document.getElementById(sName).style.display = "block";
    }
}