Overview
Comment: | [fx] find the first editable node for context menu and shortcuts too |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk | fx |
Files: | files | file ages | folders |
SHA3-256: |
9bc8d9a943ea31b919795eefde225830 |
User & Date: | olr on 2020-04-09 07:04:54 |
Other Links: | manifest | tags |
Context
2020-04-09
| ||
11:10 | [fr] ajustements check-in: 8075dc7ae3 user: olr tags: trunk, fr | |
07:04 | [fx] find the first editable node for context menu and shortcuts too check-in: 9bc8d9a943 user: olr tags: trunk, fx | |
2020-04-08
| ||
20:12 | [fx] button: node examination update check-in: f16babf55d user: olr tags: trunk, fx | |
Changes
Modified gc_lang/fr/webext/background.js from [6e8ab066e7] to [3958c7eb7d].
︙ | ︙ | |||
338 339 340 341 342 343 344 | browser.contextMenus.create({ id: "grammar_checker_page", title: "Analyser la page", contexts: ["all"] }); browser.contextMenus.create({ id: "separator_tools", type: "separator", contexts: ["all"] }); // Tools browser.contextMenus.create({ id: "conjugueur_tab", title: "Conjugueur [onglet]", contexts: ["all"] }); browser.contextMenus.create({ id: "conjugueur_window", title: "Conjugueur [fenêtre]", contexts: ["all"] }); //browser.contextMenus.create({ id: "dictionaries", title: "Dictionnaires", contexts: ["all"] }); browser.contextMenus.create({ id: "lexicon_editor", title: "Éditeur lexical", contexts: ["all"] }); | < < | 338 339 340 341 342 343 344 345 346 347 348 349 350 351 | browser.contextMenus.create({ id: "grammar_checker_page", title: "Analyser la page", contexts: ["all"] }); browser.contextMenus.create({ id: "separator_tools", type: "separator", contexts: ["all"] }); // Tools browser.contextMenus.create({ id: "conjugueur_tab", title: "Conjugueur [onglet]", contexts: ["all"] }); browser.contextMenus.create({ id: "conjugueur_window", title: "Conjugueur [fenêtre]", contexts: ["all"] }); //browser.contextMenus.create({ id: "dictionaries", title: "Dictionnaires", contexts: ["all"] }); browser.contextMenus.create({ id: "lexicon_editor", title: "Éditeur lexical", contexts: ["all"] }); browser.contextMenus.onClicked.addListener(function (xInfo, xTab) { // xInfo = https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/contextMenus/OnClickData // xTab = https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/Tab // confusing: no way to get the node where we click?! switch (xInfo.menuItemId) { |
︙ | ︙ |
Modified gc_lang/fr/webext/content_scripts/init.js from [56313a38a6] to [d79ff895de].
︙ | ︙ | |||
170 171 172 173 174 175 176 177 178 179 180 181 182 183 | } return xNode; } catch (e) { showError(e); } }, getCaretPosition: function (xElement) { // JS awfulness again. // recepie from https://stackoverflow.com/questions/4811822/get-a-ranges-start-and-end-offsets-relative-to-its-parent-container let nCaretOffsetStart = 0; let nCaretOffsetEnd = 0; let xSelection = window.getSelection(); | > > > > > > > > > > > > > | 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 | } return xNode; } catch (e) { showError(e); } }, findOriginEditableNode: function (xNode) { if (!xNode) { return null; } if (xNode.tagName == "TEXTAREA" || xNode.tagName == "INPUT" || xNode.tagName == "IFRAME") { return xNode; } const findNode = function (xNode) { return (!xNode.parentNode.isContentEditable) ? xNode : findNode(xNode.parentNode); } return findNode(xNode); }, getCaretPosition: function (xElement) { // JS awfulness again. // recepie from https://stackoverflow.com/questions/4811822/get-a-ranges-start-and-end-offsets-relative-to-its-parent-container let nCaretOffsetStart = 0; let nCaretOffsetEnd = 0; let xSelection = window.getSelection(); |
︙ | ︙ | |||
274 275 276 277 278 279 280 281 282 283 284 285 286 287 | Send messages to the background object { sCommand: the action to perform oParam: parameters necessary for the execution of the action oInfo: all kind of informations that needs to be sent back (usually to know where to use the result) } */ parseAndSpellcheck: function (sText, sDestination) { this.xConnect.postMessage({ sCommand: "parseAndSpellcheck", oParam: { sText: sText, sCountry: "FR", bDebug: false, bContext: false }, oInfo: { sDestination: sDestination } }); }, | > > > > > > > | 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 | Send messages to the background object { sCommand: the action to perform oParam: parameters necessary for the execution of the action oInfo: all kind of informations that needs to be sent back (usually to know where to use the result) } */ checkConnection: function () { if (!this.xConnect) { this.xConnect = browser.runtime.connect({name: "content-script port"}); } }, parseAndSpellcheck: function (sText, sDestination) { this.xConnect.postMessage({ sCommand: "parseAndSpellcheck", oParam: { sText: sText, sCountry: "FR", bDebug: false, bContext: false }, oInfo: { sDestination: sDestination } }); }, |
︙ | ︙ | |||
396 397 398 399 400 401 402 | /* Commands received from the context menu (Context menu are initialized in background) */ // Grammar checker commands case "grammar_checker_editable": if (oGrammalecte.xRightClickedNode !== null) { | > | | 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 | /* Commands received from the context menu (Context menu are initialized in background) */ // Grammar checker commands case "grammar_checker_editable": if (oGrammalecte.xRightClickedNode !== null) { let xNode = oGrammalecte.findOriginEditableNode(oGrammalecte.xRightClickedNode); oGrammalecte.startGCPanel(xNode); } else { oGrammalecte.showMessage("Erreur. Le node sur lequel vous avez cliqué n’a pas pu être identifié. Sélectionnez le texte à corriger et relancez le correcteur via le menu contextuel."); } break; case "grammar_checker_page": oGrammalecte.startGCPanel(oGrammalecte.getPageText()); break; |
︙ | ︙ | |||
428 429 430 431 432 433 434 | /* Other messages from background */ listen2: function () { browser.runtime.onMessage.addListener(function (oMessage) { let {sActionRequest} = oMessage; | | | 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 | /* Other messages from background */ listen2: function () { browser.runtime.onMessage.addListener(function (oMessage) { let {sActionRequest} = oMessage; let xActiveNode = oGrammalecte.findOriginEditableNode(document.activeElement); switch (sActionRequest) { /* Commands received from the keyboard (shortcuts) */ case "shortcutGrammarChecker": if (xActiveNode && (xActiveNode.tagName == "TEXTAREA" || xActiveNode.tagName == "INPUT" || xActiveNode.isContentEditable)) { oGrammalecte.startGCPanel(xActiveNode); |
︙ | ︙ |
Modified gc_lang/fr/webext/content_scripts/menu.js from [56c56fae1e] to [60324e1838].
︙ | ︙ | |||
52 53 54 55 56 57 58 | || (xNode.tagName == "IFRAME" && this._bIframe) ) && !(xNode.dataset.grammalecte_button && xNode.dataset.grammalecte_button == "false") ) { // textarea or iframe this.accept(xNode) } else if (xNode.isContentEditable && this._bEditableNode) { // editable node | < < < | | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | || (xNode.tagName == "IFRAME" && this._bIframe) ) && !(xNode.dataset.grammalecte_button && xNode.dataset.grammalecte_button == "false") ) { // textarea or iframe this.accept(xNode) } else if (xNode.isContentEditable && this._bEditableNode) { // editable node xNode = oGrammalecte.findOriginEditableNode(xNode); if ((xNode.tagName == "P" || xNode.tagName == "DIV") && !(xNode.dataset.grammalecte_button && xNode.dataset.grammalecte_button == "false")) { this.accept(xNode); } else { this.reject(); } } else { this.reject(); |
︙ | ︙ |