From e6e0d410ac92818679c03fc9bf5359562df81921 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 08 May 2012 05:38:39 -0400
Subject: [PATCH] TinyMCE 3.5

---
 program/js/tiny_mce/plugins/style/js/props.js |   80 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 77 insertions(+), 3 deletions(-)

diff --git a/program/js/tiny_mce/plugins/style/js/props.js b/program/js/tiny_mce/plugins/style/js/props.js
index 6800a9a..0a8a8ec 100644
--- a/program/js/tiny_mce/plugins/style/js/props.js
+++ b/program/js/tiny_mce/plugins/style/js/props.js
@@ -27,10 +27,41 @@
 var defaultBorderWidth = "thin;medium;thick";
 var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none";
 
-function init() {
+function aggregateStyles(allStyles) {
+	var mergedStyles = {};
+
+	tinymce.each(allStyles, function(style) {
+		if (style !== '') {
+			var parsedStyles = tinyMCEPopup.editor.dom.parseStyle(style);
+			for (var name in parsedStyles) {
+				if (parsedStyles.hasOwnProperty(name)) {
+					if (mergedStyles[name] === undefined) {
+						mergedStyles[name] = parsedStyles[name];
+					}
+					else if (name === 'text-decoration') {
+						if (mergedStyles[name].indexOf(parsedStyles[name]) === -1) {
+							mergedStyles[name] = mergedStyles[name] +' '+ parsedStyles[name];
+						}
+					}
+				}
+			}
+		}
+	});
+
+  return mergedStyles;
+}
+
+var applyActionIsInsert;
+var existingStyles;
+
+function init(ed) {
 	var ce = document.getElementById('container'), h;
 
-	ce.style.cssText = tinyMCEPopup.getWindowArg('style_text');
+	existingStyles = aggregateStyles(tinyMCEPopup.getWindowArg('styles'));
+	ce.style.cssText = tinyMCEPopup.editor.dom.serializeStyle(existingStyles);
+
+	applyActionIsInsert = ed.getParam("edit_css_style_insert_span", false);
+	document.getElementById('toggle_insert_span').checked = applyActionIsInsert;
 
 	h = getBrowserHTML('background_image_browser','background_image','image','advimage');
 	document.getElementById("background_image_browser").innerHTML = h;
@@ -144,6 +175,8 @@
 	f.text_overline.checked = inStr(ce.style.textDecoration, 'overline');
 	f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through');
 	f.text_blink.checked = inStr(ce.style.textDecoration, 'blink');
+	f.text_none.checked = inStr(ce.style.textDecoration, 'none');
+	updateTextDecorations();
 
 	// Setup background fields
 
@@ -366,13 +399,41 @@
 	return true;
 }
 
+function toggleApplyAction() {
+	applyActionIsInsert = ! applyActionIsInsert;
+}
+
 function applyAction() {
 	var ce = document.getElementById('container'), ed = tinyMCEPopup.editor;
 
 	generateCSS();
 
 	tinyMCEPopup.restoreSelection();
-	ed.dom.setAttrib(ed.selection.getSelectedBlocks(), 'style', tinyMCEPopup.editor.dom.serializeStyle(tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText)));
+
+	var newStyles = tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText);
+
+	if (applyActionIsInsert) {
+		ed.formatter.register('plugin_style', {
+			inline: 'span', styles: existingStyles
+		});
+		ed.formatter.remove('plugin_style');
+
+		ed.formatter.register('plugin_style', {
+			inline: 'span', styles: newStyles
+		});
+		ed.formatter.apply('plugin_style');
+	} else {
+		var nodes;
+
+		if (tinyMCEPopup.getWindowArg('applyStyleToBlocks')) {
+			nodes = ed.selection.getSelectedBlocks();
+		}
+		else {
+			nodes = ed.selection.getNode();
+		}
+
+		ed.dom.setAttrib(nodes, 'style', tinyMCEPopup.editor.dom.serializeStyle(newStyles));
+	}
 }
 
 function updateAction() {
@@ -632,4 +693,17 @@
 		selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value);
 }
 
+function updateTextDecorations(){
+	var el = document.forms[0].elements;
+
+	var textDecorations = ["text_underline", "text_overline", "text_linethrough", "text_blink"];
+	var noneChecked = el["text_none"].checked;
+	tinymce.each(textDecorations, function(id) {
+		el[id].disabled = noneChecked;
+		if (noneChecked) {
+			el[id].checked = false;
+		}
+	});
+}
+
 tinyMCEPopup.onInit.add(init);

--
Gitblit v1.9.1