/* Configure timeline settings from website options
* ================================================== */
function getUrlVars(string) {
var vars = [],
hash,
hashes,
str = string.toString();
if (str.match('&')) {
str = str.replace("&", "&");
} else if (str.match('&')) {
str = str.replace("&", "&");
} else if (str.match('&')) {
str = str.replace("&", "&");
}
if (str.match('#')) {
str = str.split('#')[0];
}
hashes = str.slice(str.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
};
function getLinkAndIframe() {
var theobj = {},
e_source = document.getElementById('embed-source-url'),
e_width = document.getElementById('embed-width'),
e_height = document.getElementById('embed-height'),
e_language = document.getElementById('embed-language'),
e_embed = document.getElementById('embed_code'),
e_font = document.getElementById('embed-font-active'),
e_startatend = document.getElementById('embed-startatend'),
e_timenav_top = document.getElementById('embed-timenavtop'),
e_startatslide = document.getElementById('embed-startatslide'),
e_hashbookmark = document.getElementById('embed-hash-bookmark'),
e_debug = document.getElementById('embed-debug'),
initial_zoom = document.getElementById('embed-initialzoom'),
timenav_position = "bottom",
start_at_end = false,
is_debug = false,
hash_bookmark = false,
iframe,
link,
vars,
wp,
source_key;
/* SOURCE KEY
================================================== */
if (e_source.value.match("docs.google.com")) {
if (e_source.value.match(new RegExp('/spreadsheets/d/e'))) {
theobj.warning = "Invalid Google URL. Please see the note above about how a recent change with Google Spreadsheets affects creating timelines.";
return theobj;
}
var obj = TL.parseGoogleSpreadsheetURL(e_source.value);
source_key = obj.key;
} else {
if (e_source.value == "") {
source_key = document.getElementById('embed-source-url').getAttribute("placeholder");
} else {
source_key = e_source.value;
}
}
/* MISC
================================================== */
if (e_startatend.checked) {
start_at_end = true;
}
if (e_timenav_top.checked) {
timenav_position = "top";
}
if (e_debug.checked) {
is_debug = true;
}
if (e_hashbookmark.checked) {
hash_bookmark = true;
}
/* IFRAME AND LINK
================================================== */
if ((window.location.host).includes("localhost:") || (window.location.host).includes("0.0.0.0:")) {
urlBase = "http://" + window.location.host + "/dist/";
} else if ((window.location.host).includes("timeline.knilab.com")) {
urlBase = "https://cdn.knightlab.com/libs/timeline3/dev/";
} else {
urlBase = "https://cdn.knightlab.com/libs/timeline3/latest/";
}
vars = urlBase + "embed/index.html?source=" + source_key;
vars += "&font=" + e_font.getAttribute("data-value");
vars += "&lang=" + e_language.value;
if (start_at_end) {
vars += "&start_at_end=" + start_at_end;
}
if (timenav_position == "top") {
vars += "&timenav_position=" + timenav_position;
}
if (is_debug) {
vars += "&debug=" + is_debug;
}
if (hash_bookmark) {
vars += "&hash_bookmark=" + hash_bookmark;
}
if (initial_zoom) {
vars += "&initial_zoom=" + initial_zoom.value;
}
// TODO: Make this start at end if startatslide > # of slides
if (parseInt(e_startatslide.value, 10) > 0) {
vars += "&start_at_slide=" + parseInt(e_startatslide.value, 10);
}
if (e_width.value > 0) {
vars += "&width=" + e_width.value;
}
if (e_height.value > 0) {
vars += "&height=" + e_height.value;
}
iframe = "";
theobj.iframe = iframe;
theobj.link = vars;
theobj.copybox = iframe;
return theobj;
};
/* EMBED GENERATOR
================================================== */
var $ = jQuery;
function updateEmbedCode(element, options) {
$("#embed-source-url-message").hide();
var e_embed = document.getElementById('embed_code'),
el = getLinkAndIframe();
if (el.warning) {
$("#embed-source-url-message").html(el.warning);
$("#embed-source-url-message").css('display', 'block');
return;
}
e_embed.value = el.copybox;
// document.getElementById('embed_code_medium').val(el.link);
document.getElementById('preview-embed-link').setAttribute('href', el.link);
document.getElementById("sharable-url").innerHTML = el.link;
document.getElementById("preview-embed-iframe").innerHTML = el.iframe;
if (!document.getElementById("preview-embed").style.display) {
document.getElementById("preview-embed").style.display = "block";
}
}
document.addEventListener("DOMContentLoaded", function() {
// More Options
$("#show-options").click(function(e) {
$(this).hide();
$("#hide-options").show();
$(".more-options").slideDown();
return false;
});
$("#hide-options").click(function(e) {
$(this).hide();
$("#show-options").show();
$(".more-options").slideUp();
return false;
});
// Preview
document.getElementById("iframe-preview-button").addEventListener("click", function() {
updateEmbedCode();
var $embed = $("#preview-embed-iframe");
$embed.show();
// Need to 'reload' the iframe to get it to display correctly
var $if = $("#preview iframe");
$if.attr("src", $if.attr("src"));
//$("body,html").animate({scrollTop: $embed.offset().top - 60}, 250);
});
// Device preview
$('#device-preview-mode span').on("click", function() {
$("#preview-embed-iframe").removeClass();
$("#preview-embed-iframe").addClass($(this).data("size"));
$(this).siblings().removeClass("active");
$(this).addClass("active");
});
// Embed Generator
$("#embed_code").click(function() { $(this).select(); });
$('#make-step-3 input').change(function(evt) { updateEmbedCode(evt); });
$('#make-step-3 select').change(function(evt) { updateEmbedCode(evt); });
$("#embed-font li").click(function(evt) {
var currentFont = document.getElementById("embed-font-active");
// currentFont.removeChild(currentFont.firstChild);
currentFont.removeAttribute("id");
$(this).attr("id", "embed-font-active")
// .prepend('');
var fontPair = $(this).data("value");
$("#font-pair-preview").attr("src", "static/img/make/" + fontPair.toLowerCase() + ".png")
.attr("alt", fontPair);
$("ul#embed-font").hide();
// updateEmbedCode(evt);
});
$("#embed-font-dropdown a, #font-pair-preview").on("click", function(evt) {
evt.preventDefault();
$("ul#embed-font").toggle();
});
$('.collapse').on('show', function(e) {
window.location.hash = "show-" + $(this).attr('id');
})
if (window.location.hash.match(/#show-/)) {
var $target = $("#" + window.location.hash.substr(6));
$target.collapse('show');
navSmartScroll($target.prev());
}
});