Grammalecte  Check-in [19e588f821]

Overview
Comment:[fx] lexicon editor: update (new draft)
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fx | multid
Files: files | file ages | folders
SHA3-256: 19e588f82167596daa0b4aee28a2a0ae649903deea893ac0004c37475951dfc8
User & Date: olr on 2018-03-09 08:26:20
Other Links: branch diff | manifest | tags
Context
2018-03-09
17:27
[fx] lexicon editor: code clarification + ui ongoing work check-in: 6ac2cd76c8 user: olr tags: fx, multid
08:26
[fx] lexicon editor: update (new draft) check-in: 19e588f821 user: olr tags: fx, multid
2018-03-07
17:32
merge trunk check-in: a693df4168 user: olr tags: multid
Changes

Modified gc_lang/fr/webext/panel/lex_editor.css from [307d727b83] to [953a945a5b].

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
..
67
68
69
70
71
72
73




74
75
76
77
78
79
80
..
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
...
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
    background: hsl(0, 0%, 100%) url(../img/lines.png);
    font: normal 16px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
    color: #505050;
}


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

................................................................................
    cursor: pointer;
}


#add_word_page {
    display: none;
}





#editor {
    display: none;
}

#categories {
    display: flex;
................................................................................
    background-color: hsl(0, 0%, 90%);
}

.separator {
    border-left: 1px solid hsl(210, 0%, 90%);
}

#section_vide {
    padding: 50px;
    font-size: 24px;
    text-align: center;
    background-color: hsl(0, 20%, 90%);
    color: hsl(0, 20%, 50%);
    border-radius: 5px;
}
.section {
    display: none;
    padding: 10px;
}

.container {
    display: flex;
................................................................................
    color: hsl(0, 0%, 20%);
}
input[placeholder] {
    color: hsl(0, 0%, 50%);
}


#actions {
    display: none;
    padding: 10px;
}

#results {
    padding: 10px;
    background-color: hsl(210, 10%, 90%);
    border-radius: 3px;







|







 







>
>
>
>







 







<
<
<
<
<
<
<
<







 







|
<







23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
..
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
..
98
99
100
101
102
103
104








105
106
107
108
109
110
111
...
164
165
166
167
168
169
170
171

172
173
174
175
176
177
178
    background: hsl(0, 0%, 100%) url(../img/lines.png);
    font: normal 16px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
    color: #505050;
}


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

................................................................................
    cursor: pointer;
}


#add_word_page {
    display: none;
}

.columns {
    display: flex;
}

#editor {
    display: none;
}

#categories {
    display: flex;
................................................................................
    background-color: hsl(0, 0%, 90%);
}

.separator {
    border-left: 1px solid hsl(210, 0%, 90%);
}









.section {
    display: none;
    padding: 10px;
}

.container {
    display: flex;
................................................................................
    color: hsl(0, 0%, 20%);
}
input[placeholder] {
    color: hsl(0, 0%, 50%);
}


#generated_words {

    padding: 10px;
}

#results {
    padding: 10px;
    background-color: hsl(210, 10%, 90%);
    border-radius: 3px;

Modified gc_lang/fr/webext/panel/lex_editor.html from [81ed66a201] to [46fac93928].

14
15
16
17
18
19
20


21
22
23
24
25
26
27
..
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
...
169
170
171
172
173
174
175

176
177
178
179
180
181
182
183

184
185
186
187
188
189
190
...
248
249
250
251
252
253
254

255
256
257
258
259
260
261
262
263
264
265
266
267


268
269
270


271
272
273
274
275
276
277
...
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

            <div id="buttons" class="container">
                <div id="lexicon_button" class="main_button">Lexique</div>
                <div id="add_word_button" class="main_button">Ajout</div>
            </div>

            <div id="add_word_page">


                <h2>Nouveau mot (lemme)</h2>
                <input type="text" id="lemma" name="lemma" maxlength="60" value="" placeholder="votre mot" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" autofocus />

                <div id="editor">

                    <div id="categories">
                        <div class="category" id="select_nom" data-tag="N">Nom, adjectif</div>
................................................................................
                        <div class="category" id="select_nom_propre" data-tag="MP">Nom propre</div>
                        <div class="category separator" id="select_autre" data-tag="X">Autre</div>
                    </div>


                    <div id="sections">

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

                        <div id="section_nom" class="section">
                            <h2>Nom, adjectif</h2>
                            <p class="typeline">
                                <input type="radio" id="up_type_nom" name="POS" value=":N" /> <label class="widelabel" for="up_type_nom">Nom</label>
                                <input type="radio" id="up_type_adj" name="POS" value=":A" /> <label class="widelabel" for="up_type_adj">Adjectif</label>
                                <input type="radio" id="up_type_nomadj" name="POS" value=":N:A" /> <label class="widelabel" for="up_type_nomadj">Nom &amp; adjectif</label>
                            </p>
................................................................................
                                <h3>Verbe modèle [optionnel]</h3>
                                <p>Indiquer un verbe qui doit servir de modèle n’est pas nécessaire pour la très grande majorité des verbes du 1ᵉʳ groupe et du 2ᵉ groupe. Failes-le seulement si les formes fléchies engendrées automatiquement ne vous satisfont pas.</p>
                                <input type="text" id="verb_pattern" name="verb_pattern" maxlength="60" value="" placeholder="verbe modèle" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ-]+$" />
                                <details>
                                    <p>Il est fortement recommandé d’appliquer les règles d’un verbe du même groupe que celui que vous créez. Mais aucune restriction n’est imposée.</p>
                                    <p><b>Classification des groupes :</b></p>
                                    <ul>

                                        <li><b>1ᵉʳ groupe</b> : verbes finissant par -<i>er</i>. Attention : contrairement au préjugé commun, ce groupe est irrégulier. Beaucoup de verbes voient leur racine modifiée dans certaines formes conjuguées :
                                        <ul>
                                            <li>ajout ou modification de diacritiques (verbes finissant par -<i>cer</i>, -<i>ecer</i>, -<i>emer</i>, -<i>ener</i>, -<i>eper</i>, -<i>erer</i>, -<i>eser</i>, -<i>ever</i>, -<i>evrer</i>, -<i>eler</i>, -<i>eter</i>, -<i>ébrer</i>, -<i>écer</i>, -<i>écher</i>, -<i>écrer</i>, -<i>éder</i>, -<i>éger</i>, -<i>égler</i>, -<i>égner</i>, -<i>égrer</i>, -<i>éguer</i>, -<i>éler</i>, -<i>émer</i>, -<i>éner</i>, -<i>éper</i>, -<i>équer</i>, -<i>érer</i>, -<i>éser</i>, -<i>éter</i>, -<i>étrer</i>, -<i>évrer</i>, -<i>éyer</i>),</li>
                                            <li>un ‹e› euphonique est ajouté sur la plupart des verbes finissant par -<i>ger</i>,</li>
                                            <li>certains verbes finissant par -<i>yer</i> remplacent éventuellement le ‹y› par un ‹i›,</li>
                                            <li>doublement irrégulier de certaines consonnes (<i>geler</i> ne se conjugue pas comme <i>appeler</i>, <i>acheter</i> ne se conjugue pas comme <i>jeter</i>)</li>
                                            <li>irrégularités diverses (<i>aller</i>, <i>envoyer</i>, <i>renvoyer</i>)…
                                        </ul></li>

                                        <li><b>2ᵉ groupe</b> : verbes finissant par -<i>ir</i>. Ce groupe est de loin le plus régulier. Mais de nombreux verbes finissant par -<i>ir</i> appartiennent au 3ᵉ groupe.</li>
                                        <li><b>3ᵉ groupe</b>. Autres verbes irréguliers.</li>
                                        <li>Les verbes <i>être</i> et <i>avoir</i> n’appartiennent à aucun groupe. Il est recommandé de ne pas s’en servir comme modèle.</li>
                                    </ul>
                                </details>
                            </div>
                        </div>
