- add: function(params) {
- var boundries = getBoundriesForAList(params.fragment),
- listParams = {klass: type === 'Bullet' ? 'list' : 'list.enum'};
- if(boundries && boundries.node1) {
- listParams.node1 = boundries.node1;
- listParams.node2 = boundries.node2;
- boundries.node1.document.createList(listParams);
+ add: function(callback, params) {
+ var boundaries = getBoundariesForAList(params.fragment),
+ listParams = {klass: type === 'Bullet' ? 'list' : 'list.enum'},
+ action = this;
+
+ if(boundaries && boundaries.node1) {
+ boundaries.node1.document.transaction(function() {
+ var iterNode = boundaries.node1;
+ while(true) {
+ if(!iterNode.is({tagName: 'div', klass: 'p'})) {
+ if(iterNode.is({tagName: 'header'})) {
+ var newNode = iterNode.setTag('div');
+ newNode.setClass('p');
+ if(iterNode.sameNode(boundaries.node1)) {
+ boundaries.node1 = newNode;
+ }
+ if(iterNode.sameNode(boundaries.node2)) {
+ boundaries.node2 = newNode;
+ }
+ iterNode = newNode;
+ } else {
+ throw new Error('Invalid element');
+ }
+ }
+ if(iterNode.sameNode(boundaries.node2))
+ break;
+ iterNode = iterNode.next();
+ }
+ listParams.node1 = boundaries.node1;
+ listParams.node2 = boundaries.node2;
+ var list = boundaries.node1.document.createList(listParams),
+ item1 = list.object.getItem(0),
+ text = item1 ? item1.contents()[0] : undefined, //
+ doc = boundaries.node1.document;
+ if(text) {
+ return doc.createFragment(doc.CaretFragment, {node: text, offset:0});
+ }
+ }, {
+ metadata: {
+ description: action.getState().description,
+ fragment: params.fragment
+ },
+ success: callback
+ });