You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2020/05/10 19:18:51 UTC

svn commit: r1060342 [18/36] - in /websites/production/logging/content/log4j: ./ log4j-scala-12.0/ log4j-scala-12.0/api/ log4j-scala-12.0/api/2.10/ log4j-scala-12.0/api/2.10/index/ log4j-scala-12.0/api/2.10/lib/ log4j-scala-12.0/api/2.10/org/ log4j-sca...

Added: websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/abstract_type.svg
==============================================================================
--- websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/abstract_type.svg (added)
+++ websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/abstract_type.svg Sun May 10 19:18:49 2020
@@ -0,0 +1,54 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="72px" height="72px" viewBox="0 0 72 72" version="1.1">
+  <defs>
+    <filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-1">
+      <feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
+      <feGaussianBlur stdDeviation="2" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
+      <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.14 0" in="shadowBlurOuter1" type="matrix" result="shadowMatrixOuter1"/>
+      <feMerge>
+        <feMergeNode in="shadowMatrixOuter1"/>
+        <feMergeNode in="SourceGraphic"/>
+      </feMerge>
+    </filter>
+    <circle id="path-2" cx="32" cy="32" r="32"/>
+    <filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-4">
+      <feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
+      <feGaussianBlur stdDeviation="2" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
+      <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.14 0" in="shadowBlurOuter1" type="matrix" result="shadowMatrixOuter1"/>
+      <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetInner1"/>
+      <feGaussianBlur stdDeviation="0" in="shadowOffsetInner1" result="shadowBlurInner1"/>
+      <feComposite in="shadowBlurInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"/>
+      <feColorMatrix values="0 0 0 0 1   0 0 0 0 1   0 0 0 0 1  0 0 0 0.14 0" in="shadowInnerInner1" type="matrix" result="shadowMatrixInner1"/>
+      <feOffset dx="0" dy="-1" in="SourceAlpha" result="shadowOffsetInner2"/>
+      <feGaussianBlur stdDeviation="0" in="shadowOffsetInner2" result="shadowBlurInner2"/>
+      <feComposite in="shadowBlurInner2" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner2"/>
+      <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.14 0" in="shadowInnerInner2" type="matrix" result="shadowMatrixInner2"/>
+      <feMerge>
+        <feMergeNode in="shadowMatrixOuter1"/>
+        <feMergeNode in="SourceGraphic"/>
+        <feMergeNode in="shadowMatrixInner1"/>
+        <feMergeNode in="shadowMatrixInner2"/>
+      </feMerge>
+    </filter>
+    <path id="path-5" d="M32 61C49.673112 61 64 48.0162577 64 32 64 15.9837423 49.673112 3 32 3 14.326888 3 0 15.9837423 0 32 0 48.0162577 14.326888 61 32 61Z"/>
+  </defs>
+  <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+    <g id="Artboard-1" transform="translate(-298.000000, -91.000000)">
+      <g id="BG" transform="translate(302.000000, 91.000000)">
+        <g id="Icon">
+          <mask id="mask-3" fill="white">
+            <use xlink:href="#path-2"/>
+          </mask>
+          <use id="Mask" fill="#6C7A89" filter="url(#filter-1)" xlink:href="#path-2"/>
+          <mask id="mask-6" fill="white">
+            <use xlink:href="#path-5"/>
+          </mask>
+          <text id="a" mask="url(#mask-6)" font-family="Open Sans, Helvetica Neueu, Sans-serif" font-size="40" font-weight="normal" fill="#FFFFFF">
+            <tspan x="21" y="43">
+              a
+            </tspan>
+          </text>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>

Added: websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/class.svg
==============================================================================
--- websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/class.svg (added)
+++ websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/class.svg Sun May 10 19:18:49 2020
@@ -0,0 +1,54 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="72px" height="72px" viewBox="0 0 72 72" version="1.1">
+  <defs>
+    <filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-1">
+      <feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
+      <feGaussianBlur stdDeviation="2" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
+      <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.14 0" in="shadowBlurOuter1" type="matrix" result="shadowMatrixOuter1"/>
+      <feMerge>
+        <feMergeNode in="shadowMatrixOuter1"/>
+        <feMergeNode in="SourceGraphic"/>
+      </feMerge>
+    </filter>
+    <circle id="path-2" cx="32" cy="32" r="32"/>
+    <filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-4">
+      <feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
+      <feGaussianBlur stdDeviation="2" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
+      <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.14 0" in="shadowBlurOuter1" type="matrix" result="shadowMatrixOuter1"/>
+      <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetInner1"/>
+      <feGaussianBlur stdDeviation="0" in="shadowOffsetInner1" result="shadowBlurInner1"/>
+      <feComposite in="shadowBlurInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"/>
+      <feColorMatrix values="0 0 0 0 1   0 0 0 0 1   0 0 0 0 1  0 0 0 0.14 0" in="shadowInnerInner1" type="matrix" result="shadowMatrixInner1"/>
+      <feOffset dx="0" dy="-1" in="SourceAlpha" result="shadowOffsetInner2"/>
+      <feGaussianBlur stdDeviation="0" in="shadowOffsetInner2" result="shadowBlurInner2"/>
+      <feComposite in="shadowBlurInner2" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner2"/>
+      <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.14 0" in="shadowInnerInner2" type="matrix" result="shadowMatrixInner2"/>
+      <feMerge>
+        <feMergeNode in="shadowMatrixOuter1"/>
+        <feMergeNode in="SourceGraphic"/>
+        <feMergeNode in="shadowMatrixInner1"/>
+        <feMergeNode in="shadowMatrixInner2"/>
+      </feMerge>
+    </filter>
+    <path id="path-5" d="M32 61C49.673112 61 64 48.0162577 64 32 64 15.9837423 49.673112 3 32 3 14.326888 3 0 15.9837423 0 32 0 48.0162577 14.326888 61 32 61Z"/>
+  </defs>
+  <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+    <g id="Artboard-1" transform="translate(-298.000000, -91.000000)">
+      <g id="BG" transform="translate(302.000000, 91.000000)">
+        <g id="Icon">
+          <mask id="mask-3" fill="white">
+            <use xlink:href="#path-2"/>
+          </mask>
+          <use id="Mask" fill="#44AD7D" filter="url(#filter-1)" xlink:href="#path-2"/>
+          <mask id="mask-6" fill="white">
+            <use xlink:href="#path-5"/>
+          </mask>
+          <text id="C" mask="url(#mask-6)" font-family="Open Sans, Helvetica Neueu, Sans-serif" font-size="40" font-weight="normal" fill="#FFFFFF">
+            <tspan x="17" y="47">
+              C
+            </tspan>
+          </text>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>

