//= require_directory ./libraries/
//= require_directory ./plugins/
//= require treeview.js
//= require_self
$(document).ready(function() {
// Configuration for fancy sortable tables for source file groups
$('.file_list').dataTable({
"aaSorting": [[ 0, "asc" ]],
"bPaginate": false,
"bJQueryUI": true,
"aoColumns": [
null,
null,
null
]
});
// Syntax highlight all files up front - deactivated
// $('.source_table pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')});
// Syntax highlight source files on first toggle of the file view popup
$("a.src_link").click(function() {
// Get the source file element that corresponds to the clicked element
var source_table = $($(this).attr('href'));
// If not highlighted yet, do it!
if (!source_table.hasClass('highlighted')) {
source_table.find('pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')});
source_table.addClass('highlighted');
};
});
var prev_anchor;
var curr_anchor;
// Set-up of popup for source file views
$("a.src_link").colorbox({
transition: "none",
inline: true,
opacity: 1,
width: "95%",
height: "95%",
onLoad: function() {
prev_anchor = curr_anchor ? curr_anchor : jQuery.url.attr('anchor');
curr_anchor = this.href.split('#')[1];
window.location.hash = curr_anchor;
},
onCleanup: function() {
if (prev_anchor && prev_anchor != curr_anchor) {
$('a[href="#'+prev_anchor+'"]').click();
curr_anchor = prev_anchor;
} else {
$('.group_tabs a:first').click();
prev_anchor = curr_anchor;
curr_anchor = "#_AllFiles";
}
window.location.hash = curr_anchor;
}
});
window.onpopstate = function(event){
if (location.hash.substring(0,2) == "#_") {
$.colorbox.close();
curr_anchor = jQuery.url.attr('anchor');
} else {
if ($('#colorbox').is(':hidden')) {
$('a.src_link[href="'+location.hash+'"]').colorbox({ open: true });
}
}
};
// Hide src files and file list container after load
$('.source_files').hide();
$('.file_list_container').hide();
// Add tabs based upon existing file_list_containers
$('.file_list_container h2').each(function(){
var container_id = $(this).parent().attr('id');
var group_name = $(this).find('.group_name').first().html();
$('.group_tabs').append('
' + group_name.substring(0, 30) + '');
});
$('.group_tabs a').each( function() {
$(this).addClass($(this).attr('href').replace('#', ''));
});
// Make sure tabs don't get ugly focus borders when active
$('.group_tabs a').live('focus', function() { $(this).blur(); });
var favicon_path = $('link[rel="icon"]').attr('href');
$('.group_tabs a').live('click', function(){
if (!$(this).parent().hasClass('active')) {
$('.group_tabs a').parent().removeClass('active');
$(this).parent().addClass('active');
$('.file_list_container').hide();
$(".file_list_container" + $(this).attr('href')).show();
window.location.href = window.location.href.split('#')[0] + $(this).attr('href').replace('#', '#_');
// Force favicon reload - otherwise the location change containing anchor would drop the favicon...
// Works only on firefox, but still... - Anyone know a better solution to force favicon on local file?
$('link[rel="shortcut icon"]').remove();
$('head').append('');
};
return false;
});
if (jQuery.url.attr('anchor')) {
var anchor = jQuery.url.attr('anchor')
if (anchor.length == 40) {
$('a.src_link[href=#' + anchor + ']').click();
} else {
$('.group_tabs a.'+anchor.replace('_', '')).click();
}
} else {
$('.group_tabs a:first').click();
};
$("abbr.timeago").timeago();
$('#loading').fadeOut();
$('#wrapper').show();
$('.dataTables_filter input').focus();
// https://stackoverflow.com/a/34430701
window.getAbsoluteUrl = function (base, relative) {
var hashPosition = base.indexOf('#');
if (hashPosition > 0){
base = base.slice(0, hashPosition);
}
var stack = base.split("/"),
parts = relative.split("/");
stack.pop();
for (var i=0; i 1) ? false : true;
treeData[nodeIndex] = node;
}
return treeData;
};
$('.source_table.highlighted li.covered').live('click', function() {
const exampleRefs = $(this).children('.deprecations_detector')[0].dataset.exampleRefs.split(",");
if(!$(this).children('.deprecations_detector').is(':visible')){
let treeData = [];
const self = this;
exampleRefs.forEach(function(ref) {
const example = window.examples[ref]
const treeNodes = []
example["file_path"].split('/').slice(1).forEach(function(node_path){
treeNodes.push({ name: node_path })
});
treeNodes.push({ example: example, name: example['full_description'] });
treeData = traverseTreeData(treeData, treeNodes)
})
const domElement = self.querySelector('.deprecations_detector');
let tree = new TreeView(treeData, domElement);
tree.on('select', function (node) {
const example = node.data.example;
const url = getAbsoluteUrl('', `${window.base_url}${example.file_path}#L${example.line_number}`);
window.open(url, '_blank');
});
$(this).children('.deprecations_detector').show();
let divMessages = document.createElement('div');
divMessages.className = 'messages';
domElement.prepend(divMessages);
deprecations = exampleRefs.map(function(ref) { return window.examples[ref]['deprecation_message'] });
[...new Set(deprecations)].forEach(function(message){
divMessages.append(message);
divMessages.append(document.createElement('br'));
})
} else {
$(this).children('.deprecations_detector').html('');
$(this).children('.deprecations_detector').hide();
}
});
$('.source_table.highlighted li.covered .deprecations_detector').live('click', function(event) {
event.stopPropagation();
});
});