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 |   37 ++++++++++++++++++++++++++++---------
 1 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/program/js/tiny_mce/themes/advanced/js/anchor.js b/program/js/tiny_mce/themes/advanced/js/anchor.js
index b5efd1e..2909a3a 100644
--- a/program/js/tiny_mce/themes/advanced/js/anchor.js
+++ b/program/js/tiny_mce/themes/advanced/js/anchor.js
@@ -5,8 +5,8 @@
 		var action, elm, f = document.forms[0];
 
 		this.editor = ed;
-		elm = ed.dom.getParent(ed.selection.getNode(), 'A,IMG');
-		v = ed.dom.getAttrib(elm, 'name');
+		elm = ed.dom.getParent(ed.selection.getNode(), 'A');
+		v = ed.dom.getAttrib(elm, 'name') || ed.dom.getAttrib(elm, 'id');
 
 		if (v) {
 			this.action = 'update';
@@ -17,18 +17,37 @@
 	},
 
 	update : function() {
-		var ed = this.editor;
-		
+		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);
 
-		// Webkit acts weird if empty inline element is inserted so we need to use a image instead
-		if (tinymce.isWebKit)
-			ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('img', {mce_name : 'a', name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}));
-		else
-			ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}, ''));
+		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();
 	}

--
Gitblit v1.9.1