-
Notifications
You must be signed in to change notification settings - Fork 2
/
contentScript-min.js
1 lines (1 loc) · 8.52 KB
/
contentScript-min.js
1
var parliamentData,locale=chrome.i18n.getMessage("currentLocale");console.log("Parliament Extension: current locale is "+locale);var localData=localStorage.getItem("parliamentarians"),lastUpdate=localStorage.getItem("parliamentarians-update"),nameList=[],currentPeople={},POTENCY_WEIGHT={HIGH:1e3,MEDIUM:50,LOW:1},needsUpdate=function(){try{lastUpdate=parseInt(lastUpdate)}catch(e){return console.log("could not parse"),!0}return(new Date).getTime()-lastUpdate<36e5?(console.log("Parliament Extension: use cache"),!1):(console.log("Parliament Extension: cache timed out"),!0)},triggerAction="click";window.location.origin.includes("lenouvelliste.ch|lacote.ch|arcinfo.ch")&&(triggerAction+=" mouseover");var first_href=window.location.href;window.location.origin.includes("beobachter.ch|blick.ch|handelszeitung.ch")&&$("body").click(function(){console.log("click"),window.location.href!=first_href?(console.log("New href: "+window.location.href),setTimeout(lookupNames,1200),setTimeout(lookupNames,2100),first_href=window.location.href):console.log("no href change")});var groupBy=function(e,n){return e.reduce(function(e,a){return(e[a[n]]=e[a[n]]||[]).push(a),e},{})};function getDataWho(e){return e.normalize("NFD").replace(/[\u0300-\u036f]/g,""),e.replace(/ /g,"-").toLowerCase()}function getParty(e){if("partyMembership"in e){if(null==e.partyMembership)return"–";if("party"in e.partyMembership&&"abbr"in e.partyMembership.party)return e.partyMembership.party.abbr}return console.log("party not found"),""}function getVia(e){if(e.length>0)return"(via "+e[0].to.name+")"}function getIndividualData(e){var n=!1;return $.each(parliamentData.data.parliamentarians,function(a,t){t.name!==e||(n=t)}),n}function fetchParliamentIds(){$.ajax({type:"json",method:"POST",url:"https://labs.letemps.ch/interactive/2019/parliament-extension/data/"+locale,success:function(e,n){console.log("Data retrieved"),localStorage.setItem("parliamentarians",e),localStorage.setItem("parliamentarians-update",String((new Date).getTime())),(parliamentData=JSON.parse(e)).data.parliamentarians.forEach(function(e){nameList.push(e.name)}),lookupNames()},error:function(e,n,a){console.log("Parliament Extension: error when fetching data: "+a)}})}function lookupNames(){var e=$("p");if(e.length>0){for(i in e)if(e[i].innerHTML){0;var n=e[i].innerHTML;nameList.forEach(function(e){if(-1!==n.indexOf(e)){var a=getDataWho(e);currentPeople[a]=e,regexp=new RegExp('([^"])'+e),n=n.replace(regexp,'$1<span class="modal-available '+a+'" data-who="'+a+'">'+e+"</span>")}}),e[i].innerHTML=n}}setTimeout(function(){$("span.modal-available").on("click mouseover",function(e){eventHandler($(this).data("who"))})},200)}function eventHandler(e){var n=getIndividualData(currentPeople[e]);if(!n)return console.log("Parliament Extension: politician not found in data"),!1;var a=getParty(n);function t(e){return'<li class="list-header">'+e+"</li>"}function r(e){return'<li class="list-item">'+e+"</li>"}var o=`<div class="person">\n <div class="person-picture" style="background-image: url('${n.portrait}')"></div>\n <div class="person-txt">\n <div class="person-txt-header">\n <span class="person-name"><a target="_blank" href="https://lobbywatch.ch/${locale}/daten/parlamentarier/${n.id}/${n.name}">${n.name}</a></span>\n <div class="person-infos">${n.councilTitle}, ${n.canton}, ${a}</div>\n </div>\n\n <div class="person-text-body">\n <ul class="person-links-list">\n <li>${chrome.i18n.getMessage("loadingInterests")}</li>\n </ul>\n </div>\n\n </div>\n </div>`;document.querySelector(".modal-available");tippy(".modal-available."+e,{content:o,aria:null,autoFocus:!1,trigger:triggerAction,onMount({reference:e}){e.setAttribute("aria-expanded","true")},onHide({reference:e}){e.setAttribute("aria-expanded","false")},placement:"bottom",arrow:!0,interactive:!0,distance:7,animation:"fade",theme:"light-border dropdown",updateDuration:0,onShow(o){function i(e){if(!o.loaded){if('<p class="individual-info">'+("<b>"+chrome.i18n.getMessage("tipInterests")+"</b>")+"</p>",li_str="",!e){var i='<p class="error">'+chrome.i18n.getMessage("errorMessage")+"</p>",s=`<div class="person">\n <div class="person-picture" style="background-image: url('${n.portrait}')"></div>\n\n <div class="person-txt">\n <a class="lobbywatch-logo" target="_blank" href="https://lobbywatch.ch/${locale}/daten/parlamentarier/${n.id}/${n.name}">\n <img src="${chrome.extension.getURL("icon32.png")}" alt="Lobbywatch" />\n </a>\n <div class="person-txt-header">\n <span class="person-name"><a target="_blank" href="https://lobbywatch.ch/${locale}/daten/parlamentarier/${n.id}/${n.name}">${n.name}</a></span>\n <div class="person-infos">${n.councilTitle}, ${n.canton}, ${a}</div>\n </div>\n <div class="person-text-body">\n <p>${i}</p>\n </div>\n </div>\n </div>`;o.setContent(s),console.log(chrome.i18n.getMessage("errorMessage"))}var l=e.data.getParliamentarian.guests,c=[];l.length>0&&l.forEach(function(e){c.push(e.name),r(e.name)});var p="";c.length>1?p=`<p><b>${chrome.i18n.getMessage("guests")}</b></p>\n <p class="guests">${c.join(", ")} (${n.name+" "+chrome.i18n.getMessage("guestsComplement")})</p>`:1==c.length&&(p=`<p><b>${chrome.i18n.getMessage("guest")}</b></p>\n <p class="guests"> ${c.join(", ")} (${n.name+" "+chrome.i18n.getMessage("guestComplement")})</p>`);var d=groupBy(e.data.getParliamentarian.connections,"potency");function m(e){return e?(_li_str="",e.forEach(function(e){var n=getVia(e.vias);_li_str+=r(n?e.to.name+" "+n:e.to.name+", "+e.function)}),_li_str):null}var u=m(d.HIGH);u&&(li_str+=t(chrome.i18n.getMessage("tipInterestsHIGH")),li_str+=u);var g=m(d.MEDIUM);g&&(li_str+=t(chrome.i18n.getMessage("tipInterestsMEDIUM")),li_str+=g);var h=m(d.LOW);h&&(li_str+=t(chrome.i18n.getMessage("tipInterestsLOW")),li_str+=h);var f=`<div class="person">\n <div class="person-picture" style="background-image: url('${n.portrait}')"></div>\n\n <div class="person-txt">\n <a class="lobbywatch-logo" target="_blank" href="https://lobbywatch.ch/${locale}/daten/parlamentarier/${n.id}/${n.name}">\n <img src="${chrome.extension.getURL("icon32.png")}" alt="Lobbywatch" />\n </a>\n\n <div class="person-txt-header">\n <span class="person-name"><a target="_blank" href="https://lobbywatch.ch/${locale}/daten/parlamentarier/${n.id}/${n.name}">${n.name}</a></span>\n <span class="person-infos">${n.councilTitle}, ${n.canton}, ${a}</span>\n </div>\n\n <div class="person-text-body">\n <p>${p}</p>\n <ul class="person-links-list">\n ${li_str}\n </ul>\n </div>\n\n </div>\n\n </div>`;o.setContent(f)}o.loaded=!0}var s=localStorage.getItem(e);if(s)data=JSON.parse(s),i(data);else{var l={query:query,variables:{locale:locale,id:n.id}};$.ajax({method:"POST",url:"https://lobbywatch.ch/graphql",contentType:"application/json",data:JSON.stringify(l),success:function(n,a){localStorage.setItem(e,JSON.stringify(n)),i(n)},error:function(){console.log("error when querying lobbywatch"),i(!1)}})}}})}localData&&!needsUpdate()?((parliamentData=JSON.parse(localData)).data.parliamentarians.forEach(function(e){nameList.push(e.name)}),console.log("Parliament: Interests loaded from localStorage")):(console.log("Parliament: fetching Interests data"),fetchParliamentIds()),lookupNames();var query="query getParliamentarian($locale: Locale!, $id: ID!) {\n getParliamentarian(locale: $locale, id: $id) {\n name\n active\n canton\n represents\n parliamentId\n dateOfBirth\n gender\n represents\n councilJoinDate\n councilTenure\n age\n occupation\n commissions {\n name\n }\n guests {\n id\n name\n }\n connections {\n group\n potency\n function\n compensation {\n money\n description\n __typename\n }\n from {\n __typename\n }\n to {\n __typename\n ... on Organisation {\n id\n name\n __typename\n }\n }\n vias {\n __typename\n to {\n ... on Guest {\n id\n name\n __typename\n }\n __typename\n }\n }\n __typename\n }\n }\n}";