................................................................................
                            <h3>Flexion</h3>
                            <p><input type="text" id="flexion" name="flexion" maxlength="20" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="flexion" /></p>
                            <h3>Étiquettes</h3>
                            <p><input type="text" id="tags" name="tags" maxlength="20" value="" pattern="^:[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ:._-]+$" placeholder="étiquettes" /></p>
                        </div>
                    </div>
                </div>

                
                <div id="actions">
                    <h2>Mots générés</h2>
                    <h3>Forme fléchie (lemme), étiquettes</h3>
                    <pre id="results">
                        
                    </pre>
                    
                    <div id="buttonline">
                        <div id="add_to_lexicon">Ajouter au dictionnaire</div>
                    </div>
                </div>
            </div>



            <div id="lexicon_page">
                


                <h2>Votre lexique</h2>

                <div class="button_block">
                    <div id="save_button" class="fright">
                        Enregistrer
                    </div>
                    <h3>Lexique</h3>
................................................................................
                    <div id="import_button" class="fright">
                        Importer
                    </div>
                    <h3>Dictionnaire enregistré</h3>
                    <p>Dernière sauvegarde : <span id="save_date">néant</span>.</p>
                    <p>Nombre d’entrées : <span id="num_entries_saved">0</span>.</p>
                </div>

                


                <p id="no_elem_line">Aucun élément.</p>
                <p><progress id="display_progress" value="0"></p>

                <table id="table">
                    
                </table>
            </div>
        </div>






        <script src="../grammalecte/graphspell/helpers.js"></script>
        <script src="../grammalecte/graphspell/str_transform.js"></script>
        <script src="../grammalecte/graphspell/dawg.js"></script>
        <script src="../grammalecte/graphspell/ibdawg.js"></script>
        <script src="../grammalecte/fr/conj.js"></script>
        <script src="../grammalecte/fr/conj_generator.js"></script>
        <script src="lex_editor.js"></script>
    </body>
    
</html>







>
>







 







<
<
<
<







 







>
|





|
|
>







 







>
|
|
|
|







|
|
>
>



>
>







 







>
|
<
>
|
|
<





>
>
>
>












14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
34
35
36
37
38
39
40




41
42
43
44
45
46
47
...
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
...
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
...
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
317
318
319
320
321
322

      <div id="buttons" class="container">
        <div id="lexicon_button" class="main_button">Lexique</div>
        <div id="add_word_button" class="main_button">Ajout</div>
      </div>

      <div id="add_word_page">
        <div class="columns">
          <div id="new_word_generator">
            <h2>Nouveau mot (lemme)</h2>
            <input type="text" id="lemma" name="lemma" maxlength="60" value="" placeholder="votre mot" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" autofocus />

            <div id="editor">

              <div id="categories">
                <div class="category" id="select_nom" data-tag="N">Nom, adjectif</div>
................................................................................
                <div class="category" id="select_nom_propre" data-tag="MP">Nom propre</div>
                <div class="category separator" id="select_autre" data-tag="X">Autre</div>
              </div>


              <div id="sections">





                <div id="section_nom" class="section">
                  <h2>Nom, adjectif</h2>
                  <p class="typeline">
                    <input type="radio" id="up_type_nom" name="POS" value=":N" /> <label class="widelabel" for="up_type_nom">Nom</label>
                    <input type="radio" id="up_type_adj" name="POS" value=":A" /> <label class="widelabel" for="up_type_adj">Adjectif</label>
                    <input type="radio" id="up_type_nomadj" name="POS" value=":N:A" /> <label class="widelabel" for="up_type_nomadj">Nom &amp; adjectif</label>
                  </p>
