/*jshint strict:false, undef:false, unused:false */ var DOCUMENT_POSITION_PRECEDING = 2; // Node.DOCUMENT_POSITION_PRECEDING var ELEMENT_NODE = 1; // Node.ELEMENT_NODE; var TEXT_NODE = 3; // Node.TEXT_NODE; var DOCUMENT_NODE = 9; // Node.DOCUMENT_NODE; var DOCUMENT_FRAGMENT_NODE = 11; // Node.DOCUMENT_FRAGMENT_NODE; var SHOW_ELEMENT = 1; // NodeFilter.SHOW_ELEMENT; var SHOW_TEXT = 4; // NodeFilter.SHOW_TEXT; var START_TO_START = 0; // Range.START_TO_START var START_TO_END = 1; // Range.START_TO_END var END_TO_END = 2; // Range.END_TO_END var END_TO_START = 3; // Range.END_TO_START var ZWS = '\u200B'; var win = doc.defaultView; var ua = navigator.userAgent; var isAndroid = /Android/.test( ua ); var isMac = /Mac OS X/.test( ua ); var isWin = /Windows NT/.test( ua ); var isIOS = /iP(?:ad|hone|od)/.test( ua ) || ( isMac && !!navigator.maxTouchPoints ); var isGecko = /Gecko\//.test( ua ); var isEdge = /Edge\//.test( ua ); var isWebKit = !isEdge && /WebKit\//.test( ua ); var isIE = /Trident\/[4567]\./.test( ua ); var ctrlKey = isMac ? 'meta-' : 'ctrl-'; var cantFocusEmptyTextNodes = isWebKit; var canObserveMutations = typeof MutationObserver !== 'undefined'; var canWeakMap = typeof WeakMap !== 'undefined'; // Use [^ \t\r\n] instead of \S so that nbsp does not count as white-space var notWS = /[^ \t\r\n]/; var indexOf = Array.prototype.indexOf;