src/pyams_content/zmi/resources/js/pyams_content.js
changeset 1072 82860da48dbb
parent 1070 ea0c7ac589c4
child 1074 b6c276f67cda
--- 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('<a href="oid://' + e.data.oid + '">' + e.data.title + '</a>');
+									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('<a href="oid://' + e.data.oid + '">' + e.data.title + '</a>');
+										}
+									} else {
+										editor.execCommand('unlink');
+									}
 								}
 							});
 						}