/ docs / manual / _static / _sphinx_javascript_frameworks_compat.js
_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  }