Added: websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/class_comp.svg
==============================================================================
--- websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/class_comp.svg (added)
+++ websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/class_comp.svg Sun May 10 19:18:49 2020
@@ -0,0 +1,57 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="72px" height="72px" viewBox="0 0 72 72" version="1.1">
+  <defs>
+    <filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-1">
+      <feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
+      <feGaussianBlur stdDeviation="2" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
+      <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.14 0" in="shadowBlurOuter1" type="matrix" result="shadowMatrixOuter1"/>
+      <feMerge>
+        <feMergeNode in="shadowMatrixOuter1"/>
+        <feMergeNode in="SourceGraphic"/>
+      </feMerge>
+    </filter>
+    <circle id="path-2" cx="32" cy="32" r="32"/>
+    <filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-4">
+      <feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
+      <feGaussianBlur stdDeviation="2" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
+      <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.14 0" in="shadowBlurOuter1" type="matrix" result="shadowMatrixOuter1"/>
+      <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetInner1"/>
+      <feGaussianBlur stdDeviation="0" in="shadowOffsetInner1" result="shadowBlurInner1"/>
+      <feComposite in="shadowBlurInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"/>
+      <feColorMatrix values="0 0 0 0 1   0 0 0 0 1   0 0 0 0 1  0 0 0 0.14 0" in="shadowInnerInner1" type="matrix" result="shadowMatrixInner1"/>
+      <feOffset dx="0" dy="-1" in="SourceAlpha" result="shadowOffsetInner2"/>
+      <feGaussianBlur stdDeviation="0" in="shadowOffsetInner2" result="shadowBlurInner2"/>
+      <feComposite in="shadowBlurInner2" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner2"/>
+      <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.14 0" in="shadowInnerInner2" type="matrix" result="shadowMatrixInner2"/>
+      <feMerge>
+        <feMergeNode in="shadowMatrixOuter1"/>
+        <feMergeNode in="SourceGraphic"/>
+        <feMergeNode in="shadowMatrixInner1"/>
+        <feMergeNode in="shadowMatrixInner2"/>
+      </feMerge>
+    </filter>
+    <path id="path-5" d="M32 61C49.673112 61 64 48.0162577 64 32 64 15.9837423 49.673112 3 32 3 14.326888 3 0 15.9837423 0 32 0 48.0162577 14.326888 61 32 61Z"/>
+  </defs>
+  <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+    <g id="Artboard-1" transform="translate(-298.000000, -91.000000)">
+      <g id="BG" transform="translate(302.000000, 91.000000)">
+        <g id="Icon">
+          <mask id="mask-3" fill="white">
+            <use xlink:href="#path-2"/>
+          </mask>
+          <use id="Mask" fill="#2C6C8D" filter="url(#filter-1)" xlink:href="#path-2"/>
+          <rect id="Rectangle-2" opacity="0.3" fill="#000000" mask="url(#mask-3)" x="-8" y="33" width="80" height="31"/>
+          <mask id="mask-6" fill="white">
+            <use xlink:href="#path-5"/>
+          </mask>
+          <use id="Mask" fill="#44AD7D" filter="url(#filter-4)" xlink:href="#path-5"/>
+          <text id="C" mask="url(#mask-6)" font-family="Open Sans, Helvetica Neueu, Sans-serif" font-size="40" font-weight="normal" fill="#FFFFFF">
+            <tspan x="17" y="47">
+              C
+            </tspan>
+          </text>
+          <rect id="Rectangle-2" opacity="0.190065299" fill="#000000" mask="url(#mask-6)" x="-8" y="2" width="80" height="31"/>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>

Added: websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/class_diagram.png
==============================================================================
Binary file - no diff available.

Propchange: websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/class_diagram.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/diagrams.css
==============================================================================
--- websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/diagrams.css (added)
+++ websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/diagrams.css Sun May 10 19:18:49 2020
@@ -0,0 +1,203 @@
+@font-face {
+  font-family: 'Material Icons';
+  font-style: normal;
+  font-weight: 400;
+  src: url(MaterialIcons-Regular.eot);
+  src: local('Material Icons'),
+  local('MaterialIcons-Regular'),
+  url(MaterialIcons-Regular.woff) format('woff'),
+  url(MaterialIcons-Regular.ttf) format('truetype');
+}
+
+.material-icons {
+  font-family: 'Material Icons';
+  font-weight: normal;
+  font-style: normal;
+  font-size: 24px;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  -webkit-font-smoothing: antialiased;
+  text-rendering: optimizeLegibility;
+  -moz-osx-font-smoothing: grayscale;
+  font-feature-settings: 'liga';
+}
+
+.diagram-container {
+  display: none;
+}
+
+.diagram-container > span.toggle {
+  z-index: 9;
+}
+
+.diagram {
+  overflow: hidden;
+  padding-top:15px;
+}
+
+.diagram svg {
+  display: block;
+  position: absolute;
+  visibility: hidden;
+  margin: auto;
+}
+
+.diagram-help {
+  float:right;
+  display:none;
+}
+
+.magnifying {
+  cursor: -webkit-zoom-in ! important;
+  cursor: -moz-zoom-in ! important;
+  cursor: pointer;
+}
+
+#close-link {
+  position: absolute;
+  z-index: 100;
+  font-family: Arial, sans-serif;
+  font-size: 10pt;
+  text-decoration: underline;
+  color: #315479;
+}
+
+#close:hover {
+  text-decoration: none;
+}
+
+#inheritance-diagram-container > span.toggle {
+  z-index: 2;
+}
+
+.diagram-container.full-screen {
+  position: fixed !important;
+  margin: 0;
+  border-radius: 0;
+  top: 0em;
+  bottom: 3em;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 10000;
+}
+
+.diagram-container.full-screen > span.toggle {
+  display: none;
+}
+
+.diagram-container.full-screen > div.diagram {
+  position: absolute;
+  top: 0; right: 0; bottom: 0; left: 0;
+  margin: auto;
+}
+
+#diagram-controls {
+  z-index: 2;
+  position: absolute;
+  bottom: 1em;
+  right: 1em;
+}
+
+#diagram-controls > button.diagram-btn {
+  border-radius: 1.25em;
+  height: 2.5em;
+  width: 2.5em;
+  background-color: #c2c2c2;
+  color: #fff;
+  border: 0;
+  float: left;
+  margin: 0 0.1em;
+  cursor: pointer;
+  line-height: 0.9;
+  outline: none;
+}
+
+#diagram-controls > button.diagram-btn:hover {
+  background-color: #e2e2e2;
+}
+
+#diagram-controls > button.diagram-btn > i.material-icons {
+  font-size: 1.5em;
+}
+
+svg a {
+  cursor:pointer;
+}
+
+svg text {
+  font-size: 8.5px;
+}
+
+/* try to move the node text 1px in order to be vertically
+ * centered (does not work in all browsers)
+ */
+svg .node text {
+  transform: translate(0px,1px);
+  -ms-transform: translate(0px,1px);
+  -webkit-transform: translate(0px,1px);
+  -o-transform: translate(0px,1px);
+  -moz-transform: translate(0px,1px);
+}
+
+/* hover effect for edges */
+
+svg .edge.over text,
+svg .edge.implicit-incoming.over polygon,
+svg .edge.implicit-outgoing.over polygon {
+  fill: #103A51;
+}
+
+svg .edge.over path,
+svg .edge.over polygon {
+  stroke: #103A51;
+}
+
+/* for hover effect on nodes in diagrams, edit the following */
+svg.class-diagram .node {}
+svg.class-diagram .node.this {}
+svg.class-diagram .node.over {}
+
+svg .node.over polygon {
+  stroke: #202020;
+}
+
+/* hover effect for nodes in package diagrams */
+
+svg.package-diagram .node.class.over polygon,
+svg.class-diagram .node.this.class.over polygon {
+  fill: #098552;
+  fill: #04663e;
+}
+
+svg.package-diagram .node.trait.over polygon,
+svg.class-diagram .node.this.trait.over polygon {
+  fill: #3c7b9b;
+  fill: #235d7b;
+}
+
+svg.package-diagram .node.type.over polygon,
+svg.class-diagram .node.this.type.over polygon {
+  fill: #098552;
+  fill: #04663e;
+}
+
+
+svg.package-diagram .node.object.over polygon {
+  fill: #183377;
+}
+
+svg.package-diagram .node.outside.over polygon {
+  fill: #d4d4d4;
+}
+
+svg.package-diagram .node.default.over polygon {
+  fill: #d4d4d4;
+}

