Skip to content

Commit

Permalink
fix: consider depth when apply list (close: #392) (#395)
Browse files Browse the repository at this point in the history
Previously markdown list don't care depth of list,
so change implement to check depth when apply list.
Most code move mdListMnager because OL, UL, Task use same code.

* fix: All list are changed regardless of depth

* fix: find one depth list in same list

* refactor: markdown list manager

* refactor: insert blank line

* refactor: same entry function for change ol, ul, task
  • Loading branch information
sohee-lee7 committed Feb 18, 2019
1 parent f688836 commit 4b01ea7
Show file tree
Hide file tree
Showing 8 changed files with 454 additions and 315 deletions.
4 changes: 0 additions & 4 deletions src/js/markdownCommands/listRegex.js

This file was deleted.

49 changes: 1 addition & 48 deletions src/js/markdownCommands/ol.js
Expand Up @@ -4,13 +4,6 @@
*/

import CommandManager from '../commandManager';
import {
FIND_MD_OL_RX,
FIND_MD_UL_RX,
FIND_MD_TASK_RX
} from './listRegex';

const MD_LIST_OR_TASK_SYNTAX_RX = /([-*]|[\d]+\.)( \[[ xX]])? /;

/**
* OL
Expand All @@ -27,51 +20,11 @@ const OL = CommandManager.command('markdown', /** @lends OL */{
* @param {MarkdownEditor} mde MarkdownEditor instance
*/
exec(mde) {
const cm = mde.getEditor();
const doc = cm.getDoc();
const range = mde.getCurrentRange();
const listManager = mde.componentManager.getManager('list');
const lineRange = listManager.expandLineRangeIfNeed(doc, range, isUlOrTask);
const startLineNumber = lineRange.start;
const endLineNumber = lineRange.end;
let ordinalNumber = 1;
let line, currentLineStart;

for (let i = startLineNumber; i <= endLineNumber; i += 1) {
currentLineStart = {
line: i,
ch: 0
};

line = doc.getLine(i);

if (listManager.isListOrParagraph(line)) {
if (isUlOrTask(line)) {
listManager.replaceLineText(doc, i, MD_LIST_OR_TASK_SYNTAX_RX, `${ordinalNumber}. `);
} else if (!line.match(FIND_MD_OL_RX)) {
doc.replaceRange(`${ordinalNumber}. `, currentLineStart);
}

ordinalNumber += 1;

if (i === endLineNumber) {
listManager.appendBlankLineIfNeed(cm, i, endLineNumber, startLineNumber);
}
} else {
break;
}
}
cm.focus();
listManager.changeSyntax(range, 'ol');
}
});

/**
* Return whether passed line is UL or TASK or neither
* @param {string} line Line text
* @returns {boolean}
*/
function isUlOrTask(line) {
return !!(line && (line.match(FIND_MD_TASK_RX) || line.match(FIND_MD_UL_RX)));
}

export default OL;
51 changes: 1 addition & 50 deletions src/js/markdownCommands/task.js
Expand Up @@ -3,14 +3,6 @@
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
import CommandManager from '../commandManager';
import {
FIND_MD_OL_RX,
FIND_MD_UL_RX,
FIND_MD_TASK_RX
} from './listRegex';

const MD_UL_OR_OL_SYNTAX_RX = /([*-] |[\d]+\. )/;
const MD_TASK_SYNTAX_RX = /([*-] |[\d]+\. )(\[[ xX]] )/;

/**
* Task
Expand All @@ -26,52 +18,11 @@ const Task = CommandManager.command('markdown', /** @lends Task */{
* @param {MarkdownEditor} mde MarkdownEditor instance
*/
exec(mde) {
const cm = mde.getEditor();
const doc = cm.getDoc();
const range = mde.getCurrentRange();
const listManager = mde.componentManager.getManager('list');
const lineRange = listManager.createSortedLineRange(range);
const startLineNumber = lineRange.start;
const endLineNumber = lineRange.end;
let line, currentLineStart;

for (let i = startLineNumber; i <= endLineNumber; i += 1) {
currentLineStart = {
line: i,
ch: 0
};

line = doc.getLine(i);

const hasTaskSyntax = !!line.match(MD_TASK_SYNTAX_RX);

if (listManager.isListOrParagraph(line)) {
if (isOlOrUl(line) && hasTaskSyntax) {
listManager.replaceLineText(doc, i, MD_TASK_SYNTAX_RX, '$1');
} else if (isOlOrUl(line) && !hasTaskSyntax) {
listManager.replaceLineText(doc, i, MD_UL_OR_OL_SYNTAX_RX, '$1[ ] ');
} else if (!line.match(FIND_MD_TASK_RX)) {
doc.replaceRange('* [ ] ', currentLineStart);
}

if (i === endLineNumber) {
listManager.appendBlankLineIfNeed(cm, i, endLineNumber, startLineNumber);
}
} else {
break;
}
}
cm.focus();
listManager.changeSyntax(range, 'task');
}
});

/**
* Return whether passed line is OL or UL or neither
* @param {string} line Line text
* @returns {boolean}
*/
function isOlOrUl(line) {
return !!(line && (line.match(FIND_MD_UL_RX) || line.match(FIND_MD_OL_RX)));
}

export default Task;
59 changes: 1 addition & 58 deletions src/js/markdownCommands/ul.js
Expand Up @@ -3,15 +3,6 @@
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
import CommandManager from '../commandManager';
import {
FIND_MD_OL_RX,
FIND_MD_UL_RX,
FIND_MD_TASK_RX,
FIND_MD_UL_TASK_RX
} from './listRegex';

const MD_UL_TASK_SYNTAX_RX = /([-*])( \[[ xX]]) /;
const MD_UL_OR_UL_TASK_SYNTAX_RX = /[\d]+\.( \[[ xX]])? /;

/**
* UL
Expand All @@ -28,59 +19,11 @@ const UL = CommandManager.command('markdown', /** @lends UL */{
* @param {MarkdownEditor} mde MarkdownEditor instance
*/
exec(mde) {
const cm = mde.getEditor();
const doc = cm.getDoc();
const range = mde.getCurrentRange();
const listManager = mde.componentManager.getManager('list');
const lineRange = listManager.expandLineRangeIfNeed(doc, range, isOlOrTask);
const startLineNumber = lineRange.start;
const endLineNumber = lineRange.end;
let line, currentLineStart;

for (let i = startLineNumber; i <= endLineNumber; i += 1) {
currentLineStart = {
line: i,
ch: 0
};

line = doc.getLine(i);

if (listManager.isListOrParagraph(line)) {
if (isUlTask(line)) {
listManager.replaceLineText(doc, i, MD_UL_TASK_SYNTAX_RX, '$1 ');
} else if (isOlOrTask(line)) {
listManager.replaceLineText(doc, i, MD_UL_OR_UL_TASK_SYNTAX_RX, '* ');
} else if (!line.match(FIND_MD_UL_RX)) {
doc.replaceRange('* ', currentLineStart);
}

if (i === endLineNumber) {
listManager.appendBlankLineIfNeed(cm, i, endLineNumber, startLineNumber);
}
} else {
break;
}
}
cm.focus();
listManager.changeSyntax(range, 'ul');
}
});

/**
* Return whether the given line is UL TASK
* @param {string} line Line text
* @returns {boolean}
*/
function isUlTask(line) {
return !!(line && line.match(FIND_MD_UL_TASK_RX));
}

/**
* Return whether passed line is OL or TASK or neither
* @param {string} line Line text
* @returns {boolean}
*/
function isOlOrTask(line) {
return !!(line && (line.match(FIND_MD_TASK_RX) || line.match(FIND_MD_OL_RX)));
}

export default UL;

0 comments on commit 4b01ea7

Please sign in to comment.