if(typeof __wm==="undefined") __wm={}; (function(){ var _JSON = typeof __wbhack != 'undefined' ? __wbhack.JSON : JSON; var prettyMonths = [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; var $D=document,$R=document,$=function(n){return $R.getElementById(n)}; function formatNumber(n) { return (''+n).replace(/\B(?=(\d{3})+$)/g, ','); } var ajax=__wm.ajax=function ajax(method, url, callback, headers, data) { var xmlhttp; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() { if (this.readyState == 4) { callback(xmlhttp); } }; xmlhttp.open(method, url, true); if (headers) { for (var header in headers) { if (headers.hasOwnProperty(header)) { xmlhttp.setRequestHeader(header, headers[header]); } } } // pass cookies for user authorization xmlhttp.withCredentials = true; xmlhttp.send(data); } __wm.h=function hideToolbar(ev) { $("wm-ipp").style.display="none"; ev.stopPropagation(); } var $expand, $capinfo; __wm.bt=function bootstrap(imgWidth,imgHeight,yearImgWidth,monthImgWidth, coll,wbCurrentUrl,captureDate,firstYear, static_prefix,bannerCss) { __wm.static_prefix = static_prefix || '/static/'; var wbPrefix='/'+(coll||'web')+'/'; captureDate = captureDate.split('-'); var displayDay = captureDate[2]; var displayMonth = captureDate[1]; var displayYear = captureDate[0]; var trackerVal,curYear = -1,curMonth = -1; var yearTracker,monthTracker; // move #wm-ipp content to its shadowRoot if supported var wmipp = $('wm-ipp-base'); if (wmipp.attachShadow){ var shadow = wmipp.attachShadow({mode:'open'}); $R = shadow; // this changes the base of $() var nav = wmipp.children[0];nav.id='wm-ipp'; shadow.appendChild(nav); if (bannerCss) { for(var i = 0; i < bannerCss.length; i++) { var link = $D.createElement('link'); link.setAttribute('rel', 'stylesheet'); link.setAttribute('type', 'text/css'); link.setAttribute('href', static_prefix + bannerCss[i]); shadow.appendChild(link); } } } if (window.top == window.self) { wmipp.style.display = "block"; } var $spk=$('wm-ipp-sparkline') $expand=$('wm-expand'); $capinfo=$('wm-capinfo'); function showTrackers(event) { var val = event.type=="mouseenter"?1:0; if (val===trackerVal) return; var $ipp=$("wm-ipp"); var $y=$("displayYearEl"),$m=$("displayMonthEl"),$d=$("displayDayEl"); if (val) { $ipp.className="hi"; } else { $ipp.className=""; $y.innerHTML=displayYear;$m.innerHTML=prettyMonths[displayMonth-1];$d.innerHTML=displayDay; } yearTracker.style.display=val?"inline":"none"; monthTracker.style.display=val?"inline":"none"; trackerVal = val; } function getElementX2(el) { var de = $D.documentElement; var box = (typeof el.getBoundingClientRect!=='undefied')? el.getBoundingClientRect():{top:0,left:0}; return box.left + (window.pageXOffset||de.scrollLeft)-(de.clientLeft||0); } function navCaptures(captures) { var $e = $("wm-nav-captures"); var count = 0; var years = captures.years; var first_ts = captures.first_ts, last_ts = captures.last_ts; for (var j = 0; j < years.length; j++) { var months = years[j][1]; for (var i = 0; i < months.length; i++) { count += months[i]; } } var html = '' + formatNumber(count) + ' ' + (count > 1 ? "captures" : "capture") + ''; var timespan = __wbTs.format(first_ts, '%d %b %Y'); if (last_ts != first_ts) { timespan += ' - ' + __wbTs.format(last_ts, '%d %b %Y'); } html += '
' + timespan + '
'; $e.innerHTML = html; } function trackMouseMove(event) { //var element = event.target; var element = $spk; var eventX = getEventX(event); var elementX = getElementX2(element); var xOff = Math.min(Math.max(0, eventX - elementX),imgWidth); var monthOff = xOff % yearImgWidth; var year = Math.floor(xOff / yearImgWidth); var monthOfYear = Math.min(11,Math.floor(monthOff / monthImgWidth)); // 1 extra border pixel at the left edge of the year: var month = (year * 12) + monthOfYear; var day = monthOff % 2==1?15:1; var dateString = zeroPad(year + firstYear) + zeroPad(monthOfYear+1,2) + zeroPad(day,2) + "000000"; $("displayYearEl").innerHTML=year+firstYear; $("displayMonthEl").innerHTML=prettyMonths[monthOfYear]; // looks too jarring when it changes.. //$("displayDayEl").innerHTML=zeroPad(day,2); var url = wbPrefix + dateString + '/' + wbCurrentUrl; $("wm-graph-anchor").href=url; if(curYear != year) { var yrOff = year * yearImgWidth; yearTracker.style.left = yrOff + "px"; curYear = year; } if(curMonth != month) { var mtOff = year + (month * monthImgWidth) + 1; monthTracker.style.left = mtOff + "px"; curMonth = month; } } function disclaimElement(element) { if (window.top == window.self) { element.style.display = "block"; $D.body.insertBefore(element, $D.body.firstChild); } } yearTracker=$D.createElement('div'); yearTracker.className='yt'; with(yearTracker.style){ display='none';width=yearImgWidth+"px";height=imgHeight+"px"; } monthTracker=$D.createElement('div'); monthTracker.className='mt'; with(monthTracker.style){ display='none';width=monthImgWidth+"px";height=imgHeight+"px"; } $spk.appendChild(yearTracker); $spk.appendChild(monthTracker); var $cv=$('wm-sparkline-canvas'); $spk.onmouseenter=showTrackers; $spk.onmouseleave=showTrackers; $spk.onmousemove=trackMouseMove; //var $ipp=$("wm-ipp"); //$ipp&&disclaimElement($ipp); var canvas = $('wm-sparkline-canvas'); if (!!(canvas.getContext && canvas.getContext('2d'))) { var sparkline_url = "/__wb/sparkline?output=json&url=" + encodeURIComponent(wbCurrentUrl) + (coll && "&collection=" + coll || ''); ajax("GET", sparkline_url, function(response) { if(response.status == 200) { var capnav=_JSON.parse(response.responseText); var yearsobj = capnav.years; var ykeys = Object.getOwnPropertyNames(yearsobj); var years = (capnav.years = []); for (var i = 0; i < ykeys.length; i++) { var y = ykeys[i]; if (yearsobj[y]) { years.push([y, yearsobj[y]]); } } navCaptures(capnav); sparkline(capnav,imgWidth,imgHeight,canvas, firstYear, displayYear, displayMonth); } }); } else { var sparklineImg = new Image(); sparklineImg.src = "/__wb/sparkline?url=" + encodeURIComponent(wbCurrentUrl) + "&width=" + imgWidth + "&height=" + imgHeight + "&selected_year=" + displayYear + "&selected_month=" + displayMonth + (coll && "&collection=" + coll || ''); sparklineImg.alt= "sparkline"; sparklineImg.width=imgWidth; sparklineImg.height=imgHeight; sparklineImg.id="sparklineImgId"; sparklineImg.border="0"; $cv.parentNode.replaceChild(sparklineImg, $cv); } function process_autocomplete(data) { var out = [] var len = data.length; for(var i=0; i0) { var output = process_autocomplete(data.hosts); suggest(output); } else if (typeof data.isUrl!=='undefined' && data.isUrl===true && typeof data.excluded==='undefined') { suggest([query]); } else { ajax("GET", '/__wb/search/anchor?q='+encodeURIComponent(query), function(data) { var data = _JSON.parse(data.response); if (typeof data!=='undefined' && data.length>0) { var output = process_autocomplete(data.slice(0,5)); suggest(output); } }); } }); }, onSelect: function(e, term, item) { $("wmtb").submit(); } }); $("wmtb").onsubmit = function(e) { var query = $("wmtbURL").value; // if textbox value is not a URL, redirect to search if (!(query.indexOf('http://') === 0 || query.indexOf('https://') === 0 || query.match(/[\w\.]{2,256}\.[a-z]{2,4}/gi))) { document.location.href="/web/*/" + $("wmtbURL").value; e.preventDefault(); return false; } }; }; function show_timestamps() { // Populate capinfo with capture resources if empty. If not empty, it has // already run before so avoid redoing AJAX. var $capresources=$('wm-capresources'); $capresources.innerHTML = ''; //disable caching to be able to reload list when browsing frames. //if($capresources.innerHTML.length !== 0) { // return; //} var $wmloading=$("wm-capresources-loading"); $wmloading.style.display='block'; // calculate datetime difference with capture datetime and return relative // value such as "-5 hours, 10 minutes". var capture_ts = $('wmtb').elements.date.value; var capture_msec = __wbTs.timestamp2datetime(capture_ts).getTime(); function datetime_diff(dt_str) { var dt_msec = Date.parse(dt_str); var diff = dt_msec - capture_msec; var prefix = ""; if(diff < 0) { prefix += "-"; diff = Math.abs(diff); } else { prefix += "+"; } var highlight = false; if(diff < 1000) { // equal to the page datetime return {delta: diff, text:"", highlight: highlight}; } var total_diff = diff; var years_d = Math.floor(diff/1000/60/60/24/30/12); diff -= years_d*1000*60*60*24*30*12; var months_d = Math.floor(diff/1000/60/60/24/30); diff -= months_d*1000*60*60*24*30; var days_d = Math.floor(diff/1000/60/60/24); diff -= days_d*1000*60*60*24; var hours_d = Math.floor(diff/1000/60/60); diff -= hours_d*1000*60*60; var minutes_d = Math.floor(diff/1000/60); diff -= minutes_d*1000*60; var seconds_d = Math.floor(diff/1000); var parts = []; if(years_d > 1) { parts.push(years_d + " years"); highlight = true; } else if(years_d == 1) { parts.push(years_d + " year"); highlight = true; } if(months_d > 1) { parts.push(months_d + " months"); highlight = true; } else if(months_d == 1) { parts.push(months_d + " month"); highlight = true; } if(days_d > 1) { parts.push(days_d + " days"); } else if(days_d == 1) { parts.push(days_d + " day"); } if(hours_d > 1) { parts.push(hours_d + " hours"); } else if(hours_d == 1) { parts.push(hours_d + " hour"); } if(minutes_d > 1) { parts.push(minutes_d + " minutes"); } else if (minutes_d == 1) { parts.push(minutes_d + " minute"); } if(seconds_d > 1) { parts.push(seconds_d + " seconds"); } else if(seconds_d == 1) { parts.push(seconds_d + " second"); } if(parts.length > 2) { parts = parts.slice(0, 2); } return {delta: total_diff, text: prefix + parts.join(" "), highlight: highlight}; } // Utility method to find elements in dom (currently only img) using URL. // Also look into embedded frames recursively // Captured resources urls may have timestamps different from DOM URL // so it is not possible to search with original path // /web/20120407141544/http://example.com // we must search for URLS ENDING WITH http://example.com function find_elements_by_url(current_window, url) { var orig_url = url.split("/").splice(6).join("/"); var els=current_window.document.querySelectorAll( "img[src$='" + orig_url + "'], iframe[src$='" + orig_url + "'], frame[src$='" + orig_url + "']" ); var els_array=Array.prototype.slice.call(els); for(var i=0; i 0) { for(var i=0; i 0) { for(var i=0; i 0) { inflight_urls = 0; deduped.map(get_resource_info); } else { $capresources.innerHTML = "There are no sub-resources in the page."; $wmloading.style.display='none'; } } __wm.ex=function expand(ev) { ev.stopPropagation(); var c=$expand.className; if (c.match(/wm-closed/)) { // closed $expand.className=c.replace(/wm-closed/,'wm-open'); $capinfo.style.display='block'; show_timestamps(); } else { $expand.className=c.replace(/wm-open/,'wm-closed'); $capinfo.style.display='none'; } }; function isArray(obj) { return (typeof obj !== 'undefined' && obj && obj.constructor === Array); } function setDisplayStyle(id, display) { var el = $(id); if (el) { el.style.display = display; } } function show(ids) { if (!isArray(ids)) { ids = [ids]; } for (var i = 0; i < ids.length; i++) { setDisplayStyle(ids[i], 'inline-block'); } } function hide(ids) { if (!isArray(ids)) { ids = [ids]; } for (var i = 0; i < ids.length; i++) { setDisplayStyle(ids[i], 'none'); } } function userIsLoggedIn() { show('wm-save-snapshot-open'); hide('wm-sign-in'); } function userIsNotLoggedIn() { hide([ 'wm-save-snapshot-open', 'wm-save-snapshot-in-progress', ]); show('wm-sign-in'); } function startSnapShotSaving() { hide([ 'wm-save-snapshot-fail', 'wm-save-snapshot-open', 'wm-save-snapshot-success', ]); show([ 'wm-save-snapshot-in-progress', ]); } function successSnapshotSaving() { hide([ 'wm-save-snapshot-fail', 'wm-save-snapshot-in-progress', ]); show([ 'wm-save-snapshot-open', 'wm-save-snapshot-success', ]); } function failSnapshotSaving(err) { hide([ 'wm-save-snapshot-in-progress', 'wm-save-snapshot-success', ]); show([ 'wm-save-snapshot-fail', 'wm-save-snapshot-open', ]); } /** * check whether cookie has field * * @param name * @return boolean */ function hasCookie(name) { return document.cookie.search(name) >= 0; } __wm.saveSnapshot = function (url, timestamp, tags) { startSnapShotSaving(); ajax('POST', '/__wb/web-archive/', function (res) { if (res.status === 401) { // it seems that user is not logged in userIsNotLoggedIn(); } else if (res.status >= 400) { failSnapshotSaving(res.responseText); console.log('You have got an error.'); console.log('If you think something wrong here please send it to support.'); console.log('Response: "' + res.responseText + '"'); console.log('status: "' + res.status + '"'); } else { successSnapshotSaving(res); } }, { 'Content-Type': 'application/json' }, _JSON.stringify({ url: url, snapshot: timestamp, tags: tags || [], })); return false; }; document.addEventListener('DOMContentLoaded', function () { if (hasCookie('logged-in-user') && hasCookie('logged-in-sig')) { userIsLoggedIn(); } else { userIsNotLoggedIn(); } }); })();