src/pyams_skin/resources/js/ext/tinymce/dev/classes/ui/FormatControls.js
changeset 69 a361355b55c7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_skin/resources/js/ext/tinymce/dev/classes/ui/FormatControls.js	Wed Jun 17 10:00:10 2015 +0200
@@ -0,0 +1,539 @@
+/**
+ * FormatControls.js
+ *
+ * Copyright, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Internal class containing all TinyMCE specific control types such as
+ * format listboxes, fontlist boxes, toolbar buttons etc.
+ *
+ * @class tinymce.ui.FormatControls
+ */
+define("tinymce/ui/FormatControls", [
+	"tinymce/ui/Control",
+	"tinymce/ui/Widget",
+	"tinymce/ui/FloatPanel",
+	"tinymce/util/Tools",
+	"tinymce/EditorManager",
+	"tinymce/Env"
+], function(Control, Widget, FloatPanel, Tools, EditorManager, Env) {
+	var each = Tools.each;
+
+	EditorManager.on('AddEditor', function(e) {
+		if (e.editor.rtl) {
+			Control.rtl = true;
+		}
+
+		registerControls(e.editor);
+	});
+
+	Control.translate = function(text) {
+		return EditorManager.translate(text);
+	};
+
+	Widget.tooltips = !Env.iOS;
+
+	function registerControls(editor) {
+		var formatMenu;
+
+		function createListBoxChangeHandler(items, formatName) {
+			return function() {
+				var self = this;
+
+				editor.on('nodeChange', function(e) {
+					var formatter = editor.formatter;
+					var value = null;
+
+					each(e.parents, function(node) {
+						each(items, function(item) {
+							if (formatName) {
+								if (formatter.matchNode(node, formatName, {value: item.value})) {
+									value = item.value;
+								}
+							} else {
+								if (formatter.matchNode(node, item.value)) {
+									value = item.value;
+								}
+							}
+
+							if (value) {
+								return false;
+							}
+						});
+
+						if (value) {
+							return false;
+						}
+					});
+
+					self.value(value);
+				});
+			};
+		}
+
+		function createFormats(formats) {
+			formats = formats.replace(/;$/, '').split(';');
+
+			var i = formats.length;
+			while (i--) {
+				formats[i] = formats[i].split('=');
+			}
+
+			return formats;
+		}
+
+		function createFormatMenu() {
+			var count = 0, newFormats = [];
+
+			var defaultStyleFormats = [
+				{title: 'Headings', items: [
+					{title: 'Heading 1', format: 'h1'},
+					{title: 'Heading 2', format: 'h2'},
+					{title: 'Heading 3', format: 'h3'},
+					{title: 'Heading 4', format: 'h4'},
+					{title: 'Heading 5', format: 'h5'},
+					{title: 'Heading 6', format: 'h6'}
+				]},
+
+				{title: 'Inline', items: [
+					{title: 'Bold', icon: 'bold', format: 'bold'},
+					{title: 'Italic', icon: 'italic', format: 'italic'},
+					{title: 'Underline', icon: 'underline', format: 'underline'},
+					{title: 'Strikethrough', icon: 'strikethrough', format: 'strikethrough'},
+					{title: 'Superscript', icon: 'superscript', format: 'superscript'},
+					{title: 'Subscript', icon: 'subscript', format: 'subscript'},
+					{title: 'Code', icon: 'code', format: 'code'}
+				]},
+
+				{title: 'Blocks', items: [
+					{title: 'Paragraph', format: 'p'},
+					{title: 'Blockquote', format: 'blockquote'},
+					{title: 'Div', format: 'div'},
+					{title: 'Pre', format: 'pre'}
+				]},
+
+				{title: 'Alignment', items: [
+					{title: 'Left', icon: 'alignleft', format: 'alignleft'},
+					{title: 'Center', icon: 'aligncenter', format: 'aligncenter'},
+					{title: 'Right', icon: 'alignright', format: 'alignright'},
+					{title: 'Justify', icon: 'alignjustify', format: 'alignjustify'}
+				]}
+			];
+
+			function createMenu(formats) {
+				var menu = [];
+
+				if (!formats) {
+					return;
+				}
+
+				each(formats, function(format) {
+					var menuItem = {
+						text: format.title,
+						icon: format.icon
+					};
+
+					if (format.items) {
+						menuItem.menu = createMenu(format.items);
+					} else {
+						var formatName = format.format || "custom" + count++;
+
+						if (!format.format) {
+							format.name = formatName;
+							newFormats.push(format);
+						}
+
+						menuItem.format = formatName;
+						menuItem.cmd = format.cmd;
+					}
+
+					menu.push(menuItem);
+				});
+
+				return menu;
+			}
+
+			function createStylesMenu() {
+				var menu;
+
+				if (editor.settings.style_formats_merge) {
+					if (editor.settings.style_formats) {
+						menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));
+					} else {
+						menu = createMenu(defaultStyleFormats);
+					}
+				} else {
+					menu = createMenu(editor.settings.style_formats || defaultStyleFormats);
+				}
+
+				return menu;
+			}
+
+			editor.on('init', function() {
+				each(newFormats, function(format) {
+					editor.formatter.register(format.name, format);
+				});
+			});
+
+			return {
+				type: 'menu',
+				items: createStylesMenu(),
+				onPostRender: function(e) {
+					editor.fire('renderFormatsMenu', {control: e.control});
+				},
+				itemDefaults: {
+					preview: true,
+
+					textStyle: function() {
+						if (this.settings.format) {
+							return editor.formatter.getCssText(this.settings.format);
+						}
+					},
+
+					onPostRender: function() {
+						var self = this;
+
+						self.parent().on('show', function() {
+							var formatName, command;
+
+							formatName = self.settings.format;
+							if (formatName) {
+								self.disabled(!editor.formatter.canApply(formatName));
+								self.active(editor.formatter.match(formatName));
+							}
+
+							command = self.settings.cmd;
+							if (command) {
+								self.active(editor.queryCommandState(command));
+							}
+						});
+					},
+
+					onclick: function() {
+						if (this.settings.format) {
+							toggleFormat(this.settings.format);
+						}
+
+						if (this.settings.cmd) {
+							editor.execCommand(this.settings.cmd);
+						}
+					}
+				}
+			};
+		}
+
+		formatMenu = createFormatMenu();
+
+		// Simple format controls <control/format>:<UI text>
+		each({
+			bold: 'Bold',
+			italic: 'Italic',
+			underline: 'Underline',
+			strikethrough: 'Strikethrough',
+			subscript: 'Subscript',
+			superscript: 'Superscript'
+		}, function(text, name) {
+			editor.addButton(name, {
+				tooltip: text,
+				onPostRender: function() {
+					var self = this;
+
+					// TODO: Fix this
+					if (editor.formatter) {
+						editor.formatter.formatChanged(name, function(state) {
+							self.active(state);
+						});
+					} else {
+						editor.on('init', function() {
+							editor.formatter.formatChanged(name, function(state) {
+								self.active(state);
+							});
+						});
+					}
+				},
+				onclick: function() {
+					toggleFormat(name);
+				}
+			});
+		});
+
+		// Simple command controls <control>:[<UI text>,<Command>]
+		each({
+			outdent: ['Decrease indent', 'Outdent'],
+			indent: ['Increase indent', 'Indent'],
+			cut: ['Cut', 'Cut'],
+			copy: ['Copy', 'Copy'],
+			paste: ['Paste', 'Paste'],
+			help: ['Help', 'mceHelp'],
+			selectall: ['Select all', 'SelectAll'],
+			removeformat: ['Clear formatting', 'RemoveFormat'],
+			visualaid: ['Visual aids', 'mceToggleVisualAid'],
+			newdocument: ['New document', 'mceNewDocument']
+		}, function(item, name) {
+			editor.addButton(name, {
+				tooltip: item[0],
+				cmd: item[1]
+			});
+		});
+
+		// Simple command controls with format state
+		each({
+			blockquote: ['Blockquote', 'mceBlockQuote'],
+			numlist: ['Numbered list', 'InsertOrderedList'],
+			bullist: ['Bullet list', 'InsertUnorderedList'],
+			subscript: ['Subscript', 'Subscript'],
+			superscript: ['Superscript', 'Superscript'],
+			alignleft: ['Align left', 'JustifyLeft'],
+			aligncenter: ['Align center', 'JustifyCenter'],
+			alignright: ['Align right', 'JustifyRight'],
+			alignjustify: ['Justify', 'JustifyFull']
+		}, function(item, name) {
+			editor.addButton(name, {
+				tooltip: item[0],
+				cmd: item[1],
+				onPostRender: function() {
+					var self = this;
+
+					// TODO: Fix this
+					if (editor.formatter) {
+						editor.formatter.formatChanged(name, function(state) {
+							self.active(state);
+						});
+					} else {
+						editor.on('init', function() {
+							editor.formatter.formatChanged(name, function(state) {
+								self.active(state);
+							});
+						});
+					}
+				}
+			});
+		});
+
+		function toggleUndoRedoState(type) {
+			return function() {
+				var self = this;
+
+				type = type == 'redo' ? 'hasRedo' : 'hasUndo';
+
+				function checkState() {
+					return editor.undoManager ? editor.undoManager[type]() : false;
+				}
+
+				self.disabled(!checkState());
+				editor.on('Undo Redo AddUndo TypingUndo ClearUndos', function() {
+					self.disabled(!checkState());
+				});
+			};
+		}
+
+		function toggleVisualAidState() {
+			var self = this;
+
+			editor.on('VisualAid', function(e) {
+				self.active(e.hasVisual);
+			});
+
+			self.active(editor.hasVisual);
+		}
+
+		editor.addButton('undo', {
+			tooltip: 'Undo',
+			onPostRender: toggleUndoRedoState('undo'),
+			cmd: 'undo'
+		});
+
+		editor.addButton('redo', {
+			tooltip: 'Redo',
+			onPostRender: toggleUndoRedoState('redo'),
+			cmd: 'redo'
+		});
+
+		editor.addMenuItem('newdocument', {
+			text: 'New document',
+			icon: 'newdocument',
+			cmd: 'mceNewDocument'
+		});
+
+		editor.addMenuItem('undo', {
+			text: 'Undo',
+			icon: 'undo',
+			shortcut: 'Meta+Z',
+			onPostRender: toggleUndoRedoState('undo'),
+			cmd: 'undo'
+		});
+
+		editor.addMenuItem('redo', {
+			text: 'Redo',
+			icon: 'redo',
+			shortcut: 'Meta+Y',
+			onPostRender: toggleUndoRedoState('redo'),
+			cmd: 'redo'
+		});
+
+		editor.addMenuItem('visualaid', {
+			text: 'Visual aids',
+			selectable: true,
+			onPostRender: toggleVisualAidState,
+			cmd: 'mceToggleVisualAid'
+		});
+
+		each({
+			cut: ['Cut', 'Cut', 'Meta+X'],
+			copy: ['Copy', 'Copy', 'Meta+C'],
+			paste: ['Paste', 'Paste', 'Meta+V'],
+			selectall: ['Select all', 'SelectAll', 'Meta+A'],
+			bold: ['Bold', 'Bold', 'Meta+B'],
+			italic: ['Italic', 'Italic', 'Meta+I'],
+			underline: ['Underline', 'Underline'],
+			strikethrough: ['Strikethrough', 'Strikethrough'],
+			subscript: ['Subscript', 'Subscript'],
+			superscript: ['Superscript', 'Superscript'],
+			removeformat: ['Clear formatting', 'RemoveFormat']
+		}, function(item, name) {
+			editor.addMenuItem(name, {
+				text: item[0],
+				icon: name,
+				shortcut: item[2],
+				cmd: item[1]
+			});
+		});
+
+		editor.on('mousedown', function() {
+			FloatPanel.hideAll();
+		});
+
+		function toggleFormat(fmt) {
+			if (fmt.control) {
+				fmt = fmt.control.value();
+			}
+
+			if (fmt) {
+				editor.execCommand('mceToggleFormat', false, fmt);
+			}
+		}
+
+		editor.addButton('styleselect', {
+			type: 'menubutton',
+			text: 'Formats',
+			menu: formatMenu
+		});
+
+		editor.addButton('formatselect', function() {
+			var items = [], blocks = createFormats(editor.settings.block_formats ||
+				'Paragraph=p;' +
+				'Heading 1=h1;' +
+				'Heading 2=h2;' +
+				'Heading 3=h3;' +
+				'Heading 4=h4;' +
+				'Heading 5=h5;' +
+				'Heading 6=h6;' +
+				'Preformatted=pre'
+			);
+
+			each(blocks, function(block) {
+				items.push({
+					text: block[0],
+					value: block[1],
+					textStyle: function() {
+						return editor.formatter.getCssText(block[1]);
+					}
+				});
+			});
+
+			return {
+				type: 'listbox',
+				text: blocks[0][0],
+				values: items,
+				fixedWidth: true,
+				onselect: toggleFormat,
+				onPostRender: createListBoxChangeHandler(items)
+			};
+		});
+
+		editor.addButton('fontselect', function() {
+			var defaultFontsFormats =
+				'Andale Mono=andale mono,monospace;' +
+				'Arial=arial,helvetica,sans-serif;' +
+				'Arial Black=arial black,sans-serif;' +
+				'Book Antiqua=book antiqua,palatino,serif;' +
+				'Comic Sans MS=comic sans ms,sans-serif;' +
+				'Courier New=courier new,courier,monospace;' +
+				'Georgia=georgia,palatino,serif;' +
+				'Helvetica=helvetica,arial,sans-serif;' +
+				'Impact=impact,sans-serif;' +
+				'Symbol=symbol;' +
+				'Tahoma=tahoma,arial,helvetica,sans-serif;' +
+				'Terminal=terminal,monaco,monospace;' +
+				'Times New Roman=times new roman,times,serif;' +
+				'Trebuchet MS=trebuchet ms,geneva,sans-serif;' +
+				'Verdana=verdana,geneva,sans-serif;' +
+				'Webdings=webdings;' +
+				'Wingdings=wingdings,zapf dingbats';
+
+			var items = [], fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);
+
+			each(fonts, function(font) {
+				items.push({
+					text: {raw: font[0]},
+					value: font[1],
+					textStyle: font[1].indexOf('dings') == -1 ? 'font-family:' + font[1] : ''
+				});
+			});
+
+			return {
+				type: 'listbox',
+				text: 'Font Family',
+				tooltip: 'Font Family',
+				values: items,
+				fixedWidth: true,
+				onPostRender: createListBoxChangeHandler(items, 'fontname'),
+				onselect: function(e) {
+					if (e.control.settings.value) {
+						editor.execCommand('FontName', false, e.control.settings.value);
+					}
+				}
+			};
+		});
+
+		editor.addButton('fontsizeselect', function() {
+			var items = [], defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';
+			var fontsize_formats = editor.settings.fontsize_formats || defaultFontsizeFormats;
+
+			each(fontsize_formats.split(' '), function(item) {
+				var text = item, value = item;
+				// Allow text=value font sizes.
+				var values = item.split('=');
+				if (values.length > 1) {
+					text = values[0];
+					value = values[1];
+				}
+				items.push({text: text, value: value});
+			});
+
+			return {
+				type: 'listbox',
+				text: 'Font Sizes',
+				tooltip: 'Font Sizes',
+				values: items,
+				fixedWidth: true,
+				onPostRender: createListBoxChangeHandler(items, 'fontsize'),
+				onclick: function(e) {
+					if (e.control.settings.value) {
+						editor.execCommand('FontSize', false, e.control.settings.value);
+					}
+				}
+			};
+		});
+
+		editor.addMenuItem('formats', {
+			text: 'Formats',
+			menu: formatMenu
+		});
+	}
+});