Skip to content

Commit

Permalink
Sync missing js file from eng/common
Browse files Browse the repository at this point in the history
  • Loading branch information
weshaggard committed Jan 17, 2025
1 parent c18f249 commit 5a4b59a
Showing 1 changed file with 238 additions and 0 deletions.
238 changes: 238 additions & 0 deletions eng/common/docgeneration/templates/matthews/styles/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
// Use container fluid
var containers = $(".container");
containers.removeClass("container");
containers.addClass("container-fluid");

WINDOW_CONTENTS = window.location.href.split('/')
var SELECTED_LANGUAGE = ''
var PACKAGE_REGEX = ''
var PACKAGE_REPLACEMENT = ''

ATTR1 = '[<span class="hljs-meta">System.ComponentModel.EditorBrowsable</span>]\n<'

// Navbar Hamburger
$(function () {
$(".navbar-toggle").click(function () {
$(this).toggleClass("change");
})
})

// Select list to replace affix on small screens
$(function () {
var navItems = $(".sideaffix .level1 > li");

if (navItems.length == 0) {
return;
}

var selector = $("<select/>");
selector.addClass("form-control visible-sm visible-xs");
var form = $("<form/>");
form.append(selector);
form.prependTo("article");

selector.change(function () {
window.location = $(this).find("option:selected").val();
})

function work(item, level) {
var link = item.children('a');

var text = link.text();

for (var i = 0; i < level; ++i) {
text = '&nbsp;&nbsp;' + text;
}

selector.append($('<option/>', {
'value': link.attr('href'),
'html': text
}));

var nested = item.children('ul');

if (nested.length > 0) {
nested.children('li').each(function () {
work($(this), level + 1);
});
}
}

navItems.each(function () {
work($(this), 0);
});
})


$(function () {
// Inject line breaks and spaces into the code sections
$(".lang-csharp").each(function () {
var text = $(this).html();
text = text.replace(/, /g, ",</br>&#09;&#09");
text = text.replace(ATTR1, '<');
$(this).html(text);
});

// Add text to empty links
$("p > a").each(function () {
var link = $(this).attr('href')
if ($(this).text() === "" && $(this).children().attr("src") === "") {
$(this).html(link)
}
});
})

function httpGetAsync(targetUrl, callback) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
callback(xmlHttp.responseText);
}
xmlHttp.open("GET", targetUrl, true); // true for asynchronous
xmlHttp.send(null);
}

function httpGetAsyncFallbackOnFail(targetUrl, successCallback, failureCallback) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
successCallback(xmlHttp.responseText);
} else {
failureCallback(xmlHttp.status)
}
}
}
xmlHttp.open("GET", targetUrl, true); // true for asynchronous
xmlHttp.send(null);
}

function populateOptions(selector, packageName) {
var versionRequestUrl = "https://azuresdkdocs.blob.core.windows.net/$web/" + SELECTED_LANGUAGE + "/" + packageName + "/versioning/versions"

httpGetAsync(versionRequestUrl, function (responseText) {
var versionselector = document.createElement("select")
var cv = WINDOW_CONTENTS[6]

versionselector.className = 'navbar-version-select'
if (responseText) {
options = responseText.match(/[^\r\n]+/g)
for (var i in options) {
$(versionselector).append('<option value="' + options[i] + '">' + options[i] + '</option>')
}
}

if(cv === 'latest')
{
$(versionselector).selectedIndex = 0
}
else {
$(versionselector).val(cv);
}

$(selector).append(versionselector)

$(versionselector).change(function () {
targetVersion = $(this).val()
url = WINDOW_CONTENTS.slice()
url[6] = targetVersion
var targetUrl = url.join('/')
httpGetAsyncFallbackOnFail(targetUrl, (unused) => window.location.href = url.join('/'),
(failureStatus) => window.location.href = getPackageUrl(SELECTED_LANGUAGE, packageName, targetVersion))
});

})
}

function httpGetLatestAsync(targetUrl, latestVersions, packageName) {
httpGetAsync(targetUrl, function (responseText) {
if (responseText) {
version = responseText.match(/[^\r\n]+/g)
$(latestVersions).append('<li><a href="' + getPackageUrl(SELECTED_LANGUAGE, packageName, version) + '" target="_blank">' + version + '</a></li>')
}
})
}

function loadedOtherVersions(url, latestVersions, publishedVersions, selector, collapsible, packageName) {
var hasAdded = function (currentVersion) {
return $(publishedVersions).children('li').filter(function() {
return $(this).text() === currentVersion
}).length || $(latestVersions).children('li').filter(function() {
return $(this).text() === currentVersion
}).length
}
httpGetAsync(url, function (responseText) {
if (responseText) {
options = responseText.match(/[^\r\n]+/g)
for (var i in options) {
if (!hasAdded(options[i])) {
$(publishedVersions).append('<li><a href="' + getPackageUrl(SELECTED_LANGUAGE, packageName, options[i]) + '" target="_blank">' + options[i] + '</a></li>')
}
}
}
else {
$(publishedVersions).append('<li>No discovered versions present in blob storage.</li>')
}
$(selector).addClass("loaded")
if ($(publishedVersions).children('li').length < 1) {
$(collapsible).remove()
}
})
}

function populateIndexList(selector, packageName) {
var url = "https://azuresdkdocs.blob.core.windows.net/$web/" + SELECTED_LANGUAGE + "/" + packageName + "/versioning/versions"
var latestGAUrl = "https://azuresdkdocs.blob.core.windows.net/$web/" + SELECTED_LANGUAGE + "/" + packageName + "/versioning/latest-ga"
var latestPreviewUrl = "https://azuresdkdocs.blob.core.windows.net/$web/" + SELECTED_LANGUAGE + "/" + packageName + "/versioning/latest-preview"
var latestVersions = document.createElement("ul")
httpGetLatestAsync(latestGAUrl, latestVersions, packageName)
httpGetLatestAsync(latestPreviewUrl, latestVersions, packageName)
var publishedVersions = $('<ul style="display: none;"></ul>')
var collapsible = $('<div class="versionarrow">&nbsp;&nbsp;&nbsp;Other versions</div>')
// Check whether it has display name tag.
if ($(selector).next().is('h5')) {
$(selector).next().after(latestVersions)
} else {
$(selector).after(latestVersions)
}
$(latestVersions).after(collapsible)
$(collapsible).after(publishedVersions)

// Add collapsible arrows on versioned docs.
$(collapsible).on('click', function(event) {
event.preventDefault();
if (collapsible.hasClass('disable')) {
return
}
$(this).toggleClass('down')
if ($(this).hasClass('down')) {
if (!$(selector).hasClass('loaded')){
loadedOtherVersions(url, latestVersions, publishedVersions, selector, collapsible, packageName)
}
$(publishedVersions).show()
} else {
$(publishedVersions).hide()
}
});
}

function getPackageUrl(language, package, version) {
return "https://azuresdkdocs.blob.core.windows.net/$web/" + language + "/" + package + "/" + version + "/index.html"
}

// Populate Versions
$(function () {
if (WINDOW_CONTENTS.length < 7 && WINDOW_CONTENTS[WINDOW_CONTENTS.length - 1] != 'index.html') {
console.log("Run PopulateList")

$('h4').each(function () {
var pkgName = $(this).text().replace(PACKAGE_REGEX, PACKAGE_REPLACEMENT)
populateIndexList($(this), pkgName)
})
}

if (WINDOW_CONTENTS.length > 7) {
var pkgName = WINDOW_CONTENTS[5]
populateOptions($('#navbar'), pkgName)
}
})

0 comments on commit 5a4b59a

Please sign in to comment.