X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/e6993e4bfe0e5fd38ccf554da489b5af3625c2fb..2687ec6cbbe8101a4faa232c79f5c1321dcebe6d:/src/editor/plugins/core/core.js diff --git a/src/editor/plugins/core/core.js b/src/editor/plugins/core/core.js index 3465046..a780227 100644 --- a/src/editor/plugins/core/core.js +++ b/src/editor/plugins/core/core.js @@ -54,8 +54,9 @@ var undoRedoAction = function(dir) { label: dir === 'undo' ? '<-' : '->', icon: 'share-alt', iconStyle: dir === 'undo' ? '-webkit-transform: scale(-1,1); transform: scale(-1, 1)' : '', - execute: function(params) { + execute: function(callback, params) { params.document[dir](); + callback(); }, }, getState: function(params) { @@ -90,7 +91,7 @@ var commentAction = { }, stateDefaults: { icon: 'comment', - execute: function(params, editor) { + execute: function(callback, params, editor) { /* globals Node */ var node = params.fragment.node, action = this; @@ -124,7 +125,8 @@ var commentAction = { }, { metadata: { description: action.getState().description - } + }, + success: callback }); }, }, @@ -168,19 +170,28 @@ var createWrapTextAction = function(createParams) { return _.extend(state, { allowed: true, description: createParams.description, - execute: function(params) { + execute: function(callback, params) { params.fragment.document.transaction(function() { - var parent = params.fragment.startNode.parent(); - return parent.wrapText({ + var parent = params.fragment.startNode.parent(), + doc = params.fragment.document, + wrapper, lastTextNode; + + wrapper = parent.wrapText({ _with: {tagName: 'span', attrs: {'class': createParams.klass}}, offsetStart: params.fragment.startOffset, offsetEnd: params.fragment.endOffset, textNodeIdx: [params.fragment.startNode.getIndex(), params.fragment.endNode.getIndex()] }); + + lastTextNode = wrapper.getLastTextNode(); + if(lastTextNode) { + return doc.createFragment(doc.CaretFragment, {node: lastTextNode, offset: lastTextNode.getText().length}); + } }, { metadata: { description: createParams.description - } + }, + success: callback }); } }); @@ -189,7 +200,7 @@ var createWrapTextAction = function(createParams) { }; -var createLinkFromSelection = function(params) { +var createLinkFromSelection = function(callback, params) { var doc = params.fragment.document, dialog = Dialog.create({ title: gettext('Create link'), @@ -203,25 +214,27 @@ var createLinkFromSelection = function(params) { dialog.on('execute', function(event) { doc.transaction(function() { - var span = params.fragment.startNode.parent().wrapText({ + var span = action.params.fragment.startNode.parent().wrapText({ _with: {tagName: 'span', attrs: {'class': 'link'}}, offsetStart: params.fragment.startOffset, offsetEnd: params.fragment.endOffset, textNodeIdx: [params.fragment.startNode.getIndex(), params.fragment.endNode.getIndex()] - }); + }), + doc = params.fragment.document; span.setAttr('href', event.formData.href); event.success(); - return span; + return doc.createFragment(doc.CaretFragment, {node: span.contents()[0], offset:0}); }, { metadata: { description: action.getState().description - } + }, + success: callback }); }); dialog.show(); }; -var editLink = function(params) { +var editLink = function(callback, params) { var doc = params.fragment.document, link = params.fragment.node.getParent('link'), dialog = Dialog.create({ @@ -238,10 +251,12 @@ var editLink = function(params) { doc.transaction(function() { link.setAttr('href', event.formData.href); event.success(); + return params.fragment; }, { metadata: { description: action.getState().description - } + }, + success: callback }); }); dialog.show();