Added: websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/diagrams.js
==============================================================================
--- websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/diagrams.js (added)
+++ websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/diagrams.js Sun May 10 19:18:49 2020
@@ -0,0 +1,240 @@
+/**
+ * JavaScript functions enhancing the SVG diagrams.
+ *
+ * @author Damien Obrist
+ */
+
+var diagrams = {};
+
+/**
+ * Initializes the diagrams in the main window.
+ */
+$(document).ready(function()
+{
+	// hide diagrams in browsers not supporting SVG
+	if(Modernizr && !Modernizr.inlinesvg)
+		return;
+
+	if($("#content-diagram").length)
+		$("#inheritance-diagram").css("padding-bottom", "20px");
+
+	$(".diagram-container").css("display", "block");
+
+	$(".diagram").each(function() {
+		// store initial dimensions
+		$(this).data("width", $("svg", $(this)).width());
+		$(this).data("height", $("svg", $(this)).height());
+		// store unscaled clone of SVG element
+		$(this).data("svg", $(this).get(0).childNodes[0].cloneNode(true));
+	});
+
+	// make diagram visible, hide container
+	$(".diagram").css("display", "none");
+	$(".diagram svg").css({
+		"position": "static",
+		"visibility": "visible",
+		"z-index": "auto"
+	});
+
+	// enable linking to diagrams
+	if($(location).attr("hash") == "#inheritance-diagram") {
+		diagrams.toggle($("#inheritance-diagram-container"), true);
+	} else if($(location).attr("hash") == "#content-diagram") {
+		diagrams.toggle($("#content-diagram-container"), true);
+	}
+
+	$(".diagram-link").click(function() {
+		diagrams.toggle($(this).parent());
+	});
+
+	// register resize function
+	$(window).resize(diagrams.resize);
+
+	// don't bubble event to parent div
+	// when clicking on a node of a resized
+	// diagram
+	$("svg a").click(function(e) {
+		e.stopPropagation();
+	});
+
+	diagrams.initHighlighting();
+
+    $("button#diagram-fs").click(function() {
+        $(".diagram-container").toggleClass("full-screen");
+        $(".diagram-container > div.diagram").css({
+            height: $("svg").height() + "pt"
+        });
+
+        $panzoom.panzoom("reset", { animate: false, contain: false });
+    });
+});
+
+/**
+ * Initializes highlighting for nodes and edges.
+ */
+diagrams.initHighlighting = function()
+{
+	// helper function since $.hover doesn't work in IE
+
+	function hover(elements, fn)
+	{
+		elements.mouseover(fn);
+		elements.mouseout(fn);
+	}
+
+	// inheritance edges
+
+	hover($("svg .edge.inheritance"), function(evt){
+		var toggleClass = evt.type == "mouseout" ? diagrams.removeClass : diagrams.addClass;
+		var parts = $(this).attr("id").split("_");
+		toggleClass($("#" + parts[0] + "_" + parts[1]));
+		toggleClass($("#" + parts[0] + "_" + parts[2]));
+		toggleClass($(this));
+	});
+
+	// nodes
+
+	hover($("svg .node"), function(evt){
+		var toggleClass = evt.type == "mouseout" ? diagrams.removeClass : diagrams.addClass;
+		toggleClass($(this));
+		var parts = $(this).attr("id").split("_");
+		var index = parts[1];
+		$("svg#" + parts[0] + " .edge.inheritance").each(function(){
+			var parts2 = $(this).attr("id").split("_");
+			if(parts2[1] == index)
+			{
+				toggleClass($("#" + parts2[0] + "_" + parts2[2]));
+				toggleClass($(this));
+			} else if(parts2[2] == index)
+			{
+				toggleClass($("#" + parts2[0] + "_" + parts2[1]));
+				toggleClass($(this));
+			}
+		});
+	});
+
+	// incoming implicits
+
+	hover($("svg .node.implicit-incoming"), function(evt){
+		var toggleClass = evt.type == "mouseout" ? diagrams.removeClass : diagrams.addClass;
+		toggleClass($(this));
+		toggleClass($("svg .edge.implicit-incoming"));
+		toggleClass($("svg .node.this"));
+	});
+
+	hover($("svg .edge.implicit-incoming"), function(evt){
+		var toggleClass = evt.type == "mouseout" ? diagrams.removeClass : diagrams.addClass;
+		toggleClass($(this));
+		toggleClass($("svg .node.this"));
+		$("svg .node.implicit-incoming").each(function(){
+			toggleClass($(this));
+		});
+	});
+
+	// implicit outgoing nodes
+
+	hover($("svg .node.implicit-outgoing"), function(evt){
+		var toggleClass = evt.type == "mouseout" ? diagrams.removeClass : diagrams.addClass;
+		toggleClass($(this));
+		toggleClass($("svg .edge.implicit-outgoing"));
+		toggleClass($("svg .node.this"));
+	});
+
+	hover($("svg .edge.implicit-outgoing"), function(evt){
+		var toggleClass = evt.type == "mouseout" ? diagrams.removeClass : diagrams.addClass;
+		toggleClass($(this));
+		toggleClass($("svg .node.this"));
+		$("svg .node.implicit-outgoing").each(function(){
+			toggleClass($(this));
+		});
+	});
+};
+
+/**
+ * Resizes the diagrams according to the available width.
+ */
+diagrams.resize = function() {
+    // available width
+    var availableWidth = $(".diagram-container").width();
+
+    $(".diagram-container").each(function() {
+        // unregister click event on whole div
+        $(".diagram", this).unbind("click");
+        var diagramWidth = $(".diagram", this).data("width");
+        var diagramHeight = $(".diagram", this).data("height");
+
+        if (diagramWidth > availableWidth) {
+            // resize diagram
+            var height = diagramHeight / diagramWidth * availableWidth;
+            $(".diagram svg", this).width(availableWidth);
+            $(".diagram svg", this).height(height);
+        } else {
+            // restore full size of diagram
+            $(".diagram svg", this).width(diagramWidth);
+            $(".diagram svg", this).height(diagramHeight);
+            // don't show custom cursor any more
+            $(".diagram", this).removeClass("magnifying");
+        }
+    });
+};
+
+/**
+ * Shows or hides a diagram depending on its current state.
+ */
+diagrams.toggle = function(container, dontAnimate)
+{
+    // change class of link
+    $(".diagram-link", container).toggleClass("open");
+    // get element to show / hide
+    var div = $(".diagram", container);
+    if (div.is(':visible')) {
+        $(".diagram-help", container).hide();
+        div.unbind("click");
+        div.slideUp(100);
+
+        $("#diagram-controls", container).hide();
+        $("#inheritance-diagram-container").unbind('mousewheel.focal');
+    } else {
+        diagrams.resize();
+        if(dontAnimate)
+            div.show();
+        else
+            div.slideDown(100);
+        $(".diagram-help", container).show();
+
+        $("#diagram-controls", container).show();
+
+        $(".diagram-container").on('mousewheel.focal', function(e) {
+            e.preventDefault();
+            var delta = e.delta || e.originalEvent.wheelDelta;
+            var zoomOut = delta ? delta < 0 : e.originalEvent.deltaY > 0;
+            $panzoom.panzoom('zoom', zoomOut, {
+                increment: 0.1,
+                animate: true,
+                focal: e
+            });
+        });
+    }
+};
+
+/**
+ * Helper method that adds a class to a SVG element.
+ */
+diagrams.addClass = function(svgElem, newClass) {
+	newClass = newClass || "over";
+	var classes = svgElem.attr("class");
+	if ($.inArray(newClass, classes.split(/\s+/)) == -1) {
+		classes += (classes ? ' ' : '') + newClass;
+		svgElem.attr("class", classes);
+	}
+};
+
+/**
+ * Helper method that removes a class from a SVG element.
+ */
+diagrams.removeClass = function(svgElem, oldClass) {
+	oldClass = oldClass || "over";
+	var classes = svgElem.attr("class");
+	classes = $.grep(classes.split(/\s+/), function(n, i) { return n != oldClass; }).join(' ');
+	svgElem.attr("class", classes);
+};

