var templatePage, templateBookDetail, templateMain, currentData, before; var cache = new LRUCache(30); var DEBUG = true; var isEink = /Kobo|Kindle|EBRD1101/i.test(navigator.userAgent); var isPushStateEnabled = window.history && window.history.pushState && window.history.replaceState && // pushState isn't reliable on iOS until 5. !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork)/); function debug_log(text) { if ( DEBUG ) { console.log(text); } } function elapsed () { var elapsed = new Date () - before; return "Elapsed : " + elapsed; } function retourMail(data, textStatus, jqXHR ) { alert (data); } function sendToMailAddress (component, dataid) { $toto = $.cookie ('email'); if (!$.cookie ('email')) { var email = window.prompt ("Please enter your email : ", ""); $.cookie ('email', email); } email = $.cookie ('email'); var url = 'sendtomail.php'; if (currentData.databaseId) url = url + '?db=' + currentData.databaseId; $.ajax ({url: url, type: 'post', data: { data: dataid, email: email }, success: retourMail}); } function strformat () { var s = arguments[0]; for (var i = 0; i < arguments.length - 1; i++) { var reg = new RegExp("\\{" + i + "\\}", "gm"); s = s.replace(reg, arguments[i + 1]); } return s; } function isDefined(x) { var undefined; return x !== undefined; } function getCurrentOption (option) { if (!$.cookie (option)) { if (currentData && currentData.const && currentData.const.config && currentData.const.config [option]) { return currentData.const.config [option]; } } return $.cookie (option); } function htmlEscape(str) { return String(str) .replace(/&/g, '&') .replace(/"/g, '"') .replace(/'/g, ''') .replace(//g, '>'); } function navigateTo (url) { before = new Date (); var jsonurl = url.replace ("index", "getJSON"); var cachedData = cache.get (jsonurl); if (cachedData) { history.pushState(jsonurl, "", url); updatePage (cachedData); } else { $.getJSON(jsonurl, function(data) { history.pushState(jsonurl, "", url); cache.put (jsonurl, data); updatePage (data); }); } } function updatePage (data) { var result; data ["const"] = currentData ["const"]; if (false && $("section").length && currentData.isPaginated == 0 && data.isPaginated == 0) { // Partial update (for now disabled) debug_log ("Partial update"); result = templateMain (data); $("h1").html (data.title); $("section").html (result); } else { // Full update result = templatePage (data); $("body").html (result); } document.title = data.title; currentData = data; debug_log (elapsed ()); if ($.cookie('toolbar') == 1) $("#tool").show (); if (currentData.containsBook == 1) { $("#sortForm").show (); } else { $("#sortForm").hide (); } ajaxifyLinks (); $("#sort").click(function(){ $('.books').sortElements(function(a, b){ var test = 1; if ($("#sortorder").val() == "desc") { test = -1; } return $(a).find ("." + $("#sortchoice").val()).text() > $(b).find ("." + $("#sortchoice").val()).text() ? test : -test; }); }); $(".headright").click(function(){ if ($("#tool").is(":hidden")) { $("#tool").slideDown("slow"); $.cookie('toolbar', '1'); } else { $("#tool").slideUp(); $.removeCookie('toolbar'); } }); if (getCurrentOption ("use_fancyapps") == 1) { $(".fancydetail").click(function(event){ event.preventDefault(); before = new Date (); var url = $(this).attr("href"); var jsonurl = url.replace ("index", "getJSON"); $.getJSON(jsonurl, function(data) { data ["const"] = currentData ["const"]; var detail = templateBookDetail (data); $.magnificPopup.open({ items: { src: detail, type: 'inline' } }); debug_log (elapsed ()); }); }); $('section').magnificPopup({ delegate: '.fancycover', // child items selector, by clicking on it popup will open type: 'image', gallery:{enabled:true, preload: [0,2]} // other options }); $('.fancyabout').magnificPopup({ type: 'ajax' }); } } function ajaxifyLinks () { if (isPushStateEnabled) { var links = $("a[href^='index']"); if (getCurrentOption ("use_fancyapps") == 1) links = links.not (".fancydetail"); links.click (function (event) { event.preventDefault(); var url = $(this).attr('href'); navigateTo (url); }); $("#searchForm").submit (function (event) { event.preventDefault(); var url = strformat ("index.php?page=9¤t={0}&query={1}&db={2}", currentData.page, $("input[name=query]").val (), currentData.databaseId); navigateTo (url); }); } } window.onpopstate = function(event) { before = new Date (); var data = cache.get (event.state) updatePage (data); }; $(document).keydown(function(e){ if (e.keyCode == 37 && $("#prevLink").length > 0) { navigateTo ($("#prevLink").attr('href')); } if (e.keyCode == 39 && $("#nextLink").length > 0) { navigateTo ($("#nextLink").attr('href')); } });