_sphinx_javascript_frameworks_compat.js
1 /* 2 * _sphinx_javascript_frameworks_compat.js 3 * ~~~~~~~~~~ 4 * 5 * Compatability shim for jQuery and underscores.js. 6 * 7 * WILL BE REMOVED IN Sphinx 6.0 8 * xref RemovedInSphinx60Warning 9 * 10 */ 11 12 /** 13 * select a different prefix for underscore 14 */ 15 $u = _.noConflict(); 16 17 18 /** 19 * small helper function to urldecode strings 20 * 21 * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL 22 */ 23 jQuery.urldecode = function(x) { 24 if (!x) { 25 return x 26 } 27 return decodeURIComponent(x.replace(/\+/g, ' ')); 28 }; 29 30 /** 31 * small helper function to urlencode strings 32 */ 33 jQuery.urlencode = encodeURIComponent; 34 35 /** 36 * This function returns the parsed url parameters of the 37 * current request. Multiple values per key are supported, 38 * it will always return arrays of strings for the value parts. 39 */ 40 jQuery.getQueryParameters = function(s) { 41 if (typeof s === 'undefined') 42 s = document.location.search; 43 var parts = s.substr(s.indexOf('?') + 1).split('&'); 44 var result = {}; 45 for (var i = 0; i < parts.length; i++) { 46 var tmp = parts[i].split('=', 2); 47 var key = jQuery.urldecode(tmp[0]); 48 var value = jQuery.urldecode(tmp[1]); 49 if (key in result) 50 result[key].push(value); 51 else 52 result[key] = [value]; 53 } 54 return result; 55 }; 56 57 /** 58 * highlight a given string on a jquery object by wrapping it in 59 * span elements with the given class name. 60 */ 61 jQuery.fn.highlightText = function(text, className) { 62 function highlight(node, addItems) { 63 if (node.nodeType === 3) { 64 var val = node.nodeValue; 65 var pos = val.toLowerCase().indexOf(text); 66 if (pos >= 0 && 67 !jQuery(node.parentNode).hasClass(className) && 68 !jQuery(node.parentNode).hasClass("nohighlight")) { 69 var span; 70 var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); 71 if (isInSVG) { 72 span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); 73 } else { 74 span = document.createElement("span"); 75 span.className = className; 76 } 77 span.appendChild(document.createTextNode(val.substr(pos, text.length))); 78 node.parentNode.insertBefore(span, node.parentNode.insertBefore( 79 document.createTextNode(val.substr(pos + text.length)), 80 node.nextSibling)); 81 node.nodeValue = val.substr(0, pos); 82 if (isInSVG) { 83 var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); 84 var bbox = node.parentElement.getBBox(); 85 rect.x.baseVal.value = bbox.x; 86 rect.y.baseVal.value = bbox.y; 87 rect.width.baseVal.value = bbox.width; 88 rect.height.baseVal.value = bbox.height; 89 rect.setAttribute('class', className); 90 addItems.push({ 91 "parent": node.parentNode, 92 "target": rect}); 93 } 94 } 95 } 96 else if (!jQuery(node).is("button, select, textarea")) { 97 jQuery.each(node.childNodes, function() { 98 highlight(this, addItems); 99 }); 100 } 101 } 102 var addItems = []; 103 var result = this.each(function() { 104 highlight(this, addItems); 105 }); 106 for (var i = 0; i < addItems.length; ++i) { 107 jQuery(addItems[i].parent).before(addItems[i].target); 108 } 109 return result; 110 }; 111 112 /* 113 * backward compatibility for jQuery.browser 114 * This will be supported until firefox bug is fixed. 115 */ 116 if (!jQuery.browser) { 117 jQuery.uaMatch = function(ua) { 118 ua = ua.toLowerCase(); 119 120 var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || 121 /(webkit)[ \/]([\w.]+)/.exec(ua) || 122 /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || 123 /(msie) ([\w.]+)/.exec(ua) || 124 ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || 125 []; 126 127 return { 128 browser: match[ 1 ] || "", 129 version: match[ 2 ] || "0" 130 }; 131 }; 132 jQuery.browser = {}; 133 jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; 134 }