src/pyams_skin/resources/js/ext/tinymce/dev/plugins/contextmenu/plugin.js
changeset 69 a361355b55c7
equal deleted inserted replaced
68:fd8fb93e1b6a 69:a361355b55c7
       
     1 /**
       
     2  * plugin.js
       
     3  *
       
     4  * Copyright, Moxiecode Systems AB
       
     5  * Released under LGPL License.
       
     6  *
       
     7  * License: http://www.tinymce.com/license
       
     8  * Contributing: http://www.tinymce.com/contributing
       
     9  */
       
    10 
       
    11 /*global tinymce:true */
       
    12 
       
    13 tinymce.PluginManager.add('contextmenu', function(editor) {
       
    14 	var menu, contextmenuNeverUseNative = editor.settings.contextmenu_never_use_native;
       
    15 
       
    16 	editor.on('contextmenu', function(e) {
       
    17 		var contextmenu, doc = editor.getDoc();
       
    18 
       
    19 		// Block TinyMCE menu on ctrlKey
       
    20 		if (e.ctrlKey && !contextmenuNeverUseNative) {
       
    21 			return;
       
    22 		}
       
    23 
       
    24 		e.preventDefault();
       
    25 
       
    26 		/**
       
    27 		 * WebKit/Blink on Mac has the odd behavior of selecting the target word or line this causes
       
    28 		 * issues when for example inserting images see: #7022
       
    29 		 */
       
    30 		if (tinymce.Env.mac && tinymce.Env.webkit) {
       
    31 			if (e.button == 2 && doc.caretRangeFromPoint) {
       
    32 				editor.selection.setRng(doc.caretRangeFromPoint(e.x, e.y));
       
    33 			}
       
    34 		}
       
    35 
       
    36 		contextmenu = editor.settings.contextmenu || 'link image inserttable | cell row column deletetable';
       
    37 
       
    38 		// Render menu
       
    39 		if (!menu) {
       
    40 			var items = [];
       
    41 
       
    42 			tinymce.each(contextmenu.split(/[ ,]/), function(name) {
       
    43 				var item = editor.menuItems[name];
       
    44 
       
    45 				if (name == '|') {
       
    46 					item = {text: name};
       
    47 				}
       
    48 
       
    49 				if (item) {
       
    50 					item.shortcut = ''; // Hide shortcuts
       
    51 					items.push(item);
       
    52 				}
       
    53 			});
       
    54 
       
    55 			for (var i = 0; i < items.length; i++) {
       
    56 				if (items[i].text == '|') {
       
    57 					if (i === 0 || i == items.length - 1) {
       
    58 						items.splice(i, 1);
       
    59 					}
       
    60 				}
       
    61 			}
       
    62 
       
    63 			menu = new tinymce.ui.Menu({
       
    64 				items: items,
       
    65 				context: 'contextmenu'
       
    66 			}).addClass('contextmenu').renderTo();
       
    67 
       
    68 			editor.on('remove', function() {
       
    69 				menu.remove();
       
    70 				menu = null;
       
    71 			});
       
    72 		} else {
       
    73 			menu.show();
       
    74 		}
       
    75 
       
    76 		// Position menu
       
    77 		var pos = {x: e.pageX, y: e.pageY};
       
    78 
       
    79 		if (!editor.inline) {
       
    80 			pos = tinymce.DOM.getPos(editor.getContentAreaContainer());
       
    81 			pos.x += e.clientX;
       
    82 			pos.y += e.clientY;
       
    83 		}
       
    84 
       
    85 		menu.moveTo(pos.x, pos.y);
       
    86 	});
       
    87 });