Added: websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/index.css
==============================================================================
--- websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/index.css (added)
+++ websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/index.css Sun May 10 19:18:49 2020
@@ -0,0 +1,928 @@
+/* Fonts */
+@font-face {
+  font-family: 'Lato';
+  font-style: normal;
+  font-weight: 100;
+  src: url('lato-v11-latin-regular.eot');
+  src: local('Lato'), local('Lato'),
+  url('lato-v11-latin-100.eot?#iefix') format('embedded-opentype'),
+  url('lato-v11-latin-100.woff') format('woff'),
+  url('lato-v11-latin-100.ttf') format('truetype');
+}
+
+@font-face {
+  font-family: 'Lato';
+  font-style: normal;
+  font-weight: 400;
+  src: url('lato-v11-latin-regular.eot');
+  src: local('Lato'), local('Lato'),
+  url('lato-v11-latin-regular.eot?#iefix') format('embedded-opentype'),
+  url('lato-v11-latin-regular.woff') format('woff'),
+  url('lato-v11-latin-regular.ttf') format('truetype');
+}
+
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: url('open-sans-v13-latin-regular.eot');
+  src: local('Open Sans'), local('OpenSans'),
+  url('open-sans-v13-latin-regular.eot?#iefix') format('embedded-opentype'),
+  url('open-sans-v13-latin-regular.woff') format('woff'),
+  url('open-sans-v13-latin-regular.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: italic;
+  font-weight: 400;
+  src: url('open-sans-v13-latin-400i.eot');
+  src: local('Open Sans Italic'), local('OpenSans-Italic'),
+  url('open-sans-v13-latin-400i.eot?#iefix') format('embedded-opentype'),
+  url('open-sans-v13-latin-400i.woff') format('woff'),
+  url('open-sans-v13-latin-400i.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: oblique;
+  font-weight: 400;
+  src: url('open-sans-v13-latin-400i.eot');
+  src: local('Open Sans Italic'), local('OpenSans-Italic'),
+  url('open-sans-v13-latin-400i.eot?#iefix') format('embedded-opentype'),
+  url('open-sans-v13-latin-400i.woff') format('woff'),
+  url('open-sans-v13-latin-400i.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: url('open-sans-v13-latin-700.eot');
+  src: local('Open Sans Bold'), local('OpenSans-Bold'),
+  url('open-sans-v13-latin-700.eot?#iefix') format('embedded-opentype'),
+  url('open-sans-v13-latin-700.woff') format('woff'),
+  url('open-sans-v13-latin-700.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: italic;
+  font-weight: 700;
+  src: url('open-sans-v13-latin-700i.eot');
+  src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'),
+  url('open-sans-v13-latin-700i.eot?#iefix') format('embedded-opentype'),
+  url('open-sans-v13-latin-700i.woff') format('woff'),
+  url('open-sans-v13-latin-700i.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: oblique;
+  font-weight: 700;
+  src: url('open-sans-v13-latin-700i.eot');
+  src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'),
+  url('open-sans-v13-latin-700i.eot?#iefix') format('embedded-opentype'),
+  url('open-sans-v13-latin-700i.woff') format('woff'),
+  url('open-sans-v13-latin-700i.ttf') format('truetype');
+}
+
+@font-face {
+  font-family: 'Source Code Pro';
+  font-style: normal;
+  font-weight: 400;
+  src: url('source-code-pro-v6-latin-regular.eot');
+  src: local('Source Code Pro'), local('SourceCodePro-Regular'),
+  url('source-code-pro-v6-latin-regular.eot?#iefix') format('embedded-opentype'),
+  url('source-code-pro-v6-latin-regular.woff') format('woff'),
+  url('source-code-pro-v6-latin-regular.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Source Code Pro';
+  font-style: normal;
+  font-weight: 700;
+  src: url('source-code-pro-v6-latin-700.eot');
+  src: local('Source Code Pro Bold'), local('SourceCodePro-Bold'),
+  url('source-code-pro-v6-latin-700.eot?#iefix') format('embedded-opentype'),
+  url('source-code-pro-v6-latin-700.woff') format('woff'),
+  url('source-code-pro-v6-latin-700.ttf') format('truetype');
+}
+
+* {
+  color: inherit;
+  text-decoration: none;
+  font-family: "Lato", Arial, sans-serif;
+  border-width: 0px;
+  margin: 0px;
+}
+
+u { 
+  text-decoration: underline; 
+}
+
+a {
+  cursor: pointer;
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+span.entity > a {
+  padding: 0.1em 0.5em;
+  margin-left: 0.2em;
+}
+
+span.entity > a.selected {
+  background-color: #C2D2DC;
+  border-radius: 0.2em;
+}
+
+html {
+  background-color: #f0f3f6;
+  box-sizing: border-box;
+}
+*, *:before, *:after {
+  box-sizing: inherit;
+}
+
+textarea, input { outline: none; }
+
+#library {
+    display: none;
+}
+
+#browser {
+  width: 17.5em;
+  top: 0px;
+  left: 0;
+  bottom: 0px;
+  display: block;
+  position: fixed;
+  background-color: #f0f3f6;
+}
+
+#browser.full-screen {
+  left: -17.5em;
+}
+
+#search {
+  background-color: #103a51; /* typesafe blue */
+  min-height: 5.5em;
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  height: 3em;
+  min-height: initial;
+  z-index: 103;
+  box-shadow: 0 0 4px rgba(0, 0, 0, 0.18), 0 4px 8px rgba(0, 0, 0, 0.28);
+}
+
+#search > h1 {
+  font-size: 2em;
+  position: absolute;
+  left: 0.25em;
+  top: 0.5em;
+}
+
+#search > h2 {
+  position: absolute;
+  left: 3.8em;
+  top: 3em;
+}
+
+#search > img.scala-logo {
+  width: 3em;
+  height: auto;
+  position: absolute;
+  left: 5.8em;
+  top: 0.43em;
+}
+
+#search > span.toggle-sidebar {
+  position: absolute;
+  top: 0.8em;
+  left: 0.2em;
+  color: #fff;
+  z-index: 99;
+  width: 1.5em;
+  height: 1.5em;
+}
+
+#search > span#doc-title {
+  color: #fff;
+  position: absolute;
+  top: 0.8em;
+  left: 0;
+  width: 18em;
+  text-align: center;
+  cursor: pointer;
+  z-index: 2;
+}
+
+#search > span#doc-title > span#doc-version {
+  color: #c2c2c2;
+  font-weight: 100;
+  font-size: 0.72em;
+  display: inline-block;
+  width: 12ex;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+#search > span#doc-title > span#doc-version:hover {
+  overflow: visible;
+}
+
+#search > span.toggle-sidebar:hover {
+  cursor: pointer;
+}
+
+/* Pseudo element replacing UTF8-symbol "Trigram From Heaven" */
+#search > span.toggle-sidebar:before {
+  position: absolute;
+  top: -0.45em;
+  left: 0.45em;
+  content: "";
+  display: block;
+  width: 0.7em;
+  -webkit-box-shadow: 0 0.8em 0 1px #fff, 0 1.1em 0 1px #fff, 0 1.4em 0 1px #fff;
+  box-shadow: 0 0.8em 0 1px #fff, 0 1.1em 0 1px #fff, 0 1.4em 0 1px #fff;
+}
+
+#search > span.toggle-sidebar:hover:before {
+  -webkit-box-shadow: 0 0.8em 0 1px #c2c2c2, 0 1.1em 0 1px #c2c2c2, 0 1.4em 0 1px #c2c2c2;
+  box-shadow: 0 0.8em 0 1px #c2c2c2, 0 1.1em 0 1px #c2c2c2, 0 1.4em 0 1px #c2c2c2;
+}
+
+#textfilter > .pre {
+  display: block;
+  position: absolute;
+  top: 0;
+  left: 0;
+  height: 23px;
+  width: 21px;
+}
+
+#textfilter {
+  position: absolute;
+  top: 0.5em;
+  bottom: 0.8em;
+  left: 0;
+  right: 0;
+  display: block;
+  height: 2em;
+}
+
+#textfilter > .input {
+  position: relative;
+  display: block;
+  padding: 0.2em;
+  max-width: 48.5em;
+  margin: 0 auto;
+}
+
+#textfilter > .input > i#search-icon {
+  color: rgba(255,255,255, 0.4);
+  position: absolute;
+  left: 0.34em;
+  top: 0.3em;
+  font-size: 1.3rem;
+}
+
+#textfilter > span.toggle {
+  cursor: pointer;
+  padding-left: 15px;
+  position: absolute;
+  left: -0.55em;
+  top: 3em;
+  z-index: 99;
+  color: #fff;
+  font-size: 0.8em;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+#textfilter > span.toggle:hover {
+  color: #c2c2c2;
+}
+
+#textfilter > span.toggle:hover {
+  cursor: pointer;
+}
+
+#textfilter > .hide:hover {
+  cursor: pointer;
+  color: #a2a2a2;
+}
+
+#textfilter > .input > input {
+  font-family: "Open Sans";
+  font-size: 0.85em;
+  height: 2em;
+  padding: 0 0 0 2.1em;
+  color: #fff;
+  width: 100%;
+  border-radius: 0.2em;
+  background: rgba(255, 255, 255, 0.2);
+}
+
+
+#textfilter > .input > input::-webkit-input-placeholder {
+  color: rgba(255, 255, 255, 0.4);
+}
+
+#textfilter > .input > input::-moz-placeholder {
+  color: rgba(255, 255, 255, 0.4);
+}
+
+#textfilter > .input > input:-ms-input-placeholder {
+  color: rgba(255, 255, 255, 0.4);
+}
+
+#textfilter > .input > input:-moz-placeholder {
+  color: rgba(255, 255, 255, 0.4);
+}
+
+#focusfilter > .focusremove:hover {
+  text-decoration: none;
+}
+
+#textfilter > .input > .clear {
+  display: none;
+  position: absolute;
+  font-size: 0.9em;
+  top: 0.7em;
+  right: 0.1em;
+  height: 23px;
+  width: 21px;
+  color: rgba(255, 255, 255, 0.4);
+}
+
+#textfilter > .input > .clear:hover {
+  cursor: pointer;
+  color: #fff;
+}
+
+#focusfilter {
+  font-size: 0.9em;
+  position: relative;
+  text-align: center;
+  display: none;
+  padding: 0.6em;
+  background-color: #f16665;
+  color: #fff;
+  margin: 3.9em 0.55em 0 0.35em;
+  border-radius: 0.2em;
+  z-index: 1;
+}
+
+div#search-progress {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 0.25em;
+}
+
+div#search-progress > div#progress-fill {
+  width: 0%;
+  background-color: #f16665;
+  transition: 0.1s;
+}
+
+#focusfilter .focuscoll {
+  font-weight: bold;
+}
+
+#focusfilter a.focusremove {
+  margin-left: 0.2em;
+  font-size: 0.9em;
+}
+
+#kindfilter-container {
+  position: fixed;
+  display: block;
+  z-index: 99;
+  bottom: 0.5em;
+  left: 0;
+  width: 17.25em;
+}
+
+#kindfilter {
+  float: right;
+  text-align: center;
+  padding: 0.3em 1em;
+  border-radius: 0.8em;
+  background: #f16665;
+  border-bottom: 2px solid #d64546;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  color: #fff;
+  font-size: 0.8em;
+}
+
+#kindfilter:hover {
+  cursor: pointer;
+  background-color: rgb(226, 87, 88);
+}
+
+#letters {
+  position: relative;
+  text-align: center;
+  border: 0;
+  margin-top: 0em;
+  color: #fff;
+}
+
+#letters > a, #letters > span {
+  color: #fff;
+  font-size: 0.67em;
+  padding-right: 2px;
+}
+
+#letters > a:hover {
+  text-decoration: none;
+  color: #c2c2c2;
+}
+
+#letters > span {
+  color: #bbb;
+}
+
+div#content-scroll-container {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 100;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+
+div#content-container {
+  max-width: 1140px;
+  margin: 0 auto;
+}
+
+div#content-container > div#content {
+  -webkit-overflow-scrolling: touch;
+  display: block;
+  overflow-y: hidden;
+  max-width: 1140px;
+  margin: 4em auto 0;
+}
+
+div#content-container > div#subpackage-spacer {
+  float: right;
+  height: 100%;
+  margin: 1.1rem 0.5rem 0 0.5em;
+  font-size: 0.8em;
+  min-width: 8rem;
+  max-width: 16rem;
+}
+
+div#packages > h1 {
+  color: #103a51;
+}
+
+div#packages > ul {
+  list-style-type: none;
+}
+
+div#packages > ul > li {
+  position: relative;
+  margin: 0.5rem 0;
+  width: 100%;
+  border-radius: 0.2em;
+  min-height: 1.5em;
+  padding-left: 2em;
+}
+
+div#packages > ul > li.current-entities {
+  margin: 0.3rem 0;
+}
+
+div#packages > ul > li.current:hover {
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  cursor: pointer;
+}
+
+div#packages > ul > li.current-entities > *:nth-child(1),
+div#packages > ul > li.current-entities > *:nth-child(2) {
+  float: left;
+  display: inline;
+  height: 1rem;
+  width: 1rem;
+  margin: 1px 0 0 0;
+  cursor: pointer;
+}
+
+div#packages > ul > li > a.class {
+  background: url("class.svg") no-repeat center;
+  background-size: 0.9rem;
+}
+
+div#packages > ul > li > a.trait {
+  background: url("trait.svg") no-repeat center;
+  background-size: 0.9rem;
+}
+
+div#packages > ul > li > a.object {
+  background: url("object.svg") no-repeat center;
+  background-size: 0.9rem;
+}
+
+div#packages > ul > li > a.abstract.type {
+  background: url("abstract_type.svg") no-repeat center;
+  background-size: 0.9rem;
+}
+
+div#packages > ul > li > a {
+  text-decoration: none !important;
+  margin-left: 1px;
+  font-family: "Source Code Pro", "Monaco", "Ubuntu Mono Regular", "Lucida Console", monospace;
+  font-size: 0.9em;
+}
+
+/* Indentation levels for packages */
+div#packages > ul > li.indented0  { padding-left: 0em; }
+div#packages > ul > li.indented1  { padding-left: 1em; }
+div#packages > ul > li.indented2  { padding-left: 2em; }
+div#packages > ul > li.indented3  { padding-left: 3em; }
+div#packages > ul > li.indented4  { padding-left: 4em; }
+div#packages > ul > li.indented5  { padding-left: 5em; }
+div#packages > ul > li.indented6  { padding-left: 6em; }
+div#packages > ul > li.indented7  { padding-left: 7em; }
+div#packages > ul > li.indented8  { padding-left: 8em; }
+div#packages > ul > li.indented9  { padding-left: 9em; }
+div#packages > ul > li.indented10 { padding-left: 10em; }
+div#packages > ul > li.current.indented0  { padding-left: -0.5em }
+div#packages > ul > li.current.indented1  { padding-left: 0.5em }
+div#packages > ul > li.current.indented2  { padding-left: 1.5em }
+div#packages > ul > li.current.indented3  { padding-left: 2.5em }
+div#packages > ul > li.current.indented4  { padding-left: 3.5em }
+div#packages > ul > li.current.indented5  { padding-left: 4.5em }
+div#packages > ul > li.current.indented6  { padding-left: 5.5em }
+div#packages > ul > li.current.indented7  { padding-left: 6.5em }
+div#packages > ul > li.current.indented8  { padding-left: 7.5em }
+div#packages > ul > li.current.indented9  { padding-left: 8.5em }
+div#packages > ul > li.current.indented10 { padding-left: 9.5em }
+
+div#packages > ul > li.current > span.symbol {
+  border-left: 0.25em solid #72D0EB;
+  padding-left: 0.25em;
+}
+
+div#packages > ul > li > span.symbol > a {
+  text-decoration: none;
+}
+
+div#packages > ul > li > span.symbol > span.name {
+  font-weight: normal;
+}
+
+div#packages > ul > li .fullcomment,
+div#packages > ul > li .modifier_kind,
+div#packages > ul > li .permalink,
+div#packages > ul > li .shortcomment {
+  display: none;
+}
+
+div#search-results {
+  color: #103a51;
+  position: absolute;
+  left: 0;
+  top: 3em;
+  right: 0;
+  bottom: 0;
+  background-color: rgb(240, 243, 246);
+  z-index: 101;
+  overflow-x: hidden;
+  display: none;
+  padding: 1em;
+  -webkit-overflow-scrolling: touch;
+}
+
+div#search > span.close-results {
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  position: fixed;
+  top: 0.8em;
+  left: 1em;
+  color: #fff;
+  display: none;
+  z-index: 1;
+}
+
+div#search > span.close-results:hover {
+  cursor: pointer;
+}
+
+div#results-content {
+  max-width: 1140px;
+  margin: 0 auto;
+}
+
+div#results-content > span.search-text {
+  margin-left: 1em;
+  font-size: 1.2em;
+  float: left;
+  width: 100%;
+}
+
+div#results-content > span.search-text > span.query-str {
+  font-weight: 900;
+}
+
+div#results-content > div > h1.result-type {
+  font-size: 1.5em;
+  margin: 1em 0 0.3em;
+  font-family: "Open Sans";
+  font-weight: 300;
+  border-bottom: 1px solid #103a51;
+}
+
+div#results-content > div#entity-results {
+  float: left;
+  width: 50%;
+  padding: 1em;
+  display: inline;
+}
+
+div#results-content > div#member-results {
+  float: left;
+  width: 50%;
+  padding: 1em;
+  display: inline;
+}
+
+div#results-content > div#member-results > a.package,
+div#results-content > div#entity-results > a.package {
+  font-size: 1em;
+  margin: 0 0 1em 0;
+  color: #f16665;
+  cursor: pointer;
+}
+
+div#results-content > div#member-results > ul.entities,
+div#results-content > div#entity-results > ul.entities {
+  list-style-type: none;
+  padding-left: 0;
+}
+
+div#results-content > div#member-results > ul.entities > li,
+div#results-content > div#entity-results > ul.entities > li {
+  margin: 0.5em 0;
+}
+
+div#results-content > div#member-results > ul.entities > li > .icon,
+div#results-content > div#entity-results > ul.entities > li > .icon {
+  float: left;
+  display: inline;
+  height: 1em;
+  width: 1em;
+  margin: 0.23em 0 0;
+  cursor: pointer;
+}
+
+div#results-content > div#member-results > ul.entities > li > .icon.class,
+div#results-content > div#entity-results > ul.entities > li > .icon.class {
+  background: url("class.svg") no-repeat center;
+  background-size: 1em 1em;
+}
+
+div#results-content > div#member-results > ul.entities > li > .icon.trait,
+div#results-content > div#entity-results > ul.entities > li > .icon.trait {
+  background: url("trait.svg") no-repeat center;
+  background-size: 1em 1em;
+}
+
+div#results-content > div#member-results > ul.entities > li > .icon.object,
+div#results-content > div#entity-results > ul.entities > li > .icon.object {
+  background: url("object.svg") no-repeat center;
+  background-size: 1em 1em;
+}
+
+div#results-content > div#member-results > ul.entities > li > span.entity,
+div#results-content > div#entity-results > ul.entities > li > span.entity {
+  font-size: 1.1em;
+  font-weight: 900;
+}
+
+div#results-content > div#member-results > ul.entities > li > ul.members,
+div#results-content > div#entity-results > ul.entities > li > ul.members {
+  margin-top: 0.5em;
+  list-style-type: none;
+  font-size: 0.85em;
+  margin-left: 0.2em;
+}
+
+div#results-content > div#member-results > ul.entities > li > ul.members > li,
+div#results-content > div#entity-results > ul.entities > li > ul.members > li {
+  margin: 0.5em 0;
+}
+
+div#results-content > div#member-results > ul.entities > li > ul.members > li > span.kind,
+div#results-content > div#member-results > ul.entities > li > ul.members > li > span.tail,
+div#results-content > div#entity-results > ul.entities > li > ul.members > li > span.kind,
+div#results-content > div#entity-results > ul.entities > li > ul.members > li > span.tail {
+  margin-right: 0.6em;
+  font-family: "Source Code Pro", "Monaco", "Ubuntu Mono Regular", "Lucida Console", monospace;
+}
+
+div#results-content > div#member-results > ul.entities > li > ul.members > li > span.kind {
+  font-weight: 600;
+}
+
+div#results-content > div#member-results > ul.entities > li > ul.members > li > a.label,
+div#results-content > div#entity-results > ul.entities > li > ul.members > li > a.label {
+  color: #2C3D9B;
+  font-family: "Source Code Pro", "Monaco", "Ubuntu Mono Regular", "Lucida Console", monospace;
+}
+
+/** Scrollpane settings needed for jquery.scrollpane.min.js */
+.jspContainer {
+  overflow: hidden;
+  position: relative;
+}
+
+.jspPane {
+  position: absolute;
+}
+
+.jspVerticalBar {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 0.6em;
+  height: 100%;
+  background: transparent;
+}
+
+.jspHorizontalBar {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  height: 16px;
+  background: red;
+}
+
+.jspCap {
+  display: none;
+}
+
+.jspHorizontalBar .jspCap {
+  float: left;
+}
+
+.jspTrack {
+  background: #f0f3f6;
+  position: relative;
+}
+
+.jspDrag {
+  display: none;
+  background: rgba(0, 0, 0, 0.35);
+  position: relative;
+  top: 0;
+  left: 0;
+  cursor: pointer;
+}
+
+#tpl:hover .jspDrag {
+  display: block;
+}
+
+.jspHorizontalBar .jspTrack,
+.jspHorizontalBar .jspDrag {
+  float: left;
+  height: 100%;
+}
+
+.jspArrow {
+  background: #50506d;
+  text-indent: -20000px;
+  display: block;
+  cursor: pointer;
+  padding: 0;
+  margin: 0;
+}
+
+.jspArrow.jspDisabled {
+  cursor: default;
+  background: #80808d;
+}
+
+.jspVerticalBar .jspArrow {
+  height: 16px;
+}
+
+.jspHorizontalBar .jspArrow {
+  width: 16px;
+  float: left;
+  height: 100%;
+}
+
+.jspVerticalBar .jspArrow:focus {
+  outline: none;
+}
+
+.jspCorner {
+  background: #eeeef4;
+  float: left;
+  height: 100%;
+}
+
+/* CSS Hack for IE6 3 pixel bug */
+* html .jspCorner {
+  margin: 0 -3px 0 0;
+}
+
+/* Media query rules for smaller viewport */
+@media only screen /* Large screen with a small window */
+and (max-width: 1300px)
+{
+  #textfilter {
+    left: 17.8em;
+    right: 0.35em;
+  }
+
+  #textfilter .input {
+    max-width: none;
+    margin: 0;
+  }
+}
+
+@media only screen /* Large screen with a smaller window */
+and (max-width: 800px)
+{
+  div#results-content > div#entity-results {
+    width: 100%;
+    padding: 0em;
+  }
+
+  div#results-content > div#member-results {
+    width: 100%;
+    padding: 0em;
+  }
+}
+
+/* Media query rules specifically for mobile devices */
+@media
+screen /* HiDPI device like Nexus 5 */
+and (max-device-width: 360px)
+and (max-device-height: 640px)
+and (-webkit-device-pixel-ratio: 3)
+,
+screen /* Most mobile devices  */
+and (max-device-width: 480px)
+and (orientation: portrait)
+,
+only screen /* iPhone 6 */
+and (max-device-width: 667px)
+and (-webkit-device-pixel-ratio: 2)
+{
+  div#content-container > div#subpackage-spacer {
+      display: none;
+  }
+
+  div#content-container > div#content {
+    margin: 3.3em auto 0;
+  }
+
+  #search > span#doc-title {
+    width: 100%;
+    text-align: left;
+    padding-left: 0.7em;
+    top: 0.95em;
+    z-index: 1;
+  }
+
+  #search > div#textfilter {
+    z-index: 2;
+  }
+
+  #search > span#doc-title > span#doc-version {
+    display: none;
+  }
+
+  #textfilter {
+    left: 12.2em;
+  }
+}

Added: websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/index.js
==============================================================================
--- websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/index.js (added)
+++ websites/production/logging/content/log4j/log4j-scala-12.0/api/2.12/lib/index.js Sun May 10 19:18:49 2020
@@ -0,0 +1,616 @@
+// © 2009–2010 EPFL/LAMP
+// code by Gilles Dubochet with contributions by Johannes Rudolph, "spiros", Marcin Kubala and Felix Mulder
+
+var scheduler = undefined;
+
+var title = $(document).attr('title');
+
+var lastFragment = "";
+
+var Index = {};
+(function (ns) {
+    ns.keyLength = 0;
+    ns.keys = function (obj) {
+        var result = [];
+        var key;
+        for (key in obj) {
+            result.push(key);
+            ns.keyLength++;
+        }
+        return result;
+    }
+})(Index);
+
+/** Find query string from URL */
+var QueryString = function(key) {
+    if (QueryString.map === undefined) { // only calc once
+        QueryString.map = {};
+        var keyVals = window.location.search.split("?").pop().split("&");
+        keyVals.forEach(function(elem) {
+            var pair = elem.split("=");
+            if (pair.length == 2) QueryString.map[pair[0]] = pair[1];
+        });
+    }
+
+    return QueryString.map[key];
+};
+
+$(document).ready(function() {
+    // Clicking #doc-title returns the user to the root package
+    $("#doc-title").on("click", function() { document.location = toRoot + "index.html" });
+
+    scheduler = new Scheduler();
+    scheduler.addLabel("init", 1);
+    scheduler.addLabel("focus", 2);
+    scheduler.addLabel("filter", 4);
+    scheduler.addLabel("search", 5);
+
+    configureTextFilter();
+
+    $("#index-input").on("input", function(e) {
+        if($(this).val().length > 0)
+            $("#textfilter > .input > .clear").show();
+        else
+            $("#textfilter > .input > .clear").hide();
+    });
+
+    if (QueryString("search") !== undefined) {
+        $("#index-input").val(QueryString("search"));
+        searchAll();
+    }
+});
+
+/* Handles all key presses while scrolling around with keyboard shortcuts in search results */
+function handleKeyNavigation() {
+    /** Iterates both back and forth among selected elements */
+    var EntityIterator = function (litems, ritems) {
+        var it = this;
+        this.index = -1;
+
+        this.items = litems;
+        this.litems = litems;
+        this.ritems = ritems;
+
+        if (litems.length == 0)
+            this.items = ritems;
+
+        /** Returns the next entry - if trying to select past last element, it
+         * returns the last element
+         */
+        it.next = function() {
+            it.index = Math.min(it.items.length - 1, it.index + 1);
+            return $(it.items[it.index]);
+        };
+
+        /** Returns the previous entry - will return `undefined` instead if
+         * selecting up from first element
+         */
+        it.prev = function() {
+            it.index = Math.max(-1, it.index - 1);
+            return it.index == -1 ? undefined : $(it.items[it.index]);
+        };
+
+        it.right = function() {
+            if (it.ritems.length != 0) {
+                it.items = it.ritems;
+                it.index = Math.min(it.index, it.items.length - 1);
+            }
+            return $(it.items[it.index]);
+        };
+
+        it.left = function() {
+            if (it.litems.length != 0) {
+                it.items = it.litems;
+                it.index = Math.min(it.index, it.items.length - 1);
+            }
+            return $(it.items[it.index]);
+        };
+    };
+
+    function safeOffset($elem) {
+        return $elem.length ? $elem.offset() : { top:0, left:0 }; // offset relative to viewport
+    }
+
+    /** Scroll helper, ensures that the selected elem is inside the viewport */
+    var Scroller = function ($container) {
+        scroller = this;
+        scroller.container = $container;
+
+        scroller.scrollDown = function($elem) {
+            var offset = safeOffset($elem);
+            if (offset !== undefined) {
+                var yPos = offset.top;
+                if ($container.height() < yPos || (yPos - $("#search").height()) < 0) {
+                    $container.animate({
+                        scrollTop: $container.scrollTop() + yPos - $("#search").height() - 10
+                    }, 200);
+                }
+            }
+        };
+
+        scroller.scrollUp = function ($elem) {
+            var offset = safeOffset($elem);
+            if (offset !== undefined) {
+                var yPos = offset.top;
+                if (yPos < $("#search").height()) {
+                    $container.animate({
+                        scrollTop: $container.scrollTop() + yPos - $("#search").height() - 10
+                    }, 200);
+                }
+            }
+        };
+
+        scroller.scrollTop = function() {
+            $container.animate({
+                scrollTop: 0
+            }, 200);
+        }
+    };
+
+    scheduler.add("init", function() {
+        $("#textfilter input").trigger("blur");
+        var items = new EntityIterator(
+            $("div#results-content > div#entity-results > ul.entities span.entity > a").toArray(),
+            $("div#results-content > div#member-results > ul.entities span.entity > a").toArray()
+        );
+
+        var scroller = new Scroller($("#search-results"));
+
+        var $old = items.next();
+        $old.addClass("selected");
+        scroller.scrollDown($old);
+
+        $(window).on("keydown", function(e) {
+            switch ( e.keyCode ) {
+            case 9: // tab
+                $old.removeClass("selected");
+                break;
+
+            case 13: // enter
+                var href = $old.attr("href");
+                location.replace(href);
+                $old.trigger("click");
+                $("#textfilter input").val("");
+                break;
+
+            case 27: // escape
+                $("#textfilter input").val("");
+                $("div#search-results").hide();
+                $("#search > span.close-results").hide();
+                $("#search > span#doc-title").show();
+                break;
+
+            case 37: // left
+                var oldTop = safeOffset($old).top;
+                $old.removeClass("selected");
+                $old = items.left();
+                $old.addClass("selected");
+
+                (oldTop - safeOffset($old).top < 0 ? scroller.scrollDown : scroller.scrollUp)($old);
+                break;
+
+            case 38: // up
+                $old.removeClass('selected');
+                $old = items.prev();
+
+                if ($old === undefined) { // scroll past top
+                    $(window).off("keydown");
+                    $("#textfilter input").trigger("focus");
+                    scroller.scrollTop();
+                    return false;
+                } else {
+                    $old.addClass("selected");
+                    scroller.scrollUp($old);
+                }
+                break;
+
+            case 39: // right
+                var oldTop = safeOffset($old).top;
+                $old.removeClass("selected");
+                $old = items.right();
+                $old.addClass("selected");
+
+                (oldTop - safeOffset($old).top < 0 ? scroller.scrollDown : scroller.scrollUp)($old);
+                break;
+
+            case 40: // down
+                $old.removeClass("selected");
+                $old = items.next();
+                $old.addClass("selected");
+                scroller.scrollDown($old);
+                break;
+            }
+        });
+    });
+}
+
+/* Configures the text filter  */
+function configureTextFilter() {
+    scheduler.add("init", function() {
+        var input = $("#textfilter input");
+        input.on('keyup', function(event) {
+            switch ( event.keyCode ) {
+                case 27: // escape
+                    input.val("");
+                    $("div#search-results").hide();
+                    $("#search > span.close-results").hide();
+                    $("#search > span#doc-title").show();
+                    break;
+
+                case 38: // up arrow
+                    return false;
+
+                case 40: // down arrow
+                    $(window).off("keydown");
+                    handleKeyNavigation();
+                    return false;
+            }
+
+            searchAll();
+        });
+    });
+    scheduler.add("init", function() {
+        $("#textfilter > .input > .clear").on("click", function() {
+            $("#textfilter input").val("");
+            $("div#search-results").hide();
+            $("#search > span.close-results").hide();
+            $("#search > span#doc-title").show();
+
+            $(this).hide();
+        });
+    });
+
+    scheduler.add("init", function() {
+        $("div#search > span.close-results").on("click", function() {
+            $("div#search-results").hide();
+            $("#search > span.close-results").hide();
+            $("#search > span#doc-title").show();
+            $("#textfilter input").val("");
+        });
+    });
+}
+
+function compilePattern(query) {
+    var escaped = query.replace(/([\.\*\+\?\|\(\)\[\]\\])/g, '\\$1');
+
+    if (query.toLowerCase() != query) {
+        // Regexp that matches CamelCase subbits: "BiSe" is
+        // "[a-z]*Bi[a-z]*Se" and matches "BitSet", "ABitSet", ...
+        return new RegExp(escaped.replace(/([A-Z])/g,"[a-z]*$1"));
+    }
+    else { // if query is all lower case make a normal case insensitive search
+        return new RegExp(escaped, "i");
+    }
+}
+
+/** Searches packages for entites matching the search query using a regex
+ *
+ * @param {[Object]} pack: package being searched
+ * @param {RegExp} regExp: a regular expression for finding matching entities
+ */
+function searchPackage(pack, regExp) {
+    scheduler.add("search", function() {
+        var entities = Index.PACKAGES[pack];
+        var matched = [];
+        var notMatching = [];
+
+        scheduler.add("search", function() {
+            searchMembers(entities, regExp, pack);
+        });
+
+        entities.forEach(function (elem) {
+            regExp.test(elem.name) ? matched.push(elem) : notMatching.push(elem);
+        });
+
+        var results = {
+            "matched": matched,
+            "package": pack
+        };
+
+        scheduler.add("search", function() {
+            handleSearchedPackage(results, regExp);
+            setProgress();
+        });
+    });
+}
+
+function searchMembers(entities, regExp, pack) {
+    var memDiv = document.getElementById("member-results");
+    var packLink = document.createElement("a");
+    packLink.className = "package";
+    packLink.appendChild(document.createTextNode(pack));
+    packLink.style.display = "none";
+    packLink.title = pack;
+    packLink.href = toRoot + urlFriendlyEntity(pack).replace(new RegExp("\\.", "g"), "/") + "/index.html";
+    memDiv.appendChild(packLink);
+
+    var entityUl = document.createElement("ul");
+    entityUl.className = "entities";
+    memDiv.appendChild(entityUl);
+
+    entities.forEach(function(entity) {
+        var entityLi = document.createElement("li");
+        var name = entity.name.split('.').pop()
+
+        var iconElem = document.createElement("a");
+        iconElem.className = "icon " + entity.kind;
+        iconElem.title = name + " " + entity.kind;
+        iconElem.href = toRoot + entity[entity.kind];
+        entityLi.appendChild(iconElem);
+
+        if (entity.kind != "object" && entity.object) {
+            var companion = document.createElement("a");
+            companion.className = "icon object";
+            companion.title = name + " companion object";
+            companion.href = toRoot + entity.object;
+            entityLi.insertBefore(companion, iconElem);
+        } else {
+            var spacer = document.createElement("div");
+            spacer.className = "icon spacer";
+            entityLi.insertBefore(spacer, iconElem);
+        }
+
+        var nameElem = document.createElement("span");
+        nameElem.className = "entity";
+
+        var entityUrl = document.createElement("a");
+        entityUrl.title = entity.shortDescription ? entity.shortDescription : name;
+        entityUrl.href = toRoot + entity[entity.kind];
+        entityUrl.appendChild(document.createTextNode(name));
+
+        nameElem.appendChild(entityUrl);
+        entityLi.appendChild(nameElem);
+
+        var membersUl = document.createElement("ul");
+        membersUl.className = "members";
+        entityLi.appendChild(membersUl);
+
+
+        searchEntity(entity, membersUl, regExp)
+            .then(function(res) {
+                if (res.length > 0) {
+                    packLink.style.display = "block";
+                    entityUl.appendChild(entityLi);
+                }
+            });
+    });
+}
+
+/** This function inserts `li` into the `ul` ordered by the li's id
+ *
+ * @param {Node} ul: the list in which to insert `li`
+ * @param {Node} li: item to insert
+ */
+function insertSorted(ul, li) {
+    var lis = ul.childNodes;
+    var beforeLi = null;
+
+    for (var i = 0; i < lis.length; i++) {
+        if (lis[i].id > li.id)
+            beforeLi = lis[i];
+    }
+
+    // if beforeLi == null, it will be inserted last
+    ul.insertBefore(li, beforeLi);
+}
+
+/** Defines the callback when a package has been searched and searches its
+ * members
+ *
+ * It will search all entities which matched the regExp.
+ *
+ * @param {Object} res: this is the searched package. It will contain the map
+ * from the `searchPackage`function.
+ * @param {RegExp} regExp
+ */
+function handleSearchedPackage(res, regExp) {
+    $("div#search-results").show();
+    $("#search > span.close-results").show();
+    $("#search > span#doc-title").hide();
+
+    var searchRes = document.getElementById("results-content");
+    var entityDiv = document.getElementById("entity-results");
+
+    var packLink = document.createElement("a");
+    packLink.className = "package";
+    packLink.title = res.package;
+    packLink.href = toRoot + urlFriendlyEntity(res.package).replace(new RegExp("\\.", "g"), "/") + "/index.html";
+    packLink.appendChild(document.createTextNode(res.package));
+
+    if (res.matched.length == 0)
+        packLink.style.display = "none";
+
+    entityDiv.appendChild(packLink);
+
+    var ul = document.createElement("ul")
+    ul.className = "entities";
+
+    // Generate html list items from results
+    res.matched
+       .map(function(entity) { return listItem(entity, regExp); })
+       .forEach(function(li) { ul.appendChild(li); });
+
+    entityDiv.appendChild(ul);
+}
+
+/** Searches an entity asynchronously for regExp matches in an entity's members
+ *
+ * @param {Object} entity: the entity to be searched
+ * @param {Node} ul: the list in which to insert the list item created
+ * @param {RegExp} regExp
+ */
+function searchEntity(entity, ul, regExp) {
+    return new Promise(function(resolve, reject) {
+        var allMembers =
+            (entity.members_trait  || [])
+            .concat(entity.members_class || [])
+            .concat(entity.members_object || [])
+
+        var matchingMembers = $.grep(allMembers, function(member, i) {
+            return regExp.test(member.label);
+        });
+
+        resolve(matchingMembers);
+    })
+    .then(function(res) {
+        res.forEach(function(elem) {
+            var kind = document.createElement("span");
+            kind.className = "kind";
+            kind.appendChild(document.createTextNode(elem.kind));
+
+            var label = document.createElement("a");
+            label.title = elem.label;
+            label.href = toRoot + elem.link;
+            label.className = "label";
+            label.appendChild(document.createTextNode(elem.label));
+
+            var tail = document.createElement("span");
+            tail.className = "tail";
+            tail.appendChild(document.createTextNode(elem.tail));
+
+            var li = document.createElement("li");
+            li.appendChild(kind);
+            li.appendChild(label);
+            li.appendChild(tail);
+
+            ul.appendChild(li);
+        });
+        return res;
+    });
+}
+
+/** Creates a list item representing an entity
+ *
+ * @param {Object} entity, the searched entity to be displayed
+ * @param {RegExp} regExp
+ * @return {Node} list item containing entity
+ */
+function listItem(entity, regExp) {
+    var name = entity.name.split('.').pop()
+    var nameElem = document.createElement("span");
+    nameElem.className = "entity";
+
+    var entityUrl = document.createElement("a");
+    entityUrl.title = entity.shortDescription ? entity.shortDescription : name;
+    entityUrl.href = toRoot + entity[entity.kind];
+
+    entityUrl.appendChild(document.createTextNode(name));
+    nameElem.appendChild(entityUrl);
+
+    var iconElem = document.createElement("a");
+    iconElem.className = "icon " + entity.kind;
+    iconElem.title = name + " " + entity.kind;
+    iconElem.href = toRoot + entity[entity.kind];
+
+    var li = document.createElement("li");
+    li.id = entity.name.replace(new RegExp("\\.", "g"),"-");
+    li.appendChild(iconElem);
+    li.appendChild(nameElem);
+
+    if (entity.kind != "object" && entity.object) {
+        var companion = document.createElement("a");
+        companion.title = name + " companion object";
+        companion.href = toRoot + entity.object;
+        companion.className = "icon object";
+        li.insertBefore(companion, iconElem);
+    } else {
+        var spacer = document.createElement("div");
+        spacer.className = "icon spacer";
+        li.insertBefore(spacer, iconElem);
+    }
+
+    var ul = document.createElement("ul");
+    ul.className = "members";
+
+    li.appendChild(ul);
+
+    return li;
+}
+
+/** Searches all packages and entities for the current search string in
+ *  the input field "#textfilter"
+ *
+ * Then shows the results in div#search-results
+ */
+function searchAll() {
+    scheduler.clear("search"); // clear previous search
+    maxJobs = 1; // clear previous max
+    var searchStr = ($("#textfilter input").val() || '').trim();
+
+    if (searchStr === '') {
+        $("div#search-results").hide();
+        $("#search > span.close-results").hide();
+        $("#search > span#doc-title").show();
+        return;
+    }
+
+    // Replace ?search=X with current search string if not hosted locally on Chrome
+    try {
+        window.history.replaceState({}, "", "?search=" + searchStr);
+    } catch(e) {}
+
+    $("div#results-content > span.search-text").remove();
+
+    var memberResults = document.getElementById("member-results");
+    memberResults.innerHTML = "";
+    var memberH1 = document.createElement("h1");
+    memberH1.className = "result-type";
+    memberH1.innerHTML = "Member results";
+    memberResults.appendChild(memberH1);
+
+    var entityResults = document.getElementById("entity-results");
+    entityResults.innerHTML = "";
+    var entityH1 = document.createElement("h1");
+    entityH1.className = "result-type";
+    entityH1.innerHTML = "Entity results";
+    entityResults.appendChild(entityH1);
+
+    $("div#results-content").prepend(
+        $("<span>")
+            .addClass("search-text")
+            .append(document.createTextNode("  Showing results for "))
+            .append($("<span>").addClass("query-str").text(searchStr))
+    );
+
+    var regExp = compilePattern(searchStr);
+
+    // Search for all entities matching query
+    Index
+        .keys(Index.PACKAGES)
+        .sort()
+        .forEach(function(elem) { searchPackage(elem, regExp); })
+}
+
+/** Check if user agent is associated with a known mobile browser */
+function isMobile() {
+    return /Android|webOS|Mobi|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
+}
+
+function urlFriendlyEntity(entity) {
+    var corr = {
+        '\\+': '$plus',
+        ':': '$colon'
+    };
+
+    for (k in corr)
+        entity = entity.replace(new RegExp(k, 'g'), corr[k]);
+
+    return entity;
+}
+
+var maxJobs = 1;
+function setProgress() {
+    var running = scheduler.numberOfJobs("search");
+    maxJobs = Math.max(maxJobs, running);
+
+    var percent = 100 - (running / maxJobs * 100);
+    var bar = document.getElementById("progress-fill");
+    bar.style.height = "100%";
+    bar.style.width = percent + "%";
+
+    if (percent == 100) {
+        setTimeout(function() {
+            bar.style.height = 0;
+        }, 500);
+    }
+}