Overview
Comment: | [fx] modify node control for editable node |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | fx | webext3 |
Files: | files | file ages | folders |
SHA3-256: |
f31e7e50921528f6c6c0be07a94b1225 |
User & Date: | olr on 2017-10-18 07:58:00 |
Other Links: | branch diff | manifest | tags |
Context
2017-10-18
| ||
10:59 | [fx] WebExt: better message box check-in: 98bc289244 user: olr tags: fx, webext3 | |
07:58 | [fx] modify node control for editable node check-in: f31e7e5092 user: olr tags: fx, webext3 | |
2017-10-17
| ||
20:13 | [fx] WebExt: some code reformatting check-in: ed3fc18125 user: olr tags: fx, webext3 | |
Changes
Modified gc_lang/fr/webext/content_scripts/panel.css from [d6be17e22c] to [6e70e541a6].
︙ | ︙ | |||
102 103 104 105 106 107 108 | .grammalecte_panel_message { margin: 10px; padding: 10px; border-radius: 5px; background-color: hsl(0, 50%, 40%); color: hsl(0, 50%, 96%); | | | 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | .grammalecte_panel_message { margin: 10px; padding: 10px; border-radius: 5px; background-color: hsl(0, 50%, 40%); color: hsl(0, 50%, 96%); font-size: 16px; } /* Spinner */ .grammalecte_spinner { |
︙ | ︙ |
Modified gc_lang/fr/webext/content_scripts/panel_gc.js from [d202e2bfd4] to [9caafebd9f].
︙ | ︙ | |||
48 49 50 51 52 53 54 | this.aIgnoredErrors = new Set(); this.xContentNode = oGrammalecte.createNode("div", {id: "grammalecte_gc_panel_content"}); this.xParagraphList = oGrammalecte.createNode("div", {id: "grammalecte_paragraph_list"}); this.xContentNode.appendChild(this.xParagraphList); this.xPanelContent.addEventListener("click", onGrammalecteGCPanelClick, false); this.oTooltip = new GrammalecteTooltip(this.xContentNode); this.xPanelContent.appendChild(this.xContentNode); | | > | | > > > | | | | 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 | this.aIgnoredErrors = new Set(); this.xContentNode = oGrammalecte.createNode("div", {id: "grammalecte_gc_panel_content"}); this.xParagraphList = oGrammalecte.createNode("div", {id: "grammalecte_paragraph_list"}); this.xContentNode.appendChild(this.xParagraphList); this.xPanelContent.addEventListener("click", onGrammalecteGCPanelClick, false); this.oTooltip = new GrammalecteTooltip(this.xContentNode); this.xPanelContent.appendChild(this.xContentNode); this.oNodeControl = new GrammalecteNodeControl(); } start (xNode=null) { this.oTooltip.hide(); this.clear(); if (xNode) { if (xNode.tagName == "TEXTAREA") { this.oNodeControl.setNode(xNode); } else { this.addMessage("Cette zone de texte n’est pas un champ de formulaire “textarea” mais un node HTML éditable. Les modifications ne seront pas répercutées automatiquement. Une fois votre texte corrigé, vous pouvez utiliser le bouton ‹∑› pour copier le texte dans le presse-papiers."); } } } clear () { while (this.xParagraphList.firstChild) { this.xParagraphList.removeChild(this.xParagraphList.firstChild); } this.aIgnoredErrors.clear(); } hide () { this.xPanel.style.display = "none"; this.oNodeControl.clear(); } addParagraphResult (oResult) { try { if (oResult && (oResult.sParagraph.trim() !== "" || oResult.aGrammErr.length > 0 || oResult.aSpellErr.length > 0)) { let xNodeDiv = oGrammalecte.createNode("div", {className: "grammalecte_paragraph_block"}); // actions let xActionsBar = oGrammalecte.createNode("div", {className: "grammalecte_paragraph_actions"}); xActionsBar.appendChild(oGrammalecte.createNode("div", {id: "grammalecte_check" + oResult.iParaNum, className: "grammalecte_paragraph_button grammalecte_green", textContent: "Réanalyser"}, {para_num: oResult.iParaNum})); xActionsBar.appendChild(oGrammalecte.createNode("div", {id: "grammalecte_hide" + oResult.iParaNum, className: "grammalecte_paragraph_button grammalecte_red", textContent: "×", style: "font-weight: bold;"})); // paragraph let xParagraph = oGrammalecte.createNode("p", {id: "grammalecte_paragraph"+oResult.iParaNum, className: "grammalecte_paragraph", lang: "fr", contentEditable: "true"}, {para_num: oResult.iParaNum}); xParagraph.setAttribute("spellcheck", "false"); // doesn’t seem possible to use “spellcheck” as a common attribute. xParagraph.addEventListener("keyup", function (xEvent) { this.oNodeControl.setParagraph(parseInt(xEvent.target.dataset.para_num), this.purgeText(xEvent.target.textContent)); this.oNodeControl.write(); }.bind(this) , true); this._tagParagraph(xParagraph, oResult.sParagraph, oResult.iParaNum, oResult.aGrammErr, oResult.aSpellErr); // creation xNodeDiv.appendChild(xActionsBar); xNodeDiv.appendChild(xParagraph); this.xParagraphList.appendChild(xNodeDiv); |
︙ | ︙ | |||
109 110 111 112 113 114 115 | this.blockParagraph(xParagraph); let sText = this.purgeText(xParagraph.textContent); xGrammalectePort.postMessage({ sCommand: "parseAndSpellcheck1", dParam: {sText: sText, sCountry: "FR", bDebug: false, bContext: false}, dInfo: {sParagraphId: sParagraphId} }); | | | | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | this.blockParagraph(xParagraph); let sText = this.purgeText(xParagraph.textContent); xGrammalectePort.postMessage({ sCommand: "parseAndSpellcheck1", dParam: {sText: sText, sCountry: "FR", bDebug: false, bContext: false}, dInfo: {sParagraphId: sParagraphId} }); this.oNodeControl.setParagraph(iParaNum, sText); this.oNodeControl.write(); } refreshParagraph (sParagraphId, oResult) { try { let xParagraph = document.getElementById(sParagraphId); xParagraph.className = (oResult.aGrammErr.length || oResult.aSpellErr.length) ? "grammalecte_paragraph softred" : "grammalecte_paragraph"; xParagraph.textContent = ""; |
︙ | ︙ | |||
406 407 408 409 410 411 412 | xSuggBlock.appendChild(document.createTextNode("# Oups. Le mécanisme de suggestion orthographique a rencontré un bug… (Ce module est encore en phase β.)")); showError(e); } } } | | | | > > | | > | | | | | | | | | | | | > | > > > | 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 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 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 | xSuggBlock.appendChild(document.createTextNode("# Oups. Le mécanisme de suggestion orthographique a rencontré un bug… (Ce module est encore en phase β.)")); showError(e); } } } class GrammalecteNodeControl { constructor () { this.xNode = null; this.dParagraph = new Map(); this.bTextArea = null; this.bWriteEN = false; // write editable node } setNode (xNode) { this.clear(); this.xNode = xNode; this.bTextArea = (xNode.tagName == "TEXTAREA"); this.xNode.disabled = true; this._loadText(); } clear () { if (this.xNode !== null) { this.xNode.disabled = false; this.xNode = null; } this.dParagraph.clear(); } setParagraph (iParagraph, sText) { if (this.xNode !== null) { this.dParagraph.set(iParagraph, sText); } } _loadText () { let sText = (this.bTextArea) ? this.xNode.value : this.xNode.innerText; let i = 0; let iStart = 0; let iEnd = 0; sText = sText.replace("\r\n", "\n").replace("\r", "\n"); while ((iEnd = sText.indexOf("\n", iStart)) !== -1) { this.dParagraph.set(i, sText.slice(iStart, iEnd)); i++; iStart = iEnd+1; } this.dParagraph.set(i, sText.slice(iStart)); //console.log("Paragraphs number: " + (i+1)); } write () { if (this.xNode !== null && (this.bTextArea || this.bWriteEN)) { let sText = ""; this.dParagraph.forEach(function (val, key) { sText += val + "\n"; }); if (this.bTextArea) { this.xNode.value = sText.slice(0,-1); } else { this.xNode.textContent = sText.slice(0,-1); } } } } |