From 8fb741b0c9ea12d7fe1efe942dfa522767faeb86 Mon Sep 17 00:00:00 2001
From: Florian Orben <florian.orben@gmail.com>
Date: Mon, 30 Nov 2015 03:13:28 +0100
Subject: PLT-1121: One element, non-ordered lists and one element, ordered,
 nested lists aren't rendered correctly

---
 web/react/utils/markdown.jsx | 114 +++++++++++++++++++++----------------------
 1 file changed, 57 insertions(+), 57 deletions(-)

(limited to 'web/react/utils/markdown.jsx')

diff --git a/web/react/utils/markdown.jsx b/web/react/utils/markdown.jsx
index b0ec64bfd..9d9bdfb7a 100644
--- a/web/react/utils/markdown.jsx
+++ b/web/react/utils/markdown.jsx
@@ -361,78 +361,78 @@ class MattermostLexer extends marked.Lexer {
             // list
             cap = this.rules.list.exec(src);
             if (cap) {
+                src = src.substring(cap[0].length);
                 const bull = cap[2];
-                let l = cap[0].length;
+
+                this.tokens.push({
+                    type: 'list_start',
+                    ordered: bull.length > 1
+                });
 
                 // Get each top-level item.
                 cap = cap[0].match(this.rules.item);
 
-                if (cap.length > 1) {
-                    src = src.substring(l);
-
-                    this.tokens.push({
-                        type: 'list_start',
-                        ordered: bull.length > 1
-                    });
-
-                    let next = false;
-                    l = cap.length;
-
-                    for (let i = 0; i < l; i++) {
-                        let item = cap[i];
-
-                        // Remove the list item's bullet
-                        // so it is seen as the next token.
-                        let space = item.length;
-                        item = item.replace(/^ *([*+-]|\d+\.) +/, '');
-
-                        // Outdent whatever the
-                        // list item contains. Hacky.
-                        if (~item.indexOf('\n ')) {
-                            space -= item.length;
-                            item = this.options.pedantic ? item.replace(/^ {1,4}/gm, '') : item.replace(new RegExp('^ \{1,' + space + '\}', 'gm'), '');
-                        }
+                let next = false;
+                const l = cap.length;
+                let i = 0;
+
+                for (; i < l; i++) {
+                    let item = cap[i];
+
+                    // Remove the list item's bullet
+                    // so it is seen as the next token.
+                    let space = item.length;
+                    item = item.replace(/^ *([*+-]|\d+\.) +/, '');
+
+                    // Outdent whatever the
+                    // list item contains. Hacky.
+                    if (~item.indexOf('\n ')) {
+                        space -= item.length;
+                        item = this.options.pedantic ?
+                            item.replace(/^ {1,4}/gm, '') :
+                            item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '');
+                    }
 
-                        // Determine whether the next list item belongs here.
-                        // Backpedal if it does not belong in this list.
-                        if (this.options.smartLists && i !== l - 1) {
-                            const bullet = /(?:[*+-]|\d+\.)/;
-                            const b = bullet.exec(cap[i + 1])[0];
-                            if (bull !== b && !(bull.length > 1 && b.length > 1)) {
-                                src = cap.slice(i + 1).join('\n') + src;
-                                i = l - 1;
-                            }
+                    // Determine whether the next list item belongs here.
+                    // Backpedal if it does not belong in this list.
+                    if (this.options.smartLists && i !== l - 1) {
+                        const b = this.rules.bullet.exec(cap[i + 1])[0];
+                        if (bull !== b && !(bull.length > 1 && b.length > 1)) {
+                            src = cap.slice(i + 1).join('\n') + src;
+                            i = l - 1;
                         }
+                    }
 
-                        // Determine whether item is loose or not.
-                        // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
-                        // for discount behavior.
-                        let loose = next || (/\n\n(?!\s*$)/).test(item);
-                        if (i !== l - 1) {
-                            next = item.charAt(item.length - 1) === '\n';
-                            if (!loose) {
-                                loose = next;
-                            }
+                    // Determine whether item is loose or not.
+                    // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
+                    // for discount behavior.
+                    let loose = next || (/\n\n(?!\s*$)/).test(item);
+                    if (i !== l - 1) {
+                        next = item.charAt(item.length - 1) === '\n';
+                        if (!loose) {
+                            loose = next;
                         }
-
-                        this.tokens.push({
-                            type: loose ? 'loose_item_start' : 'list_item_start'
-                        });
-
-                        // Recurse.
-                        this.token(item, false, bq);
-
-                        this.tokens.push({
-                            type: 'list_item_end'
-                        });
                     }
 
                     this.tokens.push({
-                        type: 'list_end'
+                        type: loose ?
+                            'loose_item_start' :
+                            'list_item_start'
                     });
 
-                    continue;
+                    // Recurse.
+                    this.token(item, false, bq);
+
+                    this.tokens.push({
+                        type: 'list_item_end'
+                    });
                 }
+
+                this.tokens.push({
+                    type: 'list_end'
+                });
+
+                continue;
             }
 
             // html
-- 
cgit v1.2.3-1-g7c22

