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