Changes In Branch tbnext
Through [fb01f0170d]
Excluding Merge-Ins
This is equivalent to a diff from
94e2e47aea
to fb01f0170d
Modified gc_lang/fr/build.py
from [9ca6336e46]
to [a54b2ffcfb].
︙ | | |
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
+
+
|
for sp in os.listdir(spDict):
if os.path.isdir(spDict+"/"+sp):
hZip.write(spDict+"/"+sp+"/"+sp+".dic", "content/dictionaries/"+sp+"/"+sp+".dic")
hZip.write(spDict+"/"+sp+"/"+sp+".aff", "content/dictionaries/"+sp+"/"+sp+".aff")
hZip.close()
spfDebugProfile = dVars['win_tb_debug_extension_path'] if platform.system() == "Windows" else dVars['linux_tb_debug_extension_path']
helpers.unzip(spfZip, spfDebugProfile)
spfBetaProfile = dVars['win_tb_beta_extension_path'] if platform.system() == "Windows" else dVars['linux_tb_beta_extension_path']
helpers.unzip(spfZip, spfBetaProfile)
def _createOptionsForThunderbird (dVars):
dVars['sXULTabs'] = ""
dVars['sXULTabPanels'] = ""
# dialog options
for sSection, lOpt in dVars['lStructOpt']:
|
︙ | | |
Modified gc_lang/fr/config.ini
from [eb081b50e5]
to [5bcacb50e3].
︙ | | |
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
+
+
+
+
+
+
+
|
win_fx_nightly_path = C:\Program Files\Nightly\firefox.exe
linux_fx_dev_path = /usr/bin/firefox
linux_fx_nightly_path = /usr/bin/firefox
# Thunderbird
tb_identifier = French-GC-TB@grammalecte.net
tb_name = Grammalecte [fr]
win_tb_path = C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe
#win_tb_beta_path = C:\Program Files (x86)\Mozilla Thunderbird (Beta)\thunderbird.exe
win_tb_beta_path = C:\Program Files\Thunderbird Daily\thunderbird.exe
linux_tb_path = /usr/bin/thunderbird
linux_tb_beta_path = /usr/bin/thunderbird
win_tb_debug_extension_path = D:\_temp\tb-debug.profile\extensions\French-GC-TB@grammalecte.net
linux_tb_debug_extension_path = ~/tb-debug.profile/extensions/French-GC-TB@grammalecte.net
win_tb_beta_extension_path = D:\_temp\tb-beta.profile\extensions\French-GC-TB@grammalecte.net
linux_tb_beta_extension_path = ~/tb-beta.profile/extensions/French-GC-TB@grammalecte.net
# Set Thunderbird folder in your PATH variable
# Create a local profile:
# thunderbird -CreateProfile "debug _build\tb-debug.profile"
# Or you can use the GUI with:
# thunderbird -P
# To launch Thunderbird with the profile debug, type:
# thunderbird -P debug
|
︙ | | |
Modified gc_lang/fr/tb/chrome.manifest
from [39608040f5]
to [a8f859a2c4].
1
2
3
4
5
6
7
8
9
|
1
2
3
4
5
6
7
8
9
|
-
+
|
# https://developer.mozilla.org/en-US/docs/Chrome_Registration
content grammarchecker content/
content promiseworker ./worker/
resource grammalecte ./grammalecte-js/
locale grammarchecker fr locale/fr/
locale grammarchecker en locale/en/
skin grammarchecker classic/1.0 skin/
overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://grammarchecker/content/overlay.xul
style chrome://global/content/customizeToolbar.xul chrome://grammarchecker/content/overlay.css
style chrome://messenger/content/customizeToolbar.xul chrome://grammarchecker/content/overlay.css
|
Modified gc_lang/fr/tb/content/about.css
from [d621de3251]
to [0c03b7bf9e].
︙ | | |
21
22
23
24
25
26
27
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
#contrib {
font-size: 16px;
text-align: center;
color: hsl(210, 50%, 50%);
cursor: pointer;
}
/*
TB Next: fix dialogheaders
*/
dialogheader {
-moz-binding: url("chrome://messenger/content/generalBindings.xml#dialogheader");
margin: 0 5px 5px;
border: 1px solid ThreeDDarkShadow;
padding: 5px 8px;
background-color: Highlight;
color: HighlightText;
}
.dialogheader-title {
margin: 0 !important;
font-size: larger;
font-weight: bold;
}
|
Modified gc_lang/fr/tb/content/about.js
from [2bc9ad5ee7]
to [c5c1006b2d].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
1
2
3
4
5
6
7
8
9
10
11
12
|
-
-
-
-
-
|
// JavaScript
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
//const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
function echo (...args) {
Services.console.logStringMessage(args.join(" -- ") + "\n");
}
function openInBrowserURL (sURL) {
// method found in S3.Google.Translator
try {
openURL(sURL);
// Works in overlay.js, but not here… Seems there is no documentation available about this feature on Mozilla.org
|
︙ | | |
Modified gc_lang/fr/tb/content/about.xul
from [fc21852913]
to [f0d3116bf2].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
+
|
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://grammarchecker/content/about.css" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/about.dtd">
<dialog
id="grammalecte-about-window"
title="&windowtitle;"
orient="vertical"
buttons="accept"
width="300"
height="660"
onload="document.getElementById('grammalecte-about-window').centerWindowOnScreen();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Other elements go here -->
<description style="text-align: center;">
<image src="chrome://grammarchecker/skin/logo120_text.png" />
</description>
|
︙ | | |
30
31
32
33
34
35
36
37
38
|
31
32
33
34
35
36
37
38
39
|
-
+
|
onclick="openInTabURL('http://lamouette.org/?from=grammalecte-tb');" />
<label class="stdlabel" value="&" />
<image src="chrome://grammarchecker/skin/Algoo_logo.png" style="cursor: pointer;"
onclick="openInTabURL('https://www.algoo.fr/?from=grammalecte-tb');" />
<label id="contrib" value="&contrib;"
onclick="openInTabURL('https://www.dicollecte.org/#thanks');" />
<script type="application/x-javascript" src="about.js"/>
<script type="application/javascript" src="about.js"/>
</dialog>
|
Modified gc_lang/fr/tb/content/conjugueur.css
from [0ecfe596a1]
to [f9d44fa63b].
︙ | | |
37
38
39
40
41
42
43
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
color: hsl(210, 50%, 50%);
font-size: 13px;
font-weight: bold;
}
label.cj {
font-size: 11px;
}
/*
TB Next: fix dialogheaders
*/
dialogheader {
-moz-binding: url("chrome://messenger/content/generalBindings.xml#dialogheader");
margin: 0 5px 5px;
border: 1px solid ThreeDDarkShadow;
padding: 5px 8px;
background-color: Highlight;
color: HighlightText;
}
.dialogheader-title {
margin: 0 !important;
font-size: larger;
font-weight: bold;
}
|
Modified gc_lang/fr/tb/content/conjugueur.js
from [52fcb1616a]
to [e2b39bc09c].
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
|
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
|
-
-
+
+
-
-
-
-
-
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
|
// JavaScript
const Cu = Components.utils;
const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
const conj = require("resource://grammalecte/fr/conj.js");
//const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
//const conj = require("resource://grammalecte/fr/conj.js");
function echo (...args) {
Services.console.logStringMessage(args.join(" -- ") + "\n");
}
let oConj = {
init: function () {
let that = this;
console.log("Init conjugueur");
try {
// button
document.getElementById('conjugate').addEventListener("click", function (event) {
that.getVerbAndConjugate();
document.getElementById('conjugate').addEventListener("click", (xEvent) => {
this.getVerbAndConjugate();
});
// text field
document.getElementById('verb').addEventListener("change", function (event) {
that.getVerbAndConjugate();
document.getElementById('verb').addEventListener("change", (xEvent) => {
this.getVerbAndConjugate();
});
// options
document.getElementById('oneg').addEventListener("click", function (event) {
that._displayResults();
document.getElementById('oneg').addEventListener("click", (xEvent) => {
this._displayResults();
});
document.getElementById('opro').addEventListener("click", function (event) {
that._displayResults();
document.getElementById('opro').addEventListener("click", (xEvent) => {
this._displayResults();
});
document.getElementById('oint').addEventListener("click", function (event) {
that._displayResults();
document.getElementById('oint').addEventListener("click", (xEvent) => {
this._displayResults();
});
document.getElementById('ofem').addEventListener("click", function (event) {
that._displayResults();
document.getElementById('ofem').addEventListener("click", (xEvent) => {
this._displayResults();
});
document.getElementById('otco').addEventListener("click", function (event) {
that._displayResults();
document.getElementById('otco').addEventListener("click", (xEvent) => {
this._displayResults();
});
}
catch (e) {
Cu.reportError(e);
}
this.conjugate("être");
},
|
︙ | | |
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
-
+
|
if (!conj.isVerb(sVerb)) {
document.getElementById('verb').style = "color: #BB4411;";
} else {
document.getElementById('verb_title').textContent = sVerb;
document.getElementById('verb').style = "color: #999999;";
document.getElementById('verb').value = "";
this.oVerb = new conj.Verb(sVerb);
this.oVerb = new Verb(sVerb);
let sRawInfo = this.oVerb._sRawInfo;
document.getElementById('info').textContent = this.oVerb.sInfo;
document.getElementById('opro').textContent = "pronominal";
if (sRawInfo.endsWith("zz")) {
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = true;
document.getElementById('opro').style = "color: #CCC;";
|
︙ | | |
269
270
271
272
273
274
275
276
277
|
264
265
266
267
268
269
270
271
272
|
+
-
|
}
catch (e) {
Cu.reportError(e);
}
}
};
conj.init(helpers.loadFile("resource://grammalecte/fr/conj_data.json"));
oConj.init();
|
Modified gc_lang/fr/tb/content/conjugueur.xul
from [ee8b63b554]
to [9ec6ffe985].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
-
+
+
|
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://grammarchecker/content/conjugueur.css" type="text/css"?>
<dialog
id="grammalecte-conjugueur-window"
title="Grammalecte · Conjugueur…"
orient="vertical"
width="550"
width="580"
height="860"
buttons="extra1"
buttonlabelextra1="Conjuguer"
ondialogextra1="oConj.getVerbAndConjugate();"
defaultButton="extra1"
onload=""
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
︙ | | |
150
151
152
153
154
155
156
157
158
|
151
152
153
154
155
156
157
158
159
160
161
|
+
+
-
+
|
<label id="condb4" class="cj">.</label>
<label id="condb5" class="cj">.</label>
<label id="condb6" class="cj">.</label>
</groupbox>
</column>
</columns>
<script type="application/javascript" src="resource://grammalecte/graphspell/helpers.js"/>
<script type="application/javascript" src="resource://grammalecte/fr/conj.js"/>
<script type="application/x-javascript" src="conjugueur.js"/>
<script type="application/javascript" src="conjugueur.js"/>
</dialog>
|
Modified gc_lang/fr/tb/content/editor.js
from [71421bf6bc]
to [8eea7833f2].
︙ | | |
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
-
-
|
}
};
* _getParsableNodes (xRootNode=this.xEditor.rootElement) {
// recursive function
try {
for (let xNode of xRootNode.childNodes) {
//echo("tag: " + xNode.tagName);
if (xNode.className !== "moz-cite-prefix" && xNode.tagName !== "BLOCKQUOTE"
&& (xNode.nodeType == Node.TEXT_NODE || (xNode.nodeType == Node.ELEMENT_NODE && !xNode.textContent.startsWith(">")))
&& xNode.textContent !== "") {
//echo("<"+xNode.tagName+">["+xNode.textContent+"]");
if (xNode.tagName === undefined) {
if (!prefs.getBoolPref("bCheckSignature") && xNode.textContent.startsWith("-- ")) {
break;
}
yield xNode;
} else if (this.lParsableNodes.includes(xNode.tagName)) {
yield xNode;
|
︙ | | |
Modified gc_lang/fr/tb/content/gc_options.css
from [6199209734]
to [df2e253402].
1
2
3
4
5
6
7
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
/* CSS */
.section {
font-size: 16px;
font-weight: bold;
color: hsl(210, 50%, 50%);
}
/*
TB Next: fix dialogheaders
*/
dialogheader {
-moz-binding: url("chrome://messenger/content/generalBindings.xml#dialogheader");
margin: 0 5px 5px;
border: 1px solid ThreeDDarkShadow;
padding: 5px 8px;
background-color: Highlight;
color: HighlightText;
}
.dialogheader-title {
margin: 0 !important;
font-size: larger;
font-weight: bold;
}
|
Modified gc_lang/fr/tb/content/gc_options.js
from [f85fde1089]
to [aee78a8d90].
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
|
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
|
-
-
-
-
-
-
-
|
// JavaScript
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker.");
//const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
function echo (...args) {
Services.console.logStringMessage(args.join(" -- ") + "\n");
}
var oOptControl = {
oOptions: null,
load: function () {
this._setDialogOptions(false);
},
_setDialogOptions: function (bDefaultOptions=false) {
try {
sOptions = bDefaultOptions ? prefs.getCharPref("sGCDefaultOptions") : prefs.getCharPref("sGCOptions");
//echo(">> " + sOptions);
this.oOptions = JSON.parse(sOptions);
for (let sParam in this.oOptions) {
//echo(sParam + ":" + oOptions[sParam]);
if (document.getElementById("option_"+sParam) !== null) {
document.getElementById("option_"+sParam).checked = this.oOptions[sParam];
}
}
}
catch (e) {
Cu.reportError(e);
}
},
save: function () {
try {
for (let xNode of document.getElementsByClassName("option")) {
this.oOptions[xNode.id.slice(7)] = xNode.checked;
}
prefs.setCharPref("sGCOptions", JSON.stringify(this.oOptions));
//echo("<< " + JSON.stringify(this.oOptions));
}
catch (e) {
Cu.reportError(e);
}
},
reset: function () {
this._setDialogOptions(true);
}
}
oOptControl.load();
|
Modified gc_lang/fr/tb/content/gc_options.xul
from [8e6b4a963d]
to [94eab1cdbb].
︙ | | |
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
|
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
|
+
-
+
|
buttons="accept, cancel, extra1"
ondialogaccept="oOptControl.save();"
ondialogcancel="return;"
buttonlabelextra1="&defaultbutton.label;"
ondialogextra1="oOptControl.reset();"
defaultButton="accept"
width="400"
height="660"
onload="document.getElementById('grammalecte-gcoptions-window').centerWindowOnScreen();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Other elements go here -->
<dialogheader id="grammalecte-title" title="&dialogheader.label;" description="" />
<tabbox id="tabs_options" selectedIndex="0">
<tabs>
${sXULTabs}
</tabs>
<tabpanels>
${sXULTabPanels}
</tabpanels>
</tabbox>
<script type="application/x-javascript" src="gc_options.js" />
<script type="application/javascript" src="gc_options.js" />
</dialog>
|
Added gc_lang/fr/tb/content/options.css version [20756f5a2f].
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
/* CSS */
/*
TB Next: fix dialogheaders
*/
dialogheader {
-moz-binding: url("chrome://messenger/content/generalBindings.xml#dialogheader");
margin: 0 5px 5px;
border: 1px solid ThreeDDarkShadow;
padding: 5px 8px;
background-color: Highlight;
color: HighlightText;
}
.dialogheader-title {
margin: 0 !important;
font-size: larger;
font-weight: bold;
}
|
| | | | | | | | | | | | | | | | | |
Added gc_lang/fr/tb/content/options.js version [73166a402f].
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
// JavaScript
"use strict";
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker.");
var oOptControl = {
load: function () {
try {
document.getElementById('check_signature').checked = prefs.getBoolPref('bCheckSignature');
}
catch (e) {
Cu.reportError(e);
}
},
save: function () {
try {
prefs.setBoolPref('bCheckSignature', document.getElementById('check_signature').checked);
}
catch (e) {
Cu.reportError(e);
}
}
}
oOptControl.load();
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Modified gc_lang/fr/tb/content/options.xul
from [4546c76788]
to [8d98ebc654].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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
|
-
+
+
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
-
-
-
-
-
+
+
+
|
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://grammarchecker/content/options.css" type="text/css"?>
<!DOCTYPE prefwindow SYSTEM "chrome://grammarchecker/locale/options.dtd">
<!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/options.dtd">
<dialog
<prefwindow id="grammarcheckerPreferences"
title="&prefwindow.title;"
id="grammalecte-options-window"
title="&window.title;"
orient="vertical"
buttons="accept, cancel"
ondialogaccept="oOptControl.save();"
ondialogcancel="return;"
defaultButton="accept"
width="400"
height="280"
onload="document.getElementById('grammalecte-options-window').centerWindowOnScreen();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Other elements go here -->
<prefpane id="pane1" label="&pane1.title;">
<dialogheader id="grammalecte-title" title="&pane1.title;" description="" />
<preferences>
<dialogheader id="grammalecte-title" title="&dialogheader.label;" description="" />
<preference id="check_signature" name="extensions.grammarchecker.bCheckSignature" type="bool" />
<!--<preference id="gc_options" name="extensions.grammarchecker.sGCOptions" type="string" />
<preference id="tf_options" name="extensions.grammarchecker.sTFOptions" type="string" />
<preference id="mothertongue" name="extensions.grammarchecker.mothertongue" type="string"/>-->
</preferences>
<checkbox label="&check_signature.label;" accesskey="&check_signature.accesskey;" preference="check_signature"/>
<!--<label accesskey="&gc_options.accesskey;" control="texturlpref1">&gc_options.label;</label><textbox id="texturlpref1" preference="gc_options"/>
<checkbox id="check_signature" label="&check_signature.label;" accesskey="&check_signature.accesskey;" />
<label accesskey="&tf_options.accesskey;" control="texturlpref2">&tf_options.label;</label><textbox id="texturlpref2" preference="tf_options"/>
<label accesskey="&mothertongue.accesskey;" control="textmothertongue">&mothertongue.label;</label><textbox id="textmothertongue" preference="mothertongue"/>-->
<!--<description>&panel.description;</description>-->
</prefpane>
</prefwindow>
<script type="application/javascript" src="options.js" />
</dialog>
|
Modified gc_lang/fr/tb/content/overlay.css
from [778a1d344a]
to [8c73a24356].
︙ | | |
183
184
185
186
187
188
189
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
/* elems */
.bs, .pleo, .neg, .redon1, .redon2, .mc, .date, .notype {
background-color: hsl(180, 50%, 40%);
color: hsl(180, 10%, 96%);
border-radius: 3px;
}
/*
TB Next: fix dialogheaders
*/
dialogheader {
-moz-binding: url("chrome://messenger/content/generalBindings.xml#dialogheader");
margin: 0 5px 5px;
border: 1px solid ThreeDDarkShadow;
padding: 5px 8px;
background-color: Highlight;
color: HighlightText;
}
.dialogheader-title {
margin: 0 !important;
font-size: larger;
font-weight: bold;
}
|
Modified gc_lang/fr/tb/content/overlay.js
from [0f3db968a0]
to [fcc7e4e2d6].
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
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
-
+
-
-
-
-
-
+
+
-
-
-
-
-
-
|
// JavaScript
"use strict";
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
//const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
const { BasePromiseWorker } = Cu.import('resource://gre/modules/PromiseWorker.jsm', {});
const Task = Cu.import("resource://gre/modules/Task.jsm").Task;
const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker.");
//Cu.import("resource://gre/modules/Console.jsm"); // doesn’t work
//const xConsole = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
//xConsole.logStringMessage("Grammalecte: " + args.join(" · ")); // useless now. Use: Services.console.logStringMessage("***");
const text = require("resource://grammalecte/text.js");
const tf = require("resource://grammalecte/fr/textformatter.js");
//const text = require("resource://grammalecte/text.js");
//const tf = require("resource://grammalecte/fr/textformatter.js");
function echo (...args) {
dump(args.join(" -- ") + "\n"); // obsolete since TB 52?
Services.console.logStringMessage("Grammalecte: " + args.join(" · "));
}
const oConverterToExponent = {
dNumbers: new Map ([
["1", "¹"], ["2", "²"], ["3", "³"], ["4", "⁴"], ["5", "⁵"],
["6", "⁶"], ["7", "⁷"], ["8", "⁸"], ["9", "⁹"], ["0", "⁰"]
]),
|
︙ | | |
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
|
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
|
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
|
var oGrammarChecker = {
// you must use var to be able to call this object from elsewhere
xGCEWorker: null,
bDictActive: null,
loadGC: function () {
if (this.xGCEWorker === null) {
// Grammar checker
echo('Loading Grammalecte');
console.log('Loading Grammalecte');
this.xGCEWorker = new BasePromiseWorker('chrome://promiseworker/content/gce_worker.js');
let xPromise = this.xGCEWorker.post('loadGrammarChecker', [prefs.getCharPref("sGCOptions"), "Thunderbird"]);
xPromise.then(
function (aVal) {
echo(aVal);
console.log(aVal);
prefs.setCharPref("sGCOptions", aVal);
},
function (aReason) { echo('Promise rejected - ', aReason); }
function (aReason) { console.log('Promise rejected - ', aReason); }
).catch(
function (aCaught) { echo('Promise Error - ', aCaught); }
function (aCaught) { console.log('Promise Error - ', aCaught); }
);
}
},
fullTests: function () {
echo('Performing tests... Wait...');
console.log('Performing tests... Wait...');
let xPromise = this.xGCEWorker.post('fullTests', ['{"nbsp":true, "esp":true, "unit":true, "num":true}']);
xPromise.then(
function (aVal) {
echo('Done.');
echo(aVal);
console.log('Done.');
console.log(aVal);
},
function (aReason) { echo('Promise rejected', aReason); }
function (aReason) { console.log('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
function (aCaught) { console.log('Promise Error', aCaught); }
);
},
test: function (sText) {
echo("Test...");
console.log("Test...");
let xPromise = this.xGCEWorker.post('parse', [sText, "FR", true]);
xPromise.then(
function (aVal) {
let lErr = JSON.parse(aVal);
if (lErr.length > 0) {
for (let dErr of lErr) {
echo(text.getReadableError(dErr));
console.log(text.getReadableError(dErr));
}
} else {
echo("no error found");
console.log("no error found");
}
},
function (aReason) { echo('Promise rejected', aReason); }
function (aReason) { console.log('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
function (aCaught) { console.log('Promise Error', aCaught); }
);
},
setOptions: function () {
echo('Set options');
console.log('Set options');
let xPromise = this.xGCEWorker.post('setOptions', [prefs.getCharPref("sGCOptions")]);
xPromise.then(
function (aVal) {
echo(aVal);
console.log(aVal);
prefs.setCharPref("sGCOptions", aVal);
},
function (aReason) { echo('Promise rejected', aReason); }
function (aReason) { console.log('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
function (aCaught) { console.log('Promise Error', aCaught); }
);
},
resetOptions: function () {
let xPromise = this.xGCEWorker.post('resetOptions');
xPromise.then(
function (aVal) {
echo(aVal);
console.log(aVal);
prefs.setCharPref("sGCOptions", aVal);
},
function (aReason) { echo('Promise rejected', aReason); }
function (aReason) { console.log('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
function (aCaught) { console.log('Promise Error', aCaught); }
);
},
_getGCResultPromise: function (sParagraph, sLang, bDebug, bContext) {
// For some reason, you can’t use result of PromiseWorker within a Task,
// you have to wrap it in a common Promise. Task and yield can be replaced with async / await when it is available.
let that = this;
return new Promise(function (resolve, reject) {
|
︙ | | |
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
-
+
|
try {
let that = this;
let xResultNode = document.getElementById("resnode"+iParagraph);
xResultNode.textContent = "…………… réanalyse en cours ……………";
let sParagraph = xEditor.getParagraph(iParagraph);
let xPromise = this._getGCResultPromise(sParagraph, "FR", false, false);
xPromise.then(function (res) {
//echo("res: " + res);
//console.log("res: " + res);
xResultNode.textContent = "";
let oRes = JSON.parse(res);
if (oRes.aGrammErr.length > 0 || oRes.aSpellErr.length > 0) {
that.fillResultNode(xResultNode, xEditor, sParagraph, iParagraph, oRes.aGrammErr, oRes.aSpellErr);
}
}, function (res) {
xResultNode.textContent = "Erreur: " + res;
|
︙ | | |
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
|
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
|
-
+
|
}
});
xNodeSuggLine.appendChild(xNodeSuggButton);
xNodeDiv.appendChild(xNodeSuggLine);
return xNodeDiv;
},
loadUI: function() {
echo("loadUI");
console.log("loadUI");
this._strings = document.getElementById("grammarchecker-strings");
let that = this;
let nsGrammarCommand = {
isCommandEnabled: function (aCommand, dummy) {
return (IsDocumentEditable() && !IsInHTMLSourceMode());
},
getCommandStateParams: function (aCommand, aParams, aRefCon) {},
|
︙ | | |
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
|
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
|
-
+
-
+
-
+
-
+
-
+
|
this.closePanel();
},
onOpenGCOptions: function (e) {
let that = this;
let xPromise = this.xGCEWorker.post('getDefaultOptions');
xPromise.then(
function (aVal) {
echo(aVal);
console.log(aVal);
prefs.setCharPref("sGCDefaultOptions", aVal);
},
function (aReason) { echo('Promise rejected', aReason); }
function (aReason) { console.log('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
function (aCaught) { console.log('Promise Error', aCaught); }
).then(
function () {
that.openDialog("chrome://grammarchecker/content/gc_options.xul", "", "chrome, dialog, modal, resizable=no");
that.setOptions();
},
function (aReason) { echo('Error options dialog', aReason); }
function (aReason) { console.log('Error options dialog', aReason); }
).catch(
function (aCaught) { echo('Error', aCaught); }
function (aCaught) { console.log('Error', aCaught); }
);
},
onOpenSpellOptions: function (e) {
this.openDialog("chrome://grammarchecker/content/spell_options.xul", "", "chrome, dialog, modal, resizable=no");
},
onOpenOptions: function (e) {
this.openDialog("chrome://grammarchecker/content/options.xul", "", "chrome, dialog, modal, resizable=no");
|
︙ | | |
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
|
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
|
-
+
|
}
},
saveOptions: function () {
let oOptions = {};
for (let xNode of document.getElementsByClassName("option")) {
oOptions[xNode.id] = xNode.checked;
}
//echo("save options: " + JSON.stringify(oOptions));
//console.log("save options: " + JSON.stringify(oOptions));
prefs.setCharPref("sTFOptions", JSON.stringify(oOptions));
},
setOptionsInPanel: function (oOptions) {
for (let sOptName in oOptions) {
//console.log(sOptName + ":" + oOptions[sOptName]);
if (document.getElementById(sOptName) !== null) {
document.getElementById(sOptName).checked = oOptions[sOptName];
|
︙ | | |
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
|
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
|
-
-
+
+
-
+
|
Cu.reportError(e);
}
return sText;
},
formatText: function (sText, sOptName) {
let nCount = 0;
try {
if (!tf.oReplTable.hasOwnProperty(sOptName)) {
echo("# Error. TF: there is no option “" + sOptName+ "”.");
if (!oReplTable.hasOwnProperty(sOptName)) {
console.log("# Error. TF: there is no option “" + sOptName+ "”.");
return [sText, nCount];
}
for (let [zRgx, sRep] of tf.oReplTable[sOptName]) {
for (let [zRgx, sRep] of oReplTable[sOptName]) {
nCount += (sText.match(zRgx) || []).length;
sText = sText.replace(zRgx, sRep);
}
}
catch (e) {
Cu.reportError(e);
}
|
︙ | | |
Modified gc_lang/fr/tb/content/overlay.xul
from [f4f8642995]
to [32fb17e890].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
-
-
-
-
+
+
+
+
+
+
|
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://grammarchecker/content/overlay.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://grammarchecker/locale/overlay.dtd">
<overlay id="grammarchecker-overlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"/>
<script type="application/x-javascript" src="overlay.js"/>
<script type="application/x-javascript" src="spellchecker.js"/>
<script type="application/x-javascript" src="editor.js"/>
<script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
<script type="application/javascript" src="resource://grammalecte/text.js"/>
<script type="application/javascript" src="resource://grammalecte/fr/textformatter.js"/>
<script type="application/javascript" src="overlay.js"/>
<script type="application/javascript" src="spellchecker.js"/>
<script type="application/javascript" src="editor.js"/>
<stringbundleset id="stringbundleset">
<stringbundle id="grammarchecker-strings" src="chrome://grammarchecker/locale/grammarchecker.properties"/>
</stringbundleset>
<commandset id="composerEditMenuItems" commandupdater="true"
events="focus"
|
︙ | | |
Modified gc_lang/fr/tb/content/spell_options.css
from [2179034562]
to [870a0276f1].
︙ | | |
11
12
13
14
15
16
17
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
font-weight: bold;
color: hsl(210, 50%, 50%);
}
.dicdescr {
margin-left: 27px;
}
/*
TB Next: fix dialogheaders
*/
dialogheader {
-moz-binding: url("chrome://messenger/content/generalBindings.xml#dialogheader");
margin: 0 5px 5px;
border: 1px solid ThreeDDarkShadow;
padding: 5px 8px;
background-color: Highlight;
color: HighlightText;
}
.dialogheader-title {
margin: 0 !important;
font-size: larger;
font-weight: bold;
}
|
Modified gc_lang/fr/tb/content/spell_options.js
from [9ebffece09]
to [4444b40148].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
-
-
-
-
-
-
|
// JavaScript
"use strict";
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker.");
const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
function echo (...args) {
Services.console.logStringMessage(args.join(" -- ") + "\n");
}
var oDialogControl = {
load: function () {
try {
document.getElementById('fr-FR-modern').checked = prefs.getBoolPref('bDictModern');
document.getElementById('fr-FR-classic').checked = prefs.getBoolPref('bDictClassic');
|
︙ | | |
Modified gc_lang/fr/tb/content/spell_options.xul
from [5453a7e2cc]
to [5934b250e2].
︙ | | |
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
-
+
|
id="grammalecte-spelloptions-window"
title="&window.title;"
orient="vertical"
buttons="accept,cancel"
ondialogaccept="oDialogControl.setDictionaries();"
ondialogcancel="return;"
width="400"
height="660"
height="620"
onload="oDialogControl.load();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Other elements go here -->
<dialogheader id="grammalecte-title" title="&dialogheader.label;" description=""/>
|
︙ | | |
30
31
32
33
34
35
36
37
38
39
40
|
30
31
32
33
34
35
36
37
38
39
40
|
-
-
+
+
|
<description class="dicdescr">&option.classic.descr;</description>
<checkbox id="fr-FR-reform" class="option" label="&option.reform.label;" />
<description class="dicdescr">&option.reform.descr;</description>
<checkbox id="fr-FR-classic-reform" class="option" label="&option.allvar.label;" />
<description class="dicdescr">&option.allvar.descr;</description>
</groupbox>
<script type="application/x-javascript" src="spell_options.js"/>
<script type="application/x-javascript" src="spellchecker.js"/>
<script type="application/javascript" src="spell_options.js"/>
<script type="application/javascript" src="spellchecker.js"/>
</dialog>
|
Modified gc_lang/fr/tb/content/spellchecker.js
from [3be1484aff]
to [bf36be002a].
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
|
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
|
-
+
-
-
+
+
-
+
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
// JavaScript
/*
Hunspell wrapper
Hunspell wrapper
XPCOM obsolete (?), but there is nothing else...
Overly complicated and weird. To throw away ASAP if possible.
XPCOM obsolete (?), but there is nothing else...
Overly complicated and weird. To throw away ASAP if possible.
And you can’t access to this from a PromiseWorker (it sucks).
And you can’t access to this from a PromiseWorker (it sucks).
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozISpellCheckingEngine
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Using_spell_checking_in_XUL
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile
https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozISpellCheckingEngine
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Using_spell_checking_in_XUL
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile
https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm
*/
"use strict";
/*
// Loaded in another file
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
*/
const FileUtils = Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils;
const AddonManager = Cu.import("resource://gre/modules/AddonManager.jsm").AddonManager;
/*
const parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils);
const persodict = Cc["@mozilla.org/spellchecker/personaldictionary;1"].getService(Ci.mozIPersonalDictionary);
*/
const system = require("sdk/system");
var oSpellControl = {
xSCEngine: null,
init: function () {
if (this.xSCEngine === null) {
try {
let sSpellchecker = "@mozilla.org/spellchecker/myspell;1";
if ("@mozilla.org/spellchecker/hunspell;1" in Cc) {
sSpellchecker = "@mozilla.org/spellchecker/hunspell;1";
}
if ("@mozilla.org/spellchecker/engine;1" in Cc) {
sSpellchecker = "@mozilla.org/spellchecker/engine;1";
}
this.xSCEngine = Cc[sSpellchecker].getService(Ci.mozISpellCheckingEngine);
}
catch (e) {
echo("Can’t initiate the spellchecker.");
Cu.reportError(e);
}
}
},
getDictionariesList: function () {
this.init();
try {
let l = {};
let c = {};
this.xSCEngine.getDictionaryList(l, c);
return l.value;
}
catch (e) {
Cu.reportError(e);
return [];
}
},
setDictionary: function (sLocale) {
if (this.getDictionariesList().includes(sLocale)) {
try {
this.xSCEngine.dictionary = sLocale; // en-US, fr, etc.
return true;
}
catch (e) {
Cu.reportError(e);
return false;
}
} else {
echo("Warning. No dictionary for locale: " + sLocale);
echo("Existing dictionaries: " + this.getDictionariesList().join(" | "));
}
return false;
},
check: function (sWord) {
// todo: check in personal dict?
try {
return this.xSCEngine.check(sWord);
}
catch (e) {
Cu.reportError(e);
return false;
}
},
suggest: function (sWord) {
try {
let lSugg = {};
this.xSCEngine.suggest(sWord, lSugg, {});
return lSugg.value;
// lSugg.value is a JavaScript Array of strings
}
catch (e) {
Cu.reportError(e);
return ['#Erreur.'];
}
},
addDirectory: function (sFolder) {
try {
let xNsiFolder = new FileUtils.File(sFolder);
this.xSCEngine.addDirectory(xNsiFolder);
}
catch (e) {
echo("Unable to add directory: " + sFolder);
Cu.reportError(e);
}
},
removeDirectory: function (sFolder) {
// does not work but no exception raised (bug?)
try {
let xNsiFolder = new FileUtils.File(sFolder);
this.xSCEngine.removeDirectory(xNsiFolder);
}
catch (e) {
echo("Unable to remove directory: " + sFolder);
Cu.reportError(e);
}
},
setExtensionDictFolder: function (sDictName, bActivate) {
try {
let that = this;
let sPath = "/content/dictionaries/" + sDictName;
AddonManager.getAddonByID("French-GC-TB@grammalecte.net", function (addon) {
let xURI = addon.getResourceURI(sPath);
//console.log("> " + xURI.path);
let sFolder = xURI.path;
if (system.platform === "winnt") {
sFolder = sFolder.slice(1).replace(/\//g, "\\\\");
}
//console.log("> " + sFolder);
if (bActivate) {
that.addDirectory(sFolder);
} else {
that.removeDirectory(sFolder);
}
});
}
catch (e) {
echo("Unable to add extension folder");
Cu.reportError(e);
}
}
xSCEngine: null,
init: function () {
if (this.xSCEngine === null) {
try {
let sSpellchecker = "@mozilla.org/spellchecker/myspell;1";
if ("@mozilla.org/spellchecker/hunspell;1" in Cc) {
sSpellchecker = "@mozilla.org/spellchecker/hunspell;1";
}
if ("@mozilla.org/spellchecker/engine;1" in Cc) {
sSpellchecker = "@mozilla.org/spellchecker/engine;1";
}
this.xSCEngine = Cc[sSpellchecker].getService(Ci.mozISpellCheckingEngine);
}
catch (e) {
console.log("Can’t initiate the spellchecker.");
Cu.reportError(e);
}
}
},
getDictionariesList: function () {
this.init();
try {
let l = {};
let c = {};
this.xSCEngine.getDictionaryList(l, c);
return l.value;
}
catch (e) {
Cu.reportError(e);
return [];
}
},
setDictionary: function (sLocale) {
if (this.getDictionariesList().includes(sLocale)) {
try {
this.xSCEngine.dictionary = sLocale; // en-US, fr, etc.
return true;
}
catch (e) {
Cu.reportError(e);
return false;
}
} else {
console.log("Warning. No dictionary for locale: " + sLocale);
console.log("Existing dictionaries: " + this.getDictionariesList().join(" | "));
}
return false;
},
check: function (sWord) {
// todo: check in personal dict?
try {
return this.xSCEngine.check(sWord);
}
catch (e) {
Cu.reportError(e);
return false;
}
},
suggest: function (sWord) {
try {
let lSugg = {};
this.xSCEngine.suggest(sWord, lSugg, {});
return lSugg.value;
// lSugg.value is a JavaScript Array of strings
}
catch (e) {
Cu.reportError(e);
return ['#Erreur.'];
}
},
addDirectory: function (sFolder) {
try {
let xNsiFolder = new FileUtils.File(sFolder);
this.xSCEngine.addDirectory(xNsiFolder);
}
catch (e) {
console.log("Unable to add directory: " + sFolder);
Cu.reportError(e);
}
},
removeDirectory: function (sFolder) {
// does not work but no exception raised (bug?)
try {
let xNsiFolder = new FileUtils.File(sFolder);
this.xSCEngine.removeDirectory(xNsiFolder);
}
catch (e) {
console.log("Unable to remove directory: " + sFolder);
Cu.reportError(e);
}
},
setExtensionDictFolder: function (sDictName, bActivate) {
try {
let that = this;
let sPath = "/content/dictionaries/" + sDictName;
AddonManager.getAddonByID("French-GC-TB@grammalecte.net", function (addon) {
let xURI = addon.getResourceURI(sPath);
//console.log(xURI);
let sFolder = xURI.filePath;
if (sFolder !== undefined) {
if (/^\/[A-Z]:\//.test(sFolder)) {
// Windows path
sFolder = sFolder.slice(1).replace(/\//g, "\\\\");
}
console.log("folder: " + sFolder);
if (bActivate) {
that.addDirectory(sFolder);
} else {
that.removeDirectory(sFolder);
}
}
});
}
catch (e) {
console.log("Unable to add extension folder");
Cu.reportError(e);
}
}
};
|
Modified gc_lang/fr/tb/install.rdf
from [c98ee16b92]
to [95227f9159].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-
+
|
<?xml version="1.0" encoding="UTF-8"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>${tb_identifier}</em:id>
<em:name>${tb_name}</em:name>
<em:type>2</em:type>
<em:version>${version}</em:version>
<em:creator>${author}</em:creator>
<em:description>${description}</em:description>
<em:homepageURL>${link}</em:homepageURL>
<em:optionsURL>chrome://grammarchecker/content/options.xul</em:optionsURL>
<!--<em:optionsURL>chrome://grammarchecker/content/options.xul</em:optionsURL>-->
<em:unpack>true</em:unpack>
<em:targetApplication>
<Description>
<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id> <!-- thunderbird -->
<em:minVersion>45.8.0</em:minVersion>
<em:maxVersion>55.*</em:maxVersion>
|
︙ | | |
Modified gc_lang/fr/tb/locale/en/options.dtd
from [071253db94]
to [5fe56718ba].
1
2
3
4
5
6
7
|
1
2
3
4
5
6
|
-
-
+
+
-
-
-
+
+
|
<!ENTITY prefwindow.title "Grammalecte · Options">
<!ENTITY pane1.title "Other options">
<!ENTITY window.title "Grammalecte · Options">
<!ENTITY dialogheader.label "Other options">
<!ENTITY pane1.description "Options are available in the menu Grammalecte in composing windows.">
<!ENTITY mothertongue.label "Mother tongue:">
<!ENTITY mothertongue.accesskey "M">
<!ENTITY check_signature.label "Check signature text (in text mode)">
<!ENTITY check_signature.accesskey "C">
|
Modified gc_lang/fr/tb/locale/fr/options.dtd
from [a50c0f39f8]
to [37a043f079].
1
2
3
4
5
6
7
|
1
2
3
4
|
-
-
+
+
-
-
-
|
<!ENTITY prefwindow.title "Grammalecte · Options">
<!ENTITY pane1.title "Autres options">
<!ENTITY window.title "Grammalecte · Options">
<!ENTITY dialogheader.label "Autres options">
<!ENTITY pane1.description "Les options sont disponibles dans le menu Grammalecte des fenêtres de rédaction.">
<!ENTITY mothertongue.label "Langue maternelle:">
<!ENTITY mothertongue.accesskey "M">
<!ENTITY check_signature.label "Vérifier le texte de la signature (en mode texte)">
<!ENTITY check_signature.accesskey "V">
|
Modified graphspell-js/helpers.js
from [b70dea39e2]
to [d93f7e0941].
︙ | | |
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
-
-
+
-
-
-
-
-
-
|
loadFile: function (spf) {
// load ressources in workers (suggested by Mozilla extensions reviewers)
// for more options have a look here: https://gist.github.com/Noitidart/ec1e6b9a593ec7e3efed
// if not in workers, use sdk/data.load() instead
try {
let xRequest;
if (typeof XMLHttpRequest !== "undefined") {
xRequest = new XMLHttpRequest();
xRequest = new XMLHttpRequest();
} else {
// JS sucks again… necessary for Thunderbird
let { Cc, Ci } = require("chrome");
xRequest = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
xRequest.QueryInterface(Ci.nsIXMLHttpRequest);
}
xRequest.open('GET', spf, false); // 3rd arg is false for synchronous, sync is acceptable in workers
xRequest.overrideMimeType('text/json');
xRequest.send();
return xRequest.responseText;
}
catch (e) {
this.logerror(e);
|
︙ | | |
Modified make.py
from [dbe9299caf]
to [4008460ad6].
︙ | | |
361
362
363
364
365
366
367
368
369
370
371
372
373
374
|
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
|
+
|
xParser.add_argument("-pm", "--perf_memo", help="run performance tests and store results in perf_memo.txt", action="store_true")
xParser.add_argument("-js", "--javascript", help="JavaScript build for Firefox", action="store_true")
xParser.add_argument("-aed", "--add_extended_dictionary", help="add extended dictionary to the build", action="store_true")
xParser.add_argument("-apd", "--add_personal_dictionary", help="add personal dictionary to the build", action="store_true")
xParser.add_argument("-fx", "--firefox", help="Launch Firefox Developper for WebExtension testing", action="store_true")
xParser.add_argument("-we", "--web_ext", help="Launch Firefox Nightly for WebExtension testing", action="store_true")
xParser.add_argument("-tb", "--thunderbird", help="Launch Thunderbird", action="store_true")
xParser.add_argument("-tbb", "--thunderbird_beta", help="Launch Thunderbird Beta", action="store_true")
xParser.add_argument("-i", "--install", help="install the extension in Writer (path of unopkg must be set in config.ini)", action="store_true")
xArgs = xParser.parse_args()
if xArgs.build_data:
xArgs.build_data_before = True
xArgs.build_data_after = True
|
︙ | | |
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
|
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
|
+
+
-
+
+
+
+
+
|
else:
# Firefox Nightly edition
spfFirefox = dVars['win_fx_nightly_path'] if platform.system() == "Windows" else dVars['linux_fx_nightly_path']
os.system(r'web-ext run --firefox="' + spfFirefox + '" --browser-console --firefox-profile=debug')
# Thunderbird
if xArgs.thunderbird:
spfThunderbird = '"'+dVars['win_tb_path']+'"' if platform.system() == "Windows" else dVars['linux_tb_path']
print(spfThunderbird)
os.system("thunderbird -jsconsole -P debug")
os.system(spfThunderbird + ' -jsconsole -P debug')
if xArgs.thunderbird_beta:
spfThunderbird = '"'+dVars['win_tb_beta_path']+'"' if platform.system() == "Windows" else dVars['linux_tb_beta_path']
print(spfThunderbird)
os.system(spfThunderbird + ' -jsconsole -P beta')
else:
print("Folder not found: gc_lang/"+sLang)
oNow = datetime.datetime.now()
print("============== MAKE GRAMMALECTE [finished] at {0.hour:>2} h {0.minute:>2} min {0.second:>2} s ==============".format(oNow))
if __name__ == '__main__':
main()
|