web/wp-includes/js/tinymce/plugins/tabfocus/editor_plugin_src.js
changeset 194 32102edaa81b
child 204 09a1c134465b
equal deleted inserted replaced
193:2f6f6f7551ca 194:32102edaa81b
       
     1 /**
       
     2  * editor_plugin_src.js
       
     3  *
       
     4  * Copyright 2009, Moxiecode Systems AB
       
     5  * Released under LGPL License.
       
     6  *
       
     7  * License: http://tinymce.moxiecode.com/license
       
     8  * Contributing: http://tinymce.moxiecode.com/contributing
       
     9  */
       
    10 
       
    11 (function() {
       
    12 	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;
       
    13 
       
    14 	tinymce.create('tinymce.plugins.TabFocusPlugin', {
       
    15 		init : function(ed, url) {
       
    16 			function tabCancel(ed, e) {
       
    17 				if (e.keyCode === 9)
       
    18 					return Event.cancel(e);
       
    19 			}
       
    20 
       
    21 			function tabHandler(ed, e) {
       
    22 				var x, i, f, el, v;
       
    23 
       
    24 				function find(d) {
       
    25 					el = DOM.select(':input:enabled,*[tabindex]');
       
    26 
       
    27 					function canSelectRecursive(e) {
       
    28 						return e.nodeName==="BODY" || (e.type != 'hidden' &&
       
    29 							!(e.style.display == "none") &&
       
    30 							!(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode));
       
    31 					}
       
    32 					function canSelectInOldIe(el) {
       
    33 						return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA";
       
    34 					}
       
    35 					function isOldIe() {
       
    36 						return tinymce.isIE6 || tinymce.isIE7;
       
    37 					}
       
    38 					function canSelect(el) {
       
    39 						return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el);
       
    40 					}
       
    41 
       
    42 					each(el, function(e, i) {
       
    43 						if (e.id == ed.id) {
       
    44 							x = i;
       
    45 							return false;
       
    46 						}
       
    47 					});
       
    48 					if (d > 0) {
       
    49 						for (i = x + 1; i < el.length; i++) {
       
    50 							if (canSelect(el[i]))
       
    51 								return el[i];
       
    52 						}
       
    53 					} else {
       
    54 						for (i = x - 1; i >= 0; i--) {
       
    55 							if (canSelect(el[i]))
       
    56 								return el[i];
       
    57 						}
       
    58 					}
       
    59 
       
    60 					return null;
       
    61 				}
       
    62 
       
    63 				if (e.keyCode === 9) {
       
    64 					v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));
       
    65 
       
    66 					if (v.length == 1) {
       
    67 						v[1] = v[0];
       
    68 						v[0] = ':prev';
       
    69 					}
       
    70 
       
    71 					// Find element to focus
       
    72 					if (e.shiftKey) {
       
    73 						if (v[0] == ':prev')
       
    74 							el = find(-1);
       
    75 						else
       
    76 							el = DOM.get(v[0]);
       
    77 					} else {
       
    78 						if (v[1] == ':next')
       
    79 							el = find(1);
       
    80 						else
       
    81 							el = DOM.get(v[1]);
       
    82 					}
       
    83 
       
    84 					if (el) {
       
    85 						if (el.id && (ed = tinymce.get(el.id || el.name)))
       
    86 							ed.focus();
       
    87 						else
       
    88 							window.setTimeout(function() {
       
    89 								if (!tinymce.isWebKit)
       
    90 									window.focus();
       
    91 								el.focus();
       
    92 							}, 10);
       
    93 
       
    94 						return Event.cancel(e);
       
    95 					}
       
    96 				}
       
    97 			}
       
    98 
       
    99 			ed.onKeyUp.add(tabCancel);
       
   100 
       
   101 			if (tinymce.isGecko) {
       
   102 				ed.onKeyPress.add(tabHandler);
       
   103 				ed.onKeyDown.add(tabCancel);
       
   104 			} else
       
   105 				ed.onKeyDown.add(tabHandler);
       
   106 
       
   107 		},
       
   108 
       
   109 		getInfo : function() {
       
   110 			return {
       
   111 				longname : 'Tabfocus',
       
   112 				author : 'Moxiecode Systems AB',
       
   113 				authorurl : 'http://tinymce.moxiecode.com',
       
   114 				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',
       
   115 				version : tinymce.majorVersion + "." + tinymce.minorVersion
       
   116 			};
       
   117 		}
       
   118 	});
       
   119 
       
   120 	// Register plugin
       
   121 	tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);
       
   122 })();