................................................................................
                    <h3>Verbe modèle [optionnel]</h3>
                    <p>Indiquer un verbe qui doit servir de modèle n’est pas nécessaire pour la très grande majorité des verbes du 1ᵉʳ groupe et du 2ᵉ groupe. Failes-le seulement si les formes fléchies engendrées automatiquement ne vous satisfont pas.</p>
                    <input type="text" id="verb_pattern" name="verb_pattern" maxlength="60" value="" placeholder="verbe modèle" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ-]+$" />
                    <details>
                      <p>Il est fortement recommandé d’appliquer les règles d’un verbe du même groupe que celui que vous créez. Mais aucune restriction n’est imposée.</p>
                      <p><b>Classification des groupes :</b></p>
                      <ul>
                        <li>
                          <b>1ᵉʳ groupe</b> : verbes finissant par -<i>er</i>. Attention : contrairement au préjugé commun, ce groupe est irrégulier. Beaucoup de verbes voient leur racine modifiée dans certaines formes conjuguées :
                          <ul>
                            <li>ajout ou modification de diacritiques (verbes finissant par -<i>cer</i>, -<i>ecer</i>, -<i>emer</i>, -<i>ener</i>, -<i>eper</i>, -<i>erer</i>, -<i>eser</i>, -<i>ever</i>, -<i>evrer</i>, -<i>eler</i>, -<i>eter</i>, -<i>ébrer</i>, -<i>écer</i>, -<i>écher</i>, -<i>écrer</i>, -<i>éder</i>, -<i>éger</i>, -<i>égler</i>, -<i>égner</i>, -<i>égrer</i>, -<i>éguer</i>, -<i>éler</i>, -<i>émer</i>, -<i>éner</i>, -<i>éper</i>, -<i>équer</i>, -<i>érer</i>, -<i>éser</i>, -<i>éter</i>, -<i>étrer</i>, -<i>évrer</i>, -<i>éyer</i>),</li>
                            <li>un ‹e› euphonique est ajouté sur la plupart des verbes finissant par -<i>ger</i>,</li>
                            <li>certains verbes finissant par -<i>yer</i> remplacent éventuellement le ‹y› par un ‹i›,</li>
                            <li>doublement irrégulier de certaines consonnes (<i>geler</i> ne se conjugue pas comme <i>appeler</i>, <i>acheter</i> ne se conjugue pas comme <i>jeter</i>)</li>
                            <li>irrégularités diverses (<i>aller</i>, <i>envoyer</i>, <i>renvoyer</i>)…</li>
                          </ul>
                        </li>
                        <li><b>2ᵉ groupe</b> : verbes finissant par -<i>ir</i>. Ce groupe est de loin le plus régulier. Mais de nombreux verbes finissant par -<i>ir</i> appartiennent au 3ᵉ groupe.</li>
                        <li><b>3ᵉ groupe</b>. Autres verbes irréguliers.</li>
                        <li>Les verbes <i>être</i> et <i>avoir</i> n’appartiennent à aucun groupe. Il est recommandé de ne pas s’en servir comme modèle.</li>
                      </ul>
                    </details>
                  </div>
                </div>
................................................................................
                  <h3>Flexion</h3>
                  <p><input type="text" id="flexion" name="flexion" maxlength="20" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="flexion" /></p>
                  <h3>Étiquettes</h3>
                  <p><input type="text" id="tags" name="tags" maxlength="20" value="" pattern="^:[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ:._-]+$" placeholder="étiquettes" /></p>
                </div>
              </div>
            </div>
          </div> <!-- #new_word_generator -->
          
          <div id="generated_words">
            <h2>Mots générés</h2>
            <h3>Flexions, étiquettes</h3>
            <pre id="results">
              
            </pre>
            
            <div id="buttonline">
              <div id="add_to_lexicon">Ajouter au dictionnaire</div>
            </div>
          </div> <!-- #generated_words -->
        </div> <!-- .columns -->
      </div> <!-- #add_word_page -->


      <div id="lexicon_page">
        
        <div class="columns">
          <div>
            <h2>Votre lexique</h2>

            <div class="button_block">
              <div id="save_button" class="fright">
                Enregistrer
              </div>
              <h3>Lexique</h3>
