dash-docs/js/bitcoin-core.js
David A. Harding 706c791e92
New Bitcoin Core subsite
This commit contains a large number of contributions from Saïvann
Carignan.
2015-09-14 06:02:58 -04:00

252 lines
6.7 KiB
JavaScript

---
# This file is licensed under the MIT License (MIT) available on
# http://opensource.org/licenses/MIT.
# This file depends on JQuery and JQuery UI, so it should be separate
# from the base and main JS files which don't depend on those libraries
---
"use strict";
{% comment %}
// Display modal pop-up on button clicks
// When using this, make sure each .popup element has a parameter
{% endcomment %}
$(".popup").each(function() {
var this_id = "#" + $(this).attr('data-container');
$(this).on('click', function(clicked) {
$( this_id ).dialog({
modal: true,
show: true,
hide: true,
draggable: false,
resizeable: false,
width: Math.min($(window).width() * 0.9, 620),
open: function() {
$('.ui-widget-overlay').bind('click',function() {
$(this_id).dialog('close');
});
},
buttons: {
"Close": function() {
$( this ).dialog( "close" );
}
}
});
});
});
{% comment %}
// Used on en/bitcoin-core/privacy to show/hide columns based on button
// clicks
{% endcomment %}
$('.showcolumn').each(function() {
$(this).on('click', function() {
var class_name = $(this).attr('id');
if (class_name === 'bitcoin_core') return;
$('.showcolumn').toggleClass('active', false);
$('.showcolumn#bitcoin_core, .showcolumn#' + class_name).toggleClass('active', true);
$('.privacy-comparison th, .privacy-comparison td').toggle(false);
$('.privacy-comparison td:first-child, .privacy-comparison th:first-child, .privacy-comparison .bitcoin_core').toggle(true);
$('.privacy-comparison .' + class_name).toggle('highlight', 750);
});
});
{% comment %}
// Used on en/bitcoin-core/features/validation to create an accordion-style
// effect within a table
{% endcomment %}
$(function() {
$(".validation tr.details").hide();
$(".validation tr.brief").click(function(){
$(this).find("span").toggleClass("ui-icon-triangle-1-e").toggleClass("ui-icon-triangle-1-s");
$(this).next("tr").fadeToggle();
});
});
{% comment %}
// Used on the en/bitcoin-core/features/user-interface page to show wallets
// that support dedicated connections to Bitcoin Core.
{% endcomment %}
$(function() {
$( ".wallet_accordion" ).accordion({
active: -1,
heightStyle: "content"
});
});
{% comment %}
// Function to expand part of a section when clicked
{% endcomment %}
$(function() {
$(".show_more").hide();
$(".toggle_show_more_less").show();
$(".toggle_show_more_less").click(function() {
$(".show_more").fadeToggle();
$(".toggle_show_more_less").hide();
});
});
{% comment %}// Used on bitcoin-core/feature/requirements{% endcomment %}
$(function() {
$( "#system-requirements-accordion" ).accordion({
active: -1,
heightStyle: "content"
});
});
{% comment %}
// Begin: slideshow JS, used on en/bitcoin-core/features/
// Some JS adapted from JQuery reference, MIT license
{% endcomment %}
{% comment %}
// start_slideshow:
// - container: jquery object containing the slideshow data
{% endcomment %}
function start_slideshow(container) {
var group = container.find('.slide-group');
var slides = container.find('.slide');
var buttons = container.find('.slide-btn');
var button_array = [];
var current_index = 0;
var timeout;
{% comment %}
// short_period: time between slide changes
// long_period: time to change to the next slide after a slide has
// been manually selected
{% endcomment %}
var short_period = 3000;
var long_period = short_period * 3;
{% comment %}
// move:
// - new_index: slide to move to
// - period: time to wait before moving to the next slide
{% endcomment %}
function move(new_index, period) {
var animate_left;
var slide_left;
advance(period);
{% comment %}
// If we're already on the desired slide, don't do anything
{% endcomment %}
if (group.is(':animated') || current_index === new_index) {
return;
}
button_array[current_index].removeClass('active');
button_array[new_index].addClass('active');
{% comment %}
// Slide left or right
{% endcomment %}
if (new_index > current_index) {
slide_left = '100%';
animate_left = '-100%';
} else {
slide_left = '-100%';
animate_left = '100%';
}
slides.eq(new_index).css({
left: slide_left,
display: 'block'
});
{% comment %}
// Perform the animation
{% endcomment %}
group.animate({left: animate_left}, function() {
slides.eq(current_index).css({
display: 'none'
});
slides.eq(new_index).css({
left: 0
});
group.css({
left: 0
});
current_index = new_index;
});
}
{% comment %}
// Set timer to automatically advance to next slide
{% endcomment %}
function advance(period) {
clearTimeout(timeout);
timeout = setTimeout(function() {
if (current_index < (slides.length - 1)) {
move(current_index + 1, short_period);
} else {
move(0, short_period);
}
}, period);
}
{% comment %}
// For each slide, find its corresponding button and set an event
// handler
{% endcomment %}
$.each(slides, function(index) {
var button = $(buttons[index]);
if (index === current_index) {
button.addClass('active');
}
button.on('click', function() {
move(index, long_period);
});
button_array.push(button);
});
advance(short_period);
}
{% comment %}
// Change height of slider box to match scaled image size
{% endcomment %}
function change_slider_height() {
{% comment %}
// 125 is minimal height
{% endcomment %}
var revised_size = 125;
{% comment %}
// Look through each image since all but one will be hidden (0px)
{% endcomment %}
$(".slide img").each(function() {
var img_height = $(this).height();
if (img_height > revised_size) {
revised_size = img_height;
}
});
$(".slide-viewer").css('height', revised_size + "px");
}
{% comment %}
// This only runs after all images have been loaded, which is required so
// that the browser can autoscale them. However, that means the slidebox
// will have its default height (as set by CSS) until everything is
// loaded---which may make the slidebox a bad choice for pages with
// slow-loading resources.
{% endcomment %}
$(document).load(function() {
change_slider_height();
});
$(window).resize(function() {
change_slider_height();
});
{% comment %}
// End: slideshow JS
{% endcomment %}