mirror of
https://github.com/silverstripe/silverstripe-docsviewer
synced 2024-10-22 11:05:56 +02:00
c71a1aaca2
Universal increase in font size Use same font as ss.org for consistency Remove unnecessary visual noise (borders, box shadows, etc) Use Google PrettyPrint syntax highlighter for improved readability of code sections Fully responsive, with hamburger menu Add "section" linking mode to menu items Add masthead for breadcrumbs, introduction Improved styles for notice/info/warning messaging
228 lines
6.2 KiB
JavaScript
Executable File
228 lines
6.2 KiB
JavaScript
Executable File
;(function($) {
|
|
$(document).ready(function() {
|
|
var switched = false;
|
|
|
|
var updateTables = function() {
|
|
if (($(window).width() < 540) && !switched ){
|
|
switched = true;
|
|
|
|
$("table").each(function(i, element) {
|
|
splitTable($(element));
|
|
});
|
|
|
|
return true;
|
|
}
|
|
else if (switched && ($(window).width() > 540)) {
|
|
switched = false;
|
|
|
|
$("table").each(function(i, element) {
|
|
unsplitTable($(element));
|
|
});
|
|
}
|
|
};
|
|
|
|
$(window).load(updateTables);
|
|
$(window).on("redraw",function() {
|
|
switched = false;
|
|
updateTables();
|
|
}); // An event to listen for
|
|
|
|
$(window).on("resize", updateTables);
|
|
|
|
|
|
function splitTable(original) {
|
|
original.wrap("<div class='table-wrapper' />");
|
|
|
|
var copy = original.clone();
|
|
copy.find("td:not(:first-child), th:not(:first-child)").css("display", "none");
|
|
copy.removeClass("responsive");
|
|
|
|
original.closest(".table-wrapper").append(copy);
|
|
copy.wrap("<div class='pinned' />");
|
|
original.wrap("<div class='scrollable' />");
|
|
|
|
setCellHeights(original, copy);
|
|
}
|
|
|
|
function unsplitTable(original) {
|
|
original.closest(".table-wrapper").find(".pinned").remove();
|
|
original.unwrap();
|
|
original.unwrap();
|
|
}
|
|
|
|
function setCellHeights(original, copy) {
|
|
var tr = original.find('tr'),
|
|
tr_copy = copy.find('tr'),
|
|
heights = [];
|
|
|
|
tr.each(function (index) {
|
|
var self = $(this),
|
|
tx = self.find('th, td');
|
|
|
|
tx.each(function () {
|
|
var height = $(this).outerHeight(true);
|
|
heights[index] = heights[index] || 0;
|
|
|
|
if (height > heights[index]) heights[index] = height;
|
|
});
|
|
});
|
|
|
|
tr_copy.each(function (index) {
|
|
$(this).height(heights[index]);
|
|
});
|
|
}
|
|
|
|
/** -----------------------------------------------
|
|
* TABLE OF CONTENTS
|
|
*
|
|
* Transform a #table-of-contents div to a nested list
|
|
*/
|
|
if($("#table-contents-holder").length > 0) {
|
|
var toc = '<div id="table-of-contents" class="open">' +
|
|
'<h4>Table of contents<span class="updown">▼</span></h4><ul style="display: none;">';
|
|
|
|
// Remove existing anchor redirection in the url
|
|
var pageURL = window.location.href.replace(/#[a-zA-Z0-9\-\_]*/g, '');
|
|
|
|
var itemCount = 0;
|
|
$('#content h1[id], #content h2[id], #content h3[id], #content h4[id]').each(function(i) {
|
|
var current = $(this);
|
|
var tagName = current.prop("tagName");
|
|
if(typeof tagName == "String") tagName = tagName.toLowerCase();
|
|
itemCount++;
|
|
toc += '<li class="' + tagName + '"><a id="link' + i + '" href="'+ pageURL +'#' + $(this).attr('id') + '" title="' + current.html() + '">' + current.html() + '</a></li>';
|
|
});
|
|
|
|
// if no items in the table of contents, don't show anything
|
|
if(itemCount == 0) return false;
|
|
|
|
toc += '</ul></div>';
|
|
|
|
$('#table-contents-holder').prepend(toc);
|
|
|
|
// Toggle the TOC
|
|
$('#table-of-contents').attr('href', 'javascript:void()').toggle(
|
|
function() {
|
|
$("#table-of-contents ul").animate({'height':'show'}, 200, function(){$('#table-of-contents h4 span').html('▲');})
|
|
},
|
|
function() {
|
|
$("#table-of-contents ul").animate({'height':'hide'}, 200, function(){$('#table-of-contents h4 span').html('▼');})
|
|
}
|
|
);
|
|
|
|
// Make sure clicking a link won't toggle the TOC
|
|
$("#table-of-contents li a").click(function (e) { e.stopPropagation(); });
|
|
|
|
}
|
|
|
|
/** ---------------------------------------------
|
|
* HEADING ANCHOR LINKS
|
|
*
|
|
* Automatically adds anchor links to headings that have IDs
|
|
*/
|
|
var url = window.location.href;
|
|
|
|
$("#content h1[id], #content h2[id], #content h3[id], #content h4[id], #content h5[id], #content h6[id]").each(function() {
|
|
var link = '<a class="heading-anchor-link" title="Link to this section" href="'+ url + '#' + $(this).attr('id') + '">¶</a>';
|
|
$(this).append(' ' + link);
|
|
});
|
|
|
|
$("h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]").mouseenter(function() {
|
|
$(this).addClass('hover');
|
|
});
|
|
|
|
$("h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]").mouseleave(function() {
|
|
$(this).removeClass('hover');
|
|
});
|
|
|
|
$(".search input").live("keyup", function(e) {
|
|
clearTimeout($.data(this, 'timer'));
|
|
|
|
var string = $(this).val();
|
|
var self = $(this);
|
|
|
|
if (string == '') {
|
|
$(".search .autocomplete-results").hide();
|
|
} else {
|
|
var container;
|
|
|
|
if($(this).siblings('.autocomplete-results').length == 0) {
|
|
container = $("<div class='autocomplete-results'></div");
|
|
|
|
$(this).after(container);
|
|
} else {
|
|
container = $(this).siblings('.autocomplete-results').first();
|
|
}
|
|
|
|
$(this).data('timer', setTimeout(function() {
|
|
if(string !== '') {
|
|
$.getJSON(
|
|
self.parents('form').attr('action'),
|
|
{ query: string },
|
|
function(results) {
|
|
if(results) {
|
|
var list = $("<ul></ul>");
|
|
|
|
$.each(results, function(i, elem) {
|
|
list.append(
|
|
$("<li></li>")
|
|
.append(
|
|
$("<a></a>").attr('href', elem.link).text(elem.title)
|
|
).append(
|
|
elem.path
|
|
)
|
|
);
|
|
});
|
|
|
|
container.append(list);
|
|
} else {
|
|
container.hide().removeClass('loading');
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
return false;
|
|
}, 100));
|
|
};
|
|
});
|
|
|
|
/** ---------------------------------------------
|
|
* LANGAUGE SELECTER
|
|
*
|
|
* Hide the change button and do it onclick
|
|
*/
|
|
$("#Form_LanguageForm .Actions").hide();
|
|
|
|
$("#Form_LanguageForm select").change(function() {
|
|
$("#Form_LanguageForm").submit();
|
|
});
|
|
|
|
/** ---------------------------------------------
|
|
* SYNTAX HIGHLIGHTER
|
|
*
|
|
* As the Markdown parser now uses the GFM structure (```yml) this does
|
|
* not work with SyntaxHighlighter. The below translates the GFM output
|
|
* to one SyntaxHighter can use
|
|
*/
|
|
$("pre").each(function(i, elem) {
|
|
var code = $(elem).find('code[class^=language]');
|
|
|
|
if(code.length > 0) {
|
|
var brush = code.attr('class').replace('language-', '');
|
|
$(elem).attr('class', 'prettyprint lang-' + brush);
|
|
// $(elem).html(code.html());
|
|
}
|
|
});
|
|
|
|
$('.menu-toggle').on('click', function (e) {
|
|
e.preventDefault();
|
|
var left = $('#sidebar').is('.visible') ? -270 : 0;
|
|
$('#sidebar').animate({ left: left}, 'fast', function() {
|
|
$(this).toggleClass('visible');
|
|
});
|
|
})
|
|
|
|
});
|
|
})(jQuery);
|