diff -r e202798d3732 -r 82860da48dbb src/pyams_content/zmi/resources/js/pyams_content.js --- a/src/pyams_content/zmi/resources/js/pyams_content.js Fri Nov 09 10:41:05 2018 +0100 +++ b/src/pyams_content/zmi/resources/js/pyams_content.js Fri Nov 09 15:22:13 2018 +0100 @@ -49,23 +49,55 @@ icon: 'cloud-check', tooltip: "Insert internal link", image: '/--static--/pyams_content/img/internal-link.png', + stateSelector: 'a[href^="oid://"]', onclick: function() { + var data = {}, + dom = editor.dom, + selection = editor.selection, + selectedElm = selection.getNode(), + anchorElm = dom.getParent(selectedElm, 'a[href]'); + data.text = anchorElm ? (anchorElm.innerText || anchorElm.textContent) : selection.getContent({format: 'text'}); + data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : ''; editor.windowManager.open({ title: "Insert internal link", body: [ { type: 'textbox', name: 'oid', - label:'Internal number' + label:'Internal number', + value: data.href, + onchange: function() { + data.href = this.value(); + } }, { type: 'textbox', name: 'title', label: 'Link title', - value: editor.selection.getContent() + value: data.text, + onchange: function() { + data.text = this.value(); + } } ], onsubmit: function(e) { - editor.insertContent('' + e.data.title + ''); + editor.focus(); // activate change events + var href = data.href; + if (href) { + if (anchorElm) { + if ('innerText' in anchorElm) { + anchorElm.innerText = data.text; + } else { + anchorElm.textContent = data.text; + } + dom.setAttribs(anchorElm, {href: data.href}); + selection.select(anchorElm); + editor.undoManager.add(); + } else { + editor.insertContent('' + e.data.title + ''); + } + } else { + editor.execCommand('unlink'); + } } }); }