................................................................................
              <div id="import_button" class="fright">
                Importer
              </div>
              <h3>Dictionnaire enregistré</h3>
              <p>Dernière sauvegarde : <span id="save_date">néant</span>.</p>
              <p>Nombre d’entrées : <span id="num_entries_saved">0</span>.</p>
            </div>  
          </div>


          <div>
            <p id="no_elem_line">Aucun élément.</p>
            <p><progress id="display_progress" value="0"></p>

            <table id="table">
              
            </table>
          </div>
        </div>

      </div> <!-- #lexicon_page -->

    </div>


    <script src="../grammalecte/graphspell/helpers.js"></script>
    <script src="../grammalecte/graphspell/str_transform.js"></script>
    <script src="../grammalecte/graphspell/dawg.js"></script>
    <script src="../grammalecte/graphspell/ibdawg.js"></script>
    <script src="../grammalecte/fr/conj.js"></script>
    <script src="../grammalecte/fr/conj_generator.js"></script>
    <script src="lex_editor.js"></script>
  </body>
  
</html>

Modified gc_lang/fr/webext/panel/lex_editor.js from [acda1aa76b] to [8d106a1ae2].

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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
...
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
...
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
...
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
...
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
...
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
    },

    onWrite: function () {
        if (document.getElementById("lemma").value.trim() !== "") {
            this.showElement("editor");
            oFlexGen.update();
        } else {
            this.showSection("section_vide");
            this.hideElement("editor");
            this.hideElement("actions");
        }
    },

    onWrite2: function () {
        if (document.getElementById("lemma2").value.trim() !== "") {
            this.showElement("word_section2");
            oFlexGen.update();
        } else {
            this.hideElement("word_section2");
        }
    },

    createTableHeader: function () {
        let xRowNode = createNode("tr");
        xRowNode.appendChild(createNode("th", { textContent: "·" }));
        xRowNode.appendChild(createNode("th", { textContent: "#" }));
        xRowNode.appendChild(createNode("th", { textContent: "Forme fléchie" }));
        xRowNode.appendChild(createNode("th", { textContent: "Lemme" }));
        xRowNode.appendChild(createNode("th", { textContent: "Étiquettes" }));
        return xRowNode;
    },

    createRowNode: function (n, sFlexion, sLemma, sTags) {
        let xRowNode = createNode("tr", { id: "row_" + n });
        xRowNode.appendChild(createNode("td", { textContent: "×", className: "delete_entry", title: "Effacer cette entrée" }, { id_entry: n }));
        xRowNode.appendChild(createNode("td", { textContent: n }));
        xRowNode.appendChild(createNode("td", { textContent: sFlexion }));
        xRowNode.appendChild(createNode("td", { textContent: sLemma }));
        xRowNode.appendChild(createNode("td", { textContent: sTags }));
        return xRowNode;
    },

    displayTable: function (lFlex) {
        this.clearTable();
        if (lFlex.length > 0) {
            this.showElement("display_progress");
            let xDisplayProgress = document.getElementById("display_progress");
            let xTable = document.getElementById("table");
            let n = 0;
            xDisplayProgress.max = lFlex.length;
            xDisplayProgress.value = 1;
            this.hideElement("no_elem_line");
            xTable.appendChild(this.createTableHeader());
            for (let [sFlexion, sLemma, sTags] of lFlex) {
                xTable.appendChild(this.createRowNode(n, sFlexion, sLemma, sTags));
                n += 1;
                xDisplayProgress.value += 1;
            }
            xDisplayProgress.value = xDisplayProgress.max;
            this.hideElement("display_progress");
        } else {
            this.showElement("no_elem_line");
        }
        this.updateData();
    },

    clearTable: function () {
        let xTable = document.getElementById("table");
        while (xTable.firstChild) {
            xTable.removeChild(xTable.firstChild);
        }
    },

    onTableClick: function (xEvent) {
        try {
................................................................................
    },

    addEntriesToTable: function (iStart, lFlex) {
        let xTable = document.getElementById("table");
        if (lFlex.length > 0) {
            if (document.getElementById("no_elem_line").style.display !== "none") {
                this.hideElement("no_elem_line");
                xTable.appendChild(this.createTableHeader());
            }
            for (let [sFlexion, sLemma, sTags] of lFlex) {
                xTable.appendChild(this.createRowNode(iStart, sFlexion, sLemma, sTags));
                iStart += 1;
            }
        }
        this.updateData();
    },

    deleteEntry: function (iEntry) {
................................................................................

    cMainTag: "",

    lFlexion: [],

    clear: function () {
        this.lFlexion = [];
        oWidgets.hideElement("actions");
    },

    setMainTag: function (sValue) {
        this.cMainTag = sValue;
    },

    addFlexion: function (sFlexion, sLemma, sTag) {
................................................................................
        }
        return null;
    },

    show: function () {
        let sText = "";
        for (let [sFlexion, sLemma, sTag] of this.lFlexion) {
            sText += sFlexion + " (" + sLemma + ") " + sTag + "\n";
        }
        if (sText) {
            document.getElementById("results").textContent = sText;
            oWidgets.showElement("actions");
        } else {
            oWidgets.hideElement("actions");
        }
    },

    addToLexicon: function () {
        try {
            oLexicon.addFlexions(this.lFlexion);
            document.getElementById("lemma").value = "";
            document.getElementById("lemma").focus();
            oWidgets.showSection("section_vide");
            oWidgets.hideElement("editor");
            oWidgets.hideElement("actions");
            oWidgets.clear();
            oWidgets.showElement("save_button");
            this.clear();
            this.cMainTag = "";
        }
        catch (e) {
            showError(e);
................................................................................
    nEntries: 0,
    nDeletedEntries: 0,
    nAddedEntries: 0,

    set: function (lFlexion) {
        this.lFlexion = lFlexion;
        this.resetModif();
        oWidgets.displayTable(this.lFlexion);
        if (this.lFlexion.length > 0) {
            oWidgets.showElement("export_button");
        } else {
            oWidgets.hideElement("export_button");
        }
    },

................................................................................
    },

    save: function () {
        oWidgets.hideElement("save_button");
        this.lFlexion = this.lFlexion.filter((e) => e !== null);
        oBinaryDict.build(this.lFlexion);
        this.resetModif();
        oWidgets.displayTable(this.lFlexion);
        oWidgets.updateData();
    }
}


const oBinaryDict = {
    







<

<












|









|









|
|








|

|











|
|







 







|


|







 







<







 







|

<
|
<
<
<
<







<

<







 







|







 







|







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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
...
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
...
279
280
281
282
283
284
285

286
287
288
289
290
291
292
...
436
437
438
439
440
441
442
443
444

445




446
447
448
449
450
451
452

453

454
455
456
457
458
459
460
...
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
...
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
    },

    onWrite: function () {
        if (document.getElementById("lemma").value.trim() !== "") {
            this.showElement("editor");
            oFlexGen.update();
        } else {

            this.hideElement("editor");

        }
    },

    onWrite2: function () {
        if (document.getElementById("lemma2").value.trim() !== "") {
            this.showElement("word_section2");
            oFlexGen.update();
        } else {
            this.hideElement("word_section2");
        }
    },

    createLexiconHeader: function () {
        let xRowNode = createNode("tr");
        xRowNode.appendChild(createNode("th", { textContent: "·" }));
        xRowNode.appendChild(createNode("th", { textContent: "#" }));
        xRowNode.appendChild(createNode("th", { textContent: "Forme fléchie" }));
        xRowNode.appendChild(createNode("th", { textContent: "Lemme" }));
        xRowNode.appendChild(createNode("th", { textContent: "Étiquettes" }));
        return xRowNode;
    },

    createLexiconRow: function (n, sFlexion, sLemma, sTags) {
        let xRowNode = createNode("tr", { id: "row_" + n });
        xRowNode.appendChild(createNode("td", { textContent: "×", className: "delete_entry", title: "Effacer cette entrée" }, { id_entry: n }));
        xRowNode.appendChild(createNode("td", { textContent: n }));
        xRowNode.appendChild(createNode("td", { textContent: sFlexion }));
        xRowNode.appendChild(createNode("td", { textContent: sLemma }));
        xRowNode.appendChild(createNode("td", { textContent: sTags }));
        return xRowNode;
    },

    fillLexiconTable: function (lFlex) {
        this.clearTable("table");
        if (lFlex.length > 0) {
            this.showElement("display_progress");
            let xDisplayProgress = document.getElementById("display_progress");
            let xTable = document.getElementById("table");
            let n = 0;
            xDisplayProgress.max = lFlex.length;
            xDisplayProgress.value = 1;
            this.hideElement("no_elem_line");
            xTable.appendChild(this.createLexiconHeader());
            for (let [sFlexion, sLemma, sTags] of lFlex) {
                xTable.appendChild(this.createLexiconRow(n, sFlexion, sLemma, sTags));
                n += 1;
                xDisplayProgress.value += 1;
            }
            xDisplayProgress.value = xDisplayProgress.max;
            this.hideElement("display_progress");
        } else {
            this.showElement("no_elem_line");
        }
        this.updateData();
    },

    clearTable: function (sNodeId) {
        let xTable = document.getElementById(sNodeId);
        while (xTable.firstChild) {
            xTable.removeChild(xTable.firstChild);
        }
    },

    onTableClick: function (xEvent) {
        try {
................................................................................
    },

    addEntriesToTable: function (iStart, lFlex) {
        let xTable = document.getElementById("table");
        if (lFlex.length > 0) {
            if (document.getElementById("no_elem_line").style.display !== "none") {
                this.hideElement("no_elem_line");
                xTable.appendChild(this.createLexiconHeader());
            }
            for (let [sFlexion, sLemma, sTags] of lFlex) {
                xTable.appendChild(this.createLexiconRow(iStart, sFlexion, sLemma, sTags));
                iStart += 1;
            }
        }
        this.updateData();
    },

    deleteEntry: function (iEntry) {
................................................................................

    cMainTag: "",

    lFlexion: [],

    clear: function () {
        this.lFlexion = [];

    },

    setMainTag: function (sValue) {
        this.cMainTag = sValue;
    },

    addFlexion: function (sFlexion, sLemma, sTag) {
................................................................................
        }
        return null;
    },

    show: function () {
        let sText = "";
        for (let [sFlexion, sLemma, sTag] of this.lFlexion) {
            sText += sFlexion + "\t" + sTag + "\n";
        }

        document.getElementById("results").textContent = sText;




    },

    addToLexicon: function () {
        try {
            oLexicon.addFlexions(this.lFlexion);
            document.getElementById("lemma").value = "";
            document.getElementById("lemma").focus();

            oWidgets.hideElement("editor");

            oWidgets.clear();
            oWidgets.showElement("save_button");
            this.clear();
            this.cMainTag = "";
        }
        catch (e) {
            showError(e);
................................................................................
    nEntries: 0,
    nDeletedEntries: 0,
    nAddedEntries: 0,

    set: function (lFlexion) {
        this.lFlexion = lFlexion;
        this.resetModif();
        oWidgets.fillLexiconTable(this.lFlexion);
        if (this.lFlexion.length > 0) {
            oWidgets.showElement("export_button");
        } else {
            oWidgets.hideElement("export_button");
        }
    },

................................................................................
    },

    save: function () {
        oWidgets.hideElement("save_button");
        this.lFlexion = this.lFlexion.filter((e) => e !== null);
        oBinaryDict.build(this.lFlexion);
        this.resetModif();
        oWidgets.fillLexiconTable(this.lFlexion);
        oWidgets.updateData();
    }
}


const oBinaryDict = {