Просмотр исходного кода

Merge pull request #2030 from rugk/fix-new-paste-default-formatter

fix: reset new paste to default formatter instead of hardcoded one
El RIDO 1 неделя назад
Родитель
Сommit
f6d3c0f5d6
4 измененных файлов с 112 добавлено и 2 удалено
  1. 1 0
      CHANGELOG.md
  2. 3 2
      js/privatebin.js
  3. 89 0
      js/test/Controller.js
  4. 19 0
      js/test/TestHelperFunctions.js

+ 1 - 0
CHANGELOG.md

@@ -8,6 +8,7 @@
 * FIXED: Creating a document failed with a JavaScript error when the `discussion`, `password`, e-mail or QR code option is disabled, as the top navigation accessed the omitted elements
 * FIXED: Slovenian plural forms were stored in the wrong order, i.e. "1 uri" instead of "1 ura" for one hour (#1951)
 * FIXED: Lithuanian plural formula selected the "few" form for numbers ending in 0 above 10, i.e. "20 sekundės" instead of "20 sekundžių" (#1956)
+* FIXED: new paste button resets it to default formatter/style instead of hardcoding 'plaintext' (#2026)
 
 ## 2.1.0 (2026-10-18)
 * ADDED: Added `shortenviachhoto` endpoint with an `chhoto` configuration section

+ 3 - 2
js/privatebin.js

@@ -5918,8 +5918,9 @@ window.PrivateBin = (function () {
             TopNav.resetInput();
 
             // reset format
-            PasteViewer.setFormat('plaintext');
-            TopNav.setFormat('plaintext');
+            const defaultFormat = Model.getFormatDefault() || 'plaintext';
+            PasteViewer.setFormat(defaultFormat);
+            TopNav.setFormat(defaultFormat);
 
             TopNav.showCreateButtons();
 

+ 89 - 0
js/test/Controller.js

@@ -0,0 +1,89 @@
+'use strict';
+
+const { loadTemplateFragment } = require('./TestHelperFunctions');
+
+require('../common');
+
+describe('Controller', function () {
+    describe('newPaste', function () {
+        after(function () {
+            cleanup();
+        });
+
+        it(
+            'resets the formatter to the configured default',
+            function () {
+                const clean = cleanup('', {url: 'https://example.com/'});
+                document.body.innerHTML = `
+                    <div id="errormessage" class="hidden"></div>
+                    <div id="loadingindicator" class="hidden"></div>
+                    <div id="status" class="hidden"></div>
+                    <div id="remainingtime" class="hidden"></div>
+                    <div id="pastesuccess" class="hidden"></div>
+                    <button id="shortenbutton"></button>
+                    <ul id="editorTabs">
+                        <li id="messagetab"><a></a></li>
+                        <li id="previewtab"><a></a></li>
+                    </ul>
+                    <textarea id="message"></textarea>
+                    <div id="preview" class="hidden"></div>
+                    <div id="placeholder" class="hidden"></div>
+                    <div id="prettymessage" class="hidden"><pre id="prettyprint"></pre></div>
+                    <div id="plaintext" class="hidden"></div>
+                    <div id="attachment" class="hidden"></div>
+                    <div id="attachmentPreview" class="hidden"></div>
+                    <div id="discussion" class="hidden"><div id="commentcontainer"></div></div>
+                    <div id="templates">
+                        <div id="commenttemplate"><div></div></div>
+                        <div id="commenttailtemplate"><button></button></div>
+                        <div id="replytemplate"><div></div></div>
+                    </div>
+                    <div id="attach" class="hidden"></div>
+                    ${loadTemplateFragment('burnafterreadingoption')}
+                    <button id="clonebutton"></button>
+                    <div id="customattachment" class="hidden"></div>
+                    <div id="expiration" class="hidden"></div>
+                    <button id="fileremovebutton"></button>
+                    <div id="filewrap"></div>
+                    <div id="formatter" class="hidden">
+                        <select id="pasteFormatter">
+                            <option value="plaintext">Plain Text</option>
+                            <option value="markdown" selected="selected">Markdown</option>
+                        </select>
+                    </div>
+                    <button id="newbutton" class="hidden"></button>
+                    ${loadTemplateFragment('opendiscussionoption')}
+                    <div id="password" class="hidden"></div>
+                    <input id="passwordinput">
+                    <button id="rawtextbutton"></button>
+                    <button id="downloadtextbutton"></button>
+                    <button id="retrybutton"></button>
+                    <button id="sendbutton" class="hidden"></button>
+                    <button id="qrcodelink"></button>
+                    <a id="emaillink"></a>
+                    <select id="pasteExpiration">
+                        <option value="1week" selected="selected">1 week</option>
+                    </select>
+                    <span id="pasteExpirationDisplay"></span>
+                `;
+
+                PrivateBin.Alert.init();
+                PrivateBin.Model.init();
+                PrivateBin.AttachmentViewer.init();
+                PrivateBin.DiscussionViewer.init();
+                PrivateBin.Editor.init();
+                PrivateBin.PasteStatus.init();
+                PrivateBin.PasteViewer.init();
+                PrivateBin.TopNav.init();
+
+                PrivateBin.PasteViewer.setFormat('syntaxhighlighting');
+                PrivateBin.Controller.newPaste();
+
+                assert.strictEqual(PrivateBin.PasteViewer.getFormat(), 'markdown');
+                assert.strictEqual(document.getElementById('pasteFormatter').value, 'markdown');
+
+                clean();
+            }
+        );
+    });
+});

+ 19 - 0
js/test/TestHelperFunctions.js

@@ -0,0 +1,19 @@
+'use strict';
+const fs = require('node:fs');
+const path = require('node:path');
+
+function loadTemplateFragment(id) {
+    const template = fs.readFileSync(path.resolve(__dirname, '../../tpl/bootstrap5.php'), 'utf8');
+    const match = template.match(new RegExp(`<div id="${id}"[^>]*>[\\s\\S]*?<\\/div>`));
+
+    if (!match) {
+        throw new Error(`Template fragment #${id} not found`);
+    }
+
+    return match[0]
+        .replace(/<\?php[\s\S]*?\?>/g, '')
+        .replace(/<\?=[\s\S]*?\?>/g, '')
+        .replace(/>\s+</g, '><')
+        .trim();
+}
+exports.loadTemplateFragment = loadTemplateFragment;