From 8eefbb2158c43b51a8c33e6c480cbe61539b9535 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 27 Aug 2012 04:16:04 -0400
Subject: [PATCH] Add option to enable HTML editor on forwarding (#1488517)

---
 program/js/tiny_mce/plugins/lists/editor_plugin_src.js |   32 ++++++++++++++++++--------------
 1 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/program/js/tiny_mce/plugins/lists/editor_plugin_src.js b/program/js/tiny_mce/plugins/lists/editor_plugin_src.js
index e711d53..1000ef7 100644
--- a/program/js/tiny_mce/plugins/lists/editor_plugin_src.js
+++ b/program/js/tiny_mce/plugins/lists/editor_plugin_src.js
@@ -440,9 +440,9 @@
 			}
 
 			function fixDeletingFirstCharOfList(ed, e) {
-				function listElements(list, li) {
+				function listElements(li) {
 					var elements = [];
-					var walker = new tinymce.dom.TreeWalker(li, list);
+					var walker = new tinymce.dom.TreeWalker(li.firstChild, li);
 					for (var node = walker.current(); node; node = walker.next()) {
 						if (ed.dom.is(node, 'ol,ul,li')) {
 							elements.push(node);
@@ -454,9 +454,11 @@
 				if (e.keyCode == tinymce.VK.BACKSPACE) {
 					var li = getLi();
 					if (li) {
-						var list = ed.dom.getParent(li, 'ol,ul');
-						if (list && list.firstChild === li) {
-							var elements = listElements(list, li);
+						var list = ed.dom.getParent(li, 'ol,ul'),
+							rng  = ed.selection.getRng();
+						if (list && list.firstChild === li && rng.startOffset == 0) {
+							var elements = listElements(li);
+							elements.unshift(li);
 							ed.execCommand("Outdent", false, elements);
 							ed.undoManager.add();
 							return Event.cancel(e);
@@ -474,7 +476,7 @@
 						ed.dom.remove(li, true);
 						var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 });
 						if (textNodes.length === 1) {
-							var textNode = textNodes[0]
+							var textNode = textNodes[0];
 							ed.selection.setCursorLocation(textNode, textNode.length);
 						}
 						ed.undoManager.add();
@@ -722,7 +724,8 @@
 			} else {
 				actions = {
 					defaultAction: convertListItemToParagraph,
-					elements: this.selectedBlocks()
+					elements: this.selectedBlocks(),
+					processEvenIfEmpty: true
 				};
 			}
 			this.process(actions);
@@ -826,7 +829,7 @@
 
 			function processElement(element) {
 				dom.removeClass(element, '_mce_act_on');
-				if (!element || element.nodeType !== 1 || selectedBlocks.length > 1 && isEmptyElement(element)) {
+				if (!element || element.nodeType !== 1 || ! actions.processEvenIfEmpty && selectedBlocks.length > 1 && isEmptyElement(element)) {
 					return;
 				}
 				element = findItemToOperateOn(element, dom);
@@ -838,7 +841,7 @@
 			}
 
 			function recurse(element) {
-				t.splitSafeEach(element.childNodes, processElement);
+				t.splitSafeEach(element.childNodes, processElement, true);
 			}
 
 			function brAtEdgeOfSelection(container, offset) {
@@ -889,9 +892,11 @@
 			}
 		},
 
-		splitSafeEach: function(elements, f) {
-			if (tinymce.isGecko && (/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) ||
-					/Firefox\/3\.[0-4]/.test(navigator.userAgent))) {
+		splitSafeEach: function(elements, f, forceClassBase) {
+			if (forceClassBase ||
+				(tinymce.isGecko &&
+					(/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) ||
+					 /Firefox\/3\.[0-4]/.test(navigator.userAgent)))) {
 				this.classBasedEach(elements, f);
 			} else {
 				each(elements, f);
@@ -932,8 +937,7 @@
 		},
 
 		selectedBlocks: function() {
-			var ed = this.ed
-			var selectedBlocks = ed.selection.getSelectedBlocks();
+			var ed = this.ed, selectedBlocks = ed.selection.getSelectedBlocks();
 			return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks;
 		},
 

--
Gitblit v1.9.1