added numbrering logic + trigger on style update + visual render

This commit is contained in:
Jean-Tiare Le Bigot 2011-12-01 18:35:26 +01:00
parent b8e9131158
commit 68a01cc603
3 changed files with 77 additions and 2 deletions

View file

@ -5170,6 +5170,73 @@ function OUTER(gscope)
]); ]);
} }
function renumberList(lineNum){
//1-check we are in a list
if(!getLineListType(lineNum))
{
return null;
}
//2-find the first line of the list
while(lineNum-1 >= 0 && getLineListType(lineNum-1))
{
lineNum--;
}
//3-renumber every list item of the same level from the beginning, level 1
//IMPORTANT: never skip a level because there imbrication may be arbitrary
var builder = Changeset.builder(rep.lines.totalWidth());
loc = [0,0];
function applyNumberList(line, level)
{
//init
var position = 1;
var curLevel = level;
var listType;
//loop over the lines
while(listType = getLineListType(line))
{
//apply new num
curLevel = /[a-z]+([12345678])/.exec(listType);
curLevel = Number(curLevel[1]);
if(isNaN(curLevel))
{
return line;
}
else if(curLevel == level)
{
buildKeepRange(builder, loc, (loc = [line, 0]));
buildKeepRange(builder, loc, (loc = [line, 1]), [
['start', position]
], rep.apool);
position++;
line++;
}
else if(curLevel < level)
{
return line;//back to parent
}
else
{
line = applyNumberList(line, level+1);//recursive call
}
}
return line;
}
applyNumberList(lineNum, 1);
var cs = builder.toString();
if (!Changeset.isIdentity(cs))
{
performDocumentApplyChangeset(cs);
}
//4-apply the modifications
}
function setLineListTypes(lineNumTypePairsInOrder) function setLineListTypes(lineNumTypePairsInOrder)
{ {
var loc = [0, 0]; var loc = [0, 0];
@ -5216,6 +5283,8 @@ function OUTER(gscope)
{ {
performDocumentApplyChangeset(cs); performDocumentApplyChangeset(cs);
} }
renumberList(lineNum);
} }
function doInsertList(type) function doInsertList(type)

View file

@ -89,12 +89,14 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
if (cls.indexOf('list') >= 0) if (cls.indexOf('list') >= 0)
{ {
var listType = /(?:^| )list:(\S+)/.exec(cls); var listType = /(?:^| )list:(\S+)/.exec(cls);
var start = /(?:^| )start:(\S+)/.exec(cls);
if (listType) if (listType)
{ {
listType = listType[1]; listType = listType[1];
start = start?'start="'+start[1]+'"':'';
if (listType) if (listType)
{ {
preHtml = '<ul class="list-' + listType + '"><li>'; preHtml = '<ul '+start+' class="list-' + listType + '"><li>';
postHtml = '</li></ul>'; postHtml = '</li></ul>';
} }
result.lineMarker += txt.length; result.lineMarker += txt.length;

View file

@ -84,6 +84,10 @@ linestylefilter.getLineStyleFilter = function(lineLength, aline, textAndClassFun
{ {
classes += ' list:' + value; classes += ' list:' + value;
} }
else if (key == 'start')
{
classes += ' start:' + value;
}
else if (linestylefilter.ATTRIB_CLASSES[key]) else if (linestylefilter.ATTRIB_CLASSES[key])
{ {
classes += ' ' + linestylefilter.ATTRIB_CLASSES[key]; classes += ' ' + linestylefilter.ATTRIB_CLASSES[key];