diff --git a/static/css/iframe_editor.css b/static/css/iframe_editor.css index 7be570112..86ca99117 100644 --- a/static/css/iframe_editor.css +++ b/static/css/iframe_editor.css @@ -32,6 +32,23 @@ ul.list-bullet6 { list-style-type: square; } ul.list-bullet7 { list-style-type: disc; } ul.list-bullet8 { list-style-type: circle; } +ul.list-indent1 { margin-left: 1.5em; } +ul.list-indent2 { margin-left: 3em; } +ul.list-indent3 { margin-left: 4.5em; } +ul.list-indent4 { margin-left: 6em; } +ul.list-indent5 { margin-left: 7.5em; } +ul.list-indent6 { margin-left: 9em; } +ul.list-indent7 { margin-left: 10.5em; } +ul.list-indent8 { margin-left: 12em; } + +ul.list-indent1 { list-style-type: none; } +ul.list-indent2 { list-style-type: none; } +ul.list-indent3 { list-style-type: none; } +ul.list-indent4 { list-style-type: none; } +ul.list-indent5 { list-style-type: none; } +ul.list-indent6 { list-style-type: none; } +ul.list-indent7 { list-style-type: none; } +ul.list-indent8 { list-style-type: none; } body { margin: 0; diff --git a/static/js/ace2_inner.js b/static/js/ace2_inner.js index 1575fc9ad..6c8ec60e0 100644 --- a/static/js/ace2_inner.js +++ b/static/js/ace2_inner.js @@ -3534,7 +3534,8 @@ function OUTER(gscope) function doIndentOutdent(isOut) { - if (!(rep.selStart && rep.selEnd)) + if (!(rep.selStart && rep.selEnd) || + ((rep.selStart[0] == rep.selEnd[0]) && (rep.selStart[1] == rep.selEnd[1]) && rep.selEnd[1] > 1)) { return false; } @@ -3544,25 +3545,25 @@ function OUTER(gscope) lastLine = Math.max(firstLine, rep.selEnd[0] - ((rep.selEnd[1] == 0) ? 1 : 0)); var mods = []; - var foundLists = false; for (var n = firstLine; n <= lastLine; n++) { var listType = getLineListType(n); + var t = 'indent'; + var level = 0; if (listType) { listType = /([a-z]+)([12345678])/.exec(listType); if (listType) { - foundLists = true; - var t = listType[1]; - var level = Number(listType[2]); - var newLevel = Math.max(1, Math.min(MAX_LIST_LEVEL, level + (isOut ? -1 : 1))); - if (level != newLevel) - { - mods.push([n, t + newLevel]); - } + t = listType[1]; + level = Number(listType[2]); } } + var newLevel = Math.max(0, Math.min(MAX_LIST_LEVEL, level + (isOut ? -1 : 1))); + if (level != newLevel) + { + mods.push([n, (newLevel > 0) ? t + newLevel : '']); + } } if (mods.length > 0) @@ -3570,7 +3571,7 @@ function OUTER(gscope) setLineListTypes(mods); } - return foundLists; + return true; } editorInfo.ace_doIndentOutdent = doIndentOutdent; @@ -5231,7 +5232,8 @@ function OUTER(gscope) var allLinesAreList = true; for (var n = firstLine; n <= lastLine; n++) { - if (!getLineListType(n)) + var listType = getLineListType(n); + if (!listType || listType.slice(0, 'bullet'.length) != 'bullet') { allLinesAreList = false; break; @@ -5241,8 +5243,16 @@ function OUTER(gscope) var mods = []; for (var n = firstLine; n <= lastLine; n++) { + var t = ''; + var level = 0; + var listType = /([a-z]+)([12345678])/.exec(getLineListType(n)); + if (listType) + { + t = listType[1]; + level = Number(listType[2]); + } var t = getLineListType(n); - mods.push([n, allLinesAreList ? '' : (t ? t : 'bullet1')]); + mods.push([n, allLinesAreList ? 'indent' + level : (t ? 'bullet' + level : 'bullet1')]); } setLineListTypes(mods); } diff --git a/static/js/contentcollector.js b/static/js/contentcollector.js index a776affec..577b24c6c 100644 --- a/static/js/contentcollector.js +++ b/static/js/contentcollector.js @@ -473,7 +473,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class if (tname == "ul") { var type; - var rr = cls && /(?:^| )list-(bullet[12345678])\b/.exec(cls); + var rr = cls && /(?:^| )list-([a-z]+[12345678])\b/.exec(cls); type = rr && rr[1] || "bullet" + String(Math.min(_MAX_LIST_LEVEL, (state.listNesting || 0) + 1)); oldListTypeOrNull = (_enterList(state, type) || 'none'); } diff --git a/static/pad.html b/static/pad.html index 1186cd8e4..e56e4f169 100644 --- a/static/pad.html +++ b/static/pad.html @@ -50,12 +50,12 @@