mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-21 07:56:16 -04:00
Ordered list support
This commit is contained in:
parent
c45932c6b8
commit
f4dca37a93
14 changed files with 316 additions and 31 deletions
|
@ -309,13 +309,14 @@ function getHTMLFromAtext(pad, atext)
|
|||
// People might use weird indenting, e.g. skip a level,
|
||||
// so we want to do something reasonable there. We also
|
||||
// want to deal gracefully with blank lines.
|
||||
// => keeps track of the parents level of indentation
|
||||
var lists = []; // e.g. [[1,'bullet'], [3,'bullet'], ...]
|
||||
for (var i = 0; i < textLines.length; i++)
|
||||
{
|
||||
var line = _analyzeLine(textLines[i], attribLines[i], apool);
|
||||
var lineContent = getLineHTML(line.text, line.aline);
|
||||
|
||||
if (line.listLevel || lists.length > 0)
|
||||
|
||||
if (line.listLevel)//If we are inside a list
|
||||
{
|
||||
// do list stuff
|
||||
var whichList = -1; // index into lists or -1
|
||||
|
@ -331,41 +332,89 @@ function getHTMLFromAtext(pad, atext)
|
|||
}
|
||||
}
|
||||
|
||||
if (whichList >= lists.length)
|
||||
if (whichList >= lists.length)//means we are on a deeper level of indentation than the previous line
|
||||
{
|
||||
lists.push([line.listLevel, line.listTypeName]);
|
||||
pieces.push('<ul><li>', lineContent || '<br>');
|
||||
if(line.listTypeName == "number")
|
||||
{
|
||||
pieces.push('<ol class="'+line.listTypeName+'"><li>', lineContent || '<br>');
|
||||
}
|
||||
else
|
||||
{
|
||||
pieces.push('<ul class="'+line.listTypeName+'"><li>', lineContent || '<br>');
|
||||
}
|
||||
}
|
||||
else if (whichList == -1)
|
||||
//the following code *seems* dead after my patch.
|
||||
//I keep it just in case I'm wrong...
|
||||
/*else if (whichList == -1)//means we are not inside a list
|
||||
{
|
||||
if (line.text)
|
||||
{
|
||||
console.log('trace 1');
|
||||
// non-blank line, end all lists
|
||||
pieces.push(new Array(lists.length + 1).join('</li></ul\n>'));
|
||||
if(line.listTypeName == "number")
|
||||
{
|
||||
pieces.push(new Array(lists.length + 1).join('</li></ol>'));
|
||||
}
|
||||
else
|
||||
{
|
||||
pieces.push(new Array(lists.length + 1).join('</li></ul>'));
|
||||
}
|
||||
lists.length = 0;
|
||||
pieces.push(lineContent, '<br>');
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log('trace 2');
|
||||
pieces.push('<br><br>');
|
||||
}
|
||||
}
|
||||
else
|
||||
}*/
|
||||
else//means we are getting closer to the lowest level of indentation
|
||||
{
|
||||
while (whichList < lists.length - 1)
|
||||
{
|
||||
pieces.push('</li></ul>');
|
||||
if(lists[lists.length - 1][1] == "number")
|
||||
{
|
||||
pieces.push('</li></ol>');
|
||||
}
|
||||
else
|
||||
{
|
||||
pieces.push('</li></ul>');
|
||||
}
|
||||
lists.length--;
|
||||
}
|
||||
pieces.push('</li><li>', lineContent || '<br>');
|
||||
}
|
||||
}
|
||||
else
|
||||
else//outside any list
|
||||
{
|
||||
while (lists.length > 0)//if was in a list: close it before
|
||||
{
|
||||
if(lists[lists.length - 1][1] == "number")
|
||||
{
|
||||
pieces.push('</li></ol>');
|
||||
}
|
||||
else
|
||||
{
|
||||
pieces.push('</li></ul>');
|
||||
}
|
||||
lists.length--;
|
||||
}
|
||||
pieces.push(lineContent, '<br>');
|
||||
}
|
||||
}
|
||||
pieces.push(new Array(lists.length + 1).join('</li></ul>'));
|
||||
|
||||
for (var k = lists.length - 1; k >= 0; k--)
|
||||
{
|
||||
if(lists[k][1] == "number")
|
||||
{
|
||||
pieces.push('</li></ol>');
|
||||
}
|
||||
else
|
||||
{
|
||||
pieces.push('</li></ul>');
|
||||
}
|
||||
}
|
||||
|
||||
return pieces.join('');
|
||||
}
|
||||
|
@ -415,7 +464,24 @@ exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback)
|
|||
{
|
||||
if(ERR(err, callback)) return;
|
||||
|
||||
var head = (noDocType ? '' : '<!doctype html>\n') + '<html lang="en">\n' + (noDocType ? '' : '<head>\n' + '<meta charset="utf-8">\n' + '<style> * { font-family: arial, sans-serif;\n' + 'font-size: 13px;\n' + 'line-height: 17px; }</style>\n' + '</head>\n') + '<body>';
|
||||
var head =
|
||||
(noDocType ? '' : '<!doctype html>\n') +
|
||||
'<html lang="en">\n' + (noDocType ? '' : '<head>\n' +
|
||||
'<meta charset="utf-8">\n' +
|
||||
'<style> * { font-family: arial, sans-serif;\n' +
|
||||
'font-size: 13px;\n' +
|
||||
'line-height: 17px; }' +
|
||||
'ul.indent { list-style-type: none; }' +
|
||||
'ol { list-style-type: decimal; }' +
|
||||
'ol ol { list-style-type: lower-latin; }' +
|
||||
'ol ol ol { list-style-type: lower-roman; }' +
|
||||
'ol ol ol ol { list-style-type: decimal; }' +
|
||||
'ol ol ol ol ol { list-style-type: lower-latin; }' +
|
||||
'ol ol ol ol ol ol{ list-style-type: lower-roman; }' +
|
||||
'ol ol ol ol ol ol ol { list-style-type: decimal; }' +
|
||||
'ol ol ol ol ol ol ol ol{ list-style-type: lower-latin; }' +
|
||||
'</style>\n' + '</head>\n') +
|
||||
'<body>';
|
||||
|
||||
var foot = '</body>\n</html>\n';
|
||||
|
||||
|
|
|
@ -472,10 +472,10 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
|
|||
{
|
||||
cc.doAttrib(state, "strikethrough");
|
||||
}
|
||||
if (tname == "ul")
|
||||
if (tname == "ul" || tname == "ol")
|
||||
{
|
||||
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');
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue