static/tinymce/plugins/noneditable/editor_plugin_src.js
function hasSideContent(element, left) {
				var container, offset, walker, node, len;

				container = rng.startContainer;
				offset = rng.startOffset;

				// If endpoint is in middle of text node then expand to beginning/end of element
				if (container.nodeType == 3) {
					len = container.nodeValue.length;
					if ((offset > 0 && offset < len) || (left ? offset == len : offset == 0)) {
						return;
					}
				} else {
					// Can we resolve the node by index
					if (offset < container.childNodes.length) {
						// Browser represents caret position as the offset at the start of an element. When moving right
						// this is the element we are moving into so we consider our container to be child node at offset-1
						var pos = !left && offset > 0 ? offset-1 : offset;
						container = container.childNodes[pos];
						if (container.hasChildNodes()) {
							container = container.firstChild;
						}
					} else {
						// If not then the caret is at the last position in it's container and the caret container should be inserted after the noneditable element
						return !left ? element : null;
					}
				}

				// Walk left/right to look for contents
				walker = new TreeWalker(container, element);
				while (node = walker[left ? 'prev' : 'next']()) {
					if (node.nodeType === 3 && node.nodeValue.length > 0) {
						return;
					} else if (getContentEditable(node) === "true") {
						// Found contentEditable=true element return this one to we can move the caret inside it
						return node;
					}
				}

				return element;
			}
function hasSideContent(element, left) {
				var container, offset, walker, node, len;

				container = rng.startContainer;
				offset = rng.startOffset;

				// If endpoint is in middle of text node then expand to beginning/end of element
				if (container.nodeType == 3) {
					len = container.nodeValue.length;
					if ((offset > 0 && offset < len) || (left ? offset == len : offset == 0)) {
						return;
					}
				} else {
					// Can we resolve the node by index
					if (offset < container.childNodes.length) {
						// Browser represents caret position as the offset at the start of an element. When moving right
						// this is the element we are moving into so we consider our container to be child node at offset-1
						var pos = !left && offset > 0 ? offset-1 : offset;
						container = container.childNodes[pos];
						if (container.hasChildNodes()) {
							container = container.firstChild;
						}
					} else {
						// If not then the caret is at the last position in it's container and the caret container should be inserted after the noneditable element
						return !left ? element : null;
					}
				}

				// Walk left/right to look for contents
				walker = new TreeWalker(container, element);
				while (node = walker[left ? 'prev' : 'next']()) {
					if (node.nodeType === 3 && node.nodeValue.length > 0) {
						return;
					} else if (getContentEditable(node) === "true") {
						// Found contentEditable=true element return this one to we can move the caret inside it
						return node;
					}
				}

				return element;
			}
function hasSideContent ( element , left ) { var container , offset , walker , node , len ; container = rng . startContainer ; offset = rng . startOffset ; // If endpoint is in middle of text node then expand to beginning/end of element
 if ( container . nodeType == 3 ) { len = container . nodeValue . length ; if ( ( offset > 0 && offset < len ) || ( left ? offset == len : offset == 0 ) ) { return ; } } else { // Can we resolve the node by index
 if ( offset < container . childNodes . length ) { // Browser represents caret position as the offset at the start of an element. When moving right
 // this is the element we are moving into so we consider our container to be child node at offset-1
 var pos = ! left && offset > 0 ? offset - 1 : offset ; container = container . childNodes [ pos ] ; if ( container . hasChildNodes ( ) ) { container = container . firstChild ; } } else { // If not then the caret is at the last position in it's container and the caret container should be inserted after the noneditable element
 return ! left ? element : null ; } } // Walk left/right to look for contents
 walker = new TreeWalker ( container , element ) ; while ( node = walker [ left ? 'prev' : 'next' ] ( ) ) { if ( node . nodeType === 3 && node . nodeValue . length > 0 ) { return ; } else if ( getContentEditable ( node ) === "true" ) { // Found contentEditable=true element return this one to we can move the caret inside it
 return node ; } } return element ; }
Checks if there is any contents to the left/right side of caret returns the noneditable element or any editable element if it finds one inside
Checks if there is any contents to the left / right side of caret returns the noneditable element or any editable element if it finds one inside