Added: datafu/site/docs/spark/2.1.0/lib/class.svg URL: http://svn.apache.org/viewvc/datafu/site/docs/spark/2.1.0/lib/class.svg?rev=1925323&view=auto ============================================================================== --- datafu/site/docs/spark/2.1.0/lib/class.svg (added) +++ datafu/site/docs/spark/2.1.0/lib/class.svg Tue Apr 29 18:54:44 2025 @@ -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: datafu/site/docs/spark/2.1.0/lib/class_comp.svg URL: http://svn.apache.org/viewvc/datafu/site/docs/spark/2.1.0/lib/class_comp.svg?rev=1925323&view=auto ============================================================================== --- datafu/site/docs/spark/2.1.0/lib/class_comp.svg (added) +++ datafu/site/docs/spark/2.1.0/lib/class_comp.svg Tue Apr 29 18:54:44 2025 @@ -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: datafu/site/docs/spark/2.1.0/lib/class_diagram.png URL: http://svn.apache.org/viewvc/datafu/site/docs/spark/2.1.0/lib/class_diagram.png?rev=1925323&view=auto ============================================================================== Binary file - no diff available. Propchange: datafu/site/docs/spark/2.1.0/lib/class_diagram.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: datafu/site/docs/spark/2.1.0/lib/diagrams.css URL: http://svn.apache.org/viewvc/datafu/site/docs/spark/2.1.0/lib/diagrams.css?rev=1925323&view=auto ============================================================================== --- datafu/site/docs/spark/2.1.0/lib/diagrams.css (added) +++ datafu/site/docs/spark/2.1.0/lib/diagrams.css Tue Apr 29 18:54:44 2025 @@ -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: datafu/site/docs/spark/2.1.0/lib/diagrams.js URL: http://svn.apache.org/viewvc/datafu/site/docs/spark/2.1.0/lib/diagrams.js?rev=1925323&view=auto ============================================================================== --- datafu/site/docs/spark/2.1.0/lib/diagrams.js (added) +++ datafu/site/docs/spark/2.1.0/lib/diagrams.js Tue Apr 29 18:54:44 2025 @@ -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: datafu/site/docs/spark/2.1.0/lib/index.css URL: http://svn.apache.org/viewvc/datafu/site/docs/spark/2.1.0/lib/index.css?rev=1925323&view=auto ============================================================================== --- datafu/site/docs/spark/2.1.0/lib/index.css (added) +++ datafu/site/docs/spark/2.1.0/lib/index.css Tue Apr 29 18:54:44 2025 @@ -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: datafu/site/docs/spark/2.1.0/lib/index.js URL: http://svn.apache.org/viewvc/datafu/site/docs/spark/2.1.0/lib/index.js?rev=1925323&view=auto ============================================================================== --- datafu/site/docs/spark/2.1.0/lib/index.js (added) +++ datafu/site/docs/spark/2.1.0/lib/index.js Tue Apr 29 18:54:44 2025 @@ -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); + } +}