From 3412e50b54e3daac8745234e21ab6e72be0ed165 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Wed, 04 Jun 2014 11:20:33 -0400
Subject: [PATCH] Fix attachment menu structure and aria-attributes

---
 program/js/tiny_mce/themes/advanced/js/anchor.js |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 56 insertions(+), 0 deletions(-)

diff --git a/program/js/tiny_mce/themes/advanced/js/anchor.js b/program/js/tiny_mce/themes/advanced/js/anchor.js
new file mode 100644
index 0000000..2909a3a
--- /dev/null
+++ b/program/js/tiny_mce/themes/advanced/js/anchor.js
@@ -0,0 +1,56 @@
+tinyMCEPopup.requireLangPack();
+
+var AnchorDialog = {
+	init : function(ed) {
+		var action, elm, f = document.forms[0];
+
+		this.editor = ed;
+		elm = ed.dom.getParent(ed.selection.getNode(), 'A');
+		v = ed.dom.getAttrib(elm, 'name') || ed.dom.getAttrib(elm, 'id');
+
+		if (v) {
+			this.action = 'update';
+			f.anchorName.value = v;
+		}
+
+		f.insert.value = ed.getLang(elm ? 'update' : 'insert');
+	},
+
+	update : function() {
+		var ed = this.editor, elm, name = document.forms[0].anchorName.value, attribName;
+
+		if (!name || !/^[a-z][a-z0-9\-\_:\.]*$/i.test(name)) {
+			tinyMCEPopup.alert('advanced_dlg.anchor_invalid');
+			return;
+		}
+
+		tinyMCEPopup.restoreSelection();
+
+		if (this.action != 'update')
+			ed.selection.collapse(1);
+
+		var aRule = ed.schema.getElementRule('a');
+		if (!aRule || aRule.attributes.name) {
+			attribName = 'name';
+		} else {
+			attribName = 'id';
+		}
+
+		elm = ed.dom.getParent(ed.selection.getNode(), 'A');
+		if (elm) {
+			elm.setAttribute(attribName, name);
+			elm[attribName] = name;
+			ed.undoManager.add();
+		} else {
+			// create with zero-sized nbsp so that in Webkit where anchor is on last line by itself caret cannot be placed after it
+			var attrs =  {'class' : 'mceItemAnchor'};
+			attrs[attribName] = name;
+			ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', attrs, '\uFEFF'));
+			ed.nodeChanged();
+		}
+
+		tinyMCEPopup.close();
+	}
+};
+
+tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);

--
Gitblit v1.9.1