$( document ).ready(function() { // url var url = window.location.pathname; // Fix back button cache problem window.onunload = function(){}; // Set theme var theme = localStorage.getItem('theme'); if (theme === null) { theme = 'light'; } set_theme(theme); // Syntax highlighting Configuration hljs.configure({ tabReplace: ' ', // 4 spaces languages: [], // Languages used for auto-detection }); $('code').each(function(i, block) { hljs.highlightBlock(block); }); // Adding the hljs class gives code blocks the color css // even if highlighting doesn't apply $('code').addClass('hljs'); var KEY_CODES = { PREVIOUS_KEY: 37, NEXT_KEY: 39 }; $(document).on('keydown', function (e) { switch (e.keyCode) { case KEY_CODES.NEXT_KEY: e.preventDefault(); if($('.nav-chapters.next').length) { window.location.href = $('.nav-chapters.next').attr('href'); } break; case KEY_CODES.PREVIOUS_KEY: e.preventDefault(); if($('.nav-chapters.previous').length) { window.location.href = $('.nav-chapters.previous').attr('href'); } break; } }); // Interesting DOM Elements var html = $("html"); var sidebar = $("#sidebar"); var page_wrapper = $("#page-wrapper"); var content = $("#content"); // Add anchors for all content headers content.find("h1, h2, h3, h4, h5").wrap(function(){ var wrapper = $(""); var header_name = $(this).text().trim().replace(/\W/g, '-') wrapper.attr("name", header_name); // Add so that when you click the link actually shows up in the url bar... // Remove any existing anchor then append the new one // ensuring eg. no spaces are present within it ie. they become %20 wrapper.attr("href", $(location).attr('href').split("#")[0] + "#" + header_name ); return wrapper; }); // Toggle sidebar $("#sidebar-toggle").click(function(event){ if ( html.hasClass("sidebar-hidden") ) { html.removeClass("sidebar-hidden").addClass("sidebar-visible"); localStorage.setItem('sidebar', 'visible'); } else if ( html.hasClass("sidebar-visible") ) { html.removeClass("sidebar-visible").addClass("sidebar-hidden"); localStorage.setItem('sidebar', 'hidden'); } else { if(sidebar.position().left === 0){ html.addClass("sidebar-hidden"); localStorage.setItem('sidebar', 'hidden'); } else { html.addClass("sidebar-visible"); localStorage.setItem('sidebar', 'visible'); } } }); // Scroll sidebar to current active section var activeSection = sidebar.find(".active"); if(activeSection.length) { sidebar.scrollTop(activeSection.offset().top); } // Print button $("#print-button").click(function(){ var printWindow = window.open("print.html"); }); if( url.substring(url.lastIndexOf('/')+1) == "print.html" ) { window.print(); } // Theme button $("#theme-toggle").click(function(){ if($('.theme-popup').length) { $('.theme-popup').remove(); } else { var popup = $('
') .append($('
Light (default)
')) .append($('
Rust
')) .append($('
Coal
')) .append($('')); popup.insertAfter(this); $('.theme').click(function(){ var theme = $(this).attr('id'); set_theme(theme); }); } }); function set_theme(theme) { if (theme == 'coal' || theme == 'navy') { $("[href='css/tomorrow-night.css']").prop('disabled', false); $("[href='css/highlight.css']").prop('disabled', true); } else { $("[href='css/tomorrow-night.css']").prop('disabled', true); $("[href='css/highlight.css']").prop('disabled', false); } localStorage.setItem('theme', theme); $('body').removeClass().addClass(theme); } // Hide Rust code lines prepended with a specific character var hiding_character = "#"; $("code.language-rust").each(function(i, block){ var code_block = $(this); var pre_block = $(this).parent(); // hide lines var lines = code_block.html().split("\n"); var first_non_hidden_line = false; var lines_hidden = false; for(var n = 0; n < lines.length; n++){ if($.trim(lines[n])[0] == hiding_character){ if(first_non_hidden_line){ lines[n] = "" + "\n" + lines[n].replace(/(\s*)#/, "$1") + ""; } else { lines[n] = "" + lines[n].replace(/(\s*)#/, "$1") + "\n" + ""; } lines_hidden = true; } else if(first_non_hidden_line) { lines[n] = "\n" + lines[n]; } else { first_non_hidden_line = true; } } code_block.html(lines.join("")); // If no lines were hidden, return if(!lines_hidden) { return; } // add expand button pre_block.prepend("
"); pre_block.find("i").click(function(e){ if( $(this).hasClass("fa-expand") ) { $(this).removeClass("fa-expand").addClass("fa-compress"); pre_block.find("span.hidden").removeClass("hidden").addClass("unhidden"); } else { $(this).removeClass("fa-compress").addClass("fa-expand"); pre_block.find("span.unhidden").removeClass("unhidden").addClass("hidden"); } }); }); // Process playpen code blocks $(".playpen").each(function(block){ var pre_block = $(this); // Add play button var buttons = pre_block.find(".buttons"); if( buttons.length === 0 ) { pre_block.prepend("
"); buttons = pre_block.find(".buttons"); } buttons.prepend(""); buttons.find(".play-button").click(function(e){ run_rust_code(pre_block); }); }); }); function run_rust_code(code_block) { var result_block = code_block.find(".result"); if(result_block.length === 0) { code_block.append(""); result_block = code_block.find(".result"); } result_block.text("Running..."); $.ajax({ url: "https://play.rust-lang.org/evaluate.json", method: "POST", crossDomain: true, dataType: "json", contentType: "application/json", data: JSON.stringify({version: "stable", optimize: "0", code: code_block.find(".language-rust").text() }), success: function(response){ result_block.text(response.result); } }); }