2018-04-05 18:11:40 +02:00
import _ from 'lodash' ;
import $ from 'jquery' ;
import 'bootstrap' ;
import punycode from 'punycode' ;
import 'datatables.net' ;
2018-06-06 23:35:07 +02:00
import 'tooltipster' ;
2018-04-05 18:11:40 +02:00
$ ( function ( ) {
2018-04-19 11:37:12 +02:00
var trunc = function ( s , length ) {
if ( s . length > length ) {
s = s . substring ( 0 , length ) + '…' ;
}
return s ;
} ;
2018-04-17 20:45:51 +02:00
var table = null ;
2018-05-25 20:05:19 +02:00
var yes = '<i class="icon ion-md-checkmark-circle"></i>' ,
no = '<i class="icon ion-md-close-circle"></i>' ;
2018-04-17 20:45:51 +02:00
$ . getJSON ( 'data/screenshots.json' , function ( screenshots ) {
$ . getJSON ( 'data/spider_result.json' , function ( data ) {
var tbody = $ ( 'tbody' ) ;
$ . each ( data , function ( index , item ) {
var row = $ ( document . createElement ( 'tr' ) ) ;
2018-04-19 00:51:59 +02:00
// typ
var level = null ;
if ( item . meta . level === 'DE:ORTSVERBAND' ) {
level = 'OV' ;
} else if ( item . meta . level === 'DE:KREISVERBAND' ) {
level = 'KV' ;
} else if ( item . meta . level === 'DE:LANDESVERBAND' ) {
level = 'LV' ;
}
2018-06-06 23:35:07 +02:00
row . append ( '<td data-order="' + ( level === null ? '' : level ) + '"><span class="tt" title="Art der Gliederung: LV = Landesverband, KV = Kreisverband, OV = Ortsverband">' + ( level === null ? '' : level ) + '</span></td>' ) ;
2018-04-19 00:51:59 +02:00
// land
row . append ( '<td>' + ( item . meta . state === null ? '' : item . meta . state ) + '</td>' ) ;
// kreis
row . append ( '<td>' + ( item . meta . district === null ? '' : item . meta . district ) + '</td>' ) ;
// stadt
row . append ( '<td>' + ( item . meta . city === null ? '' : item . meta . city ) + '</td>' ) ;
2018-04-17 20:45:51 +02:00
// input URL
2018-06-06 23:35:07 +02:00
row . append ( '<td data-order="' + item . input _url + '"><span class="tt" title="URL, die als Ausgangspunkt für diese Site vorliegt. Nicht notwendigerweise die kanonische URL."><a href="' + item . input _url + '" target="_blank" rel="noopener noreferrer">' + trunc ( punycode . toUnicode ( item . input _url ) , 60 ) + '</a></span></td>' ) ;
2018-04-17 20:45:51 +02:00
2018-04-19 00:51:59 +02:00
// score
2018-06-06 23:35:07 +02:00
row . append ( '<td data-order="' + item . score . toFixed ( 3 ) + '"><span class="tt" title="Punktzahl für diese Site (je höher desto besser)">' + item . score . toFixed ( 1 ) + '</span></td>' ) ;
2018-04-19 00:51:59 +02:00
2018-04-17 20:45:51 +02:00
// IPs
2018-04-19 00:51:59 +02:00
var ips = _ . join ( item . details . ipv4 _addresses , ', ' ) ;
2018-06-06 23:35:07 +02:00
row . append ( '<td class="text ' + ( ips === '' ? 'bad' : 'good' ) + ' text-center" data-order="' + ( ips === '' ? no : ips ) + '"><span class="tt" title="IPv4-Adresse(n) des Servers bzw. der Server">' + ( ips === '' ? no : ips ) + '</span></td>' ) ;
2018-04-19 00:51:59 +02:00
// SITE_REACHABLE
2018-06-06 23:35:07 +02:00
var reachable = '<span class="tt" title="Die Site war beim Check erreichbar.">' + yes + '</span>' ;
if ( ! item . result . SITE _REACHABLE . value ) {
reachable = '<span class="tt" title="Die Site war beim Check nicht erreichbar.">' + no + '</span>' ;
}
row . append ( '<td class="' + ( item . result . SITE _REACHABLE . value ? 'good' : 'bad' ) + ' text-center" data-order="' + ( item . result . SITE _REACHABLE . value ? '1' : '0' ) + '">' + reachable + '</td>' ) ;
2018-04-19 00:51:59 +02:00
2018-04-19 11:36:56 +02:00
// HTTP_RESPONSE_DURATION
var durationClass = 'bad' ;
if ( item . result . HTTP _RESPONSE _DURATION . score > 0 ) { durationClass = 'medium' ; }
if ( item . result . HTTP _RESPONSE _DURATION . score > 0.5 ) { durationClass = 'good' ; }
2018-06-06 23:35:07 +02:00
row . append ( '<td class="text ' + durationClass + ' text-center" data-order="' + item . result . HTTP _RESPONSE _DURATION . value + '"><span class="tt" title="Dauer, bis der Server die Seitenanfrage beantwortet. Unter 100 ms ist sehr gut. Unter 1 Sekunde ist okay.">' + item . result . HTTP _RESPONSE _DURATION . value + ' ms</span></td>' ) ;
2018-04-19 11:36:56 +02:00
2018-04-19 00:51:59 +02:00
// FAVICON
2018-05-25 22:09:04 +02:00
var icon = item . result . FAVICON . value && ( item . details . icons [ 0 ] != null ) ;
var iconFile = ( icon && ( item . details . icons [ 0 ] != null ) ? item . details . icons [ 0 ] : '' ) ;
2018-06-06 23:35:07 +02:00
var noicon = '<span class="tt" title="Diese Site hat kein Icon.">' + no + '</span>'
var icontag = ( icon ? ( '<img src="/siteicons/' + iconFile + '" class="siteicon tt" title="Die Site verweist auf das gezeigte Icon.">' ) : noicon ) ;
row . append ( '<td class="' + ( icon ? 'good' : 'bad' ) + ' text-center" data-order="' + iconFile + '">' + icontag + '</td>' ) ;
2018-04-17 20:45:51 +02:00
2018-04-23 09:11:50 +02:00
// HTTPS
var hasHTTPS = item . result . HTTPS . value ;
2018-06-06 23:35:07 +02:00
var hasHTTPScontent = ( hasHTTPS ? '<span class="tt" title="Die Site ist über HTTPS erreichbar">' + yes + '</span>' : '<span class="tt" title="Die Site ist nicht über HTTPS erreichbar (-2 Punkte).">' + no + '</span>' )
row . append ( '<td class="' + ( hasHTTPS ? 'good' : 'bad' ) + ' text-center" data-order="' + ( hasHTTPS ? '1' : '0' ) + '">' + hasHTTPScontent + '</td>' ) ;
2018-04-23 09:11:50 +02:00
2018-04-19 00:51:59 +02:00
// WWW_OPTIONAL
var wwwOptional = item . result . WWW _OPTIONAL . value ;
2018-06-06 23:35:07 +02:00
var wwwOptionalcontent = ( wwwOptional ? '<span class="tt" title="Die Site ist sowohl mit als auch ohne www. in der URL aufrufbar">' + yes + '</span>' : '<span class="tt" title="Die Site ist nicht sowohl mit als auch ohne www. in der URL aufrufbar.">' + no + '</span>' )
row . append ( '<td class="' + ( wwwOptional ? 'good' : 'bad' ) + ' text-center" data-order="' + ( wwwOptional ? '1' : '0' ) + '">' + wwwOptionalcontent + '</td>' ) ;
2018-04-17 20:45:51 +02:00
// one canonical URL
2018-04-19 00:51:59 +02:00
var canonical = item . result . CANONICAL _URL . value ;
2018-06-06 23:35:07 +02:00
var canonicalContent = ( canonical ? '<span class="tt" title="Verschiedene URL-Varianten werden auf eine einzige umgeleitet">' + yes + '</span>' : '<span class="tt" title="Verschiedene URL-Varianten werden nicht auf eine einzige umgeleitet.">' + no + '</span>' ) ;
row . append ( '<td class="' + ( canonical ? 'good' : 'bad' ) + ' text-center" data-order="' + ( canonical ? '1' : '0' ) + '">' + canonicalContent + '</td>' ) ;
2018-04-17 20:45:51 +02:00
2018-04-23 09:11:50 +02:00
var responsive = item . result . RESPONSIVE . value ;
2018-06-06 23:35:07 +02:00
var responsiveContent = ( responsive ? '<span class="tt" title="Die Site funktioniert anscheinend auch auf mobilen Geräten">' + yes + '</span>' : '<span class="tt" title="Es scheint, als funktioniert die Site nicht auf mobilen Geräten.">' + no + '</span>' ) ;
row . append ( '<td class="' + ( responsive ? 'good' : 'bad' ) + ' text-center" data-order="' + ( responsive ? '1' : '0' ) + '">' + responsiveContent + '</td>' ) ;
2018-04-17 20:45:51 +02:00
// feeds
2018-04-19 00:51:59 +02:00
var feeds = item . result . FEEDS . value ;
2018-06-07 09:27:30 +02:00
var feedsContent = ( feeds ? '<span class="tt" title="Die Site verweist auf mind. einen RSS-/Atom-Feed.">' + yes + '</span>' : '<span class="tt" title="Kein Link rel=alternate auf einen RSS-/Atom-Feed gefunden.">' + no + '</span>' ) ;
2018-06-06 23:35:07 +02:00
row . append ( '<td class="' + ( feeds ? 'good' : 'bad' ) + ' text-center" data-order="' + ( feeds ? '1' : '0' ) + '">' + feedsContent + '</td>' ) ;
2018-04-17 20:45:51 +02:00
// screenshots
var screenshot = false ;
2018-04-19 00:51:59 +02:00
if ( item . details . canonical _urls . length > 0 ) {
if ( typeof screenshots [ item . details . canonical _urls [ 0 ] ] !== 'undefined' ) {
var surl = 'http://green-spider-screenshots.sendung.de/320x640/' + screenshots [ item . details . canonical _urls [ 0 ] ] ;
var lurl = 'http://green-spider-screenshots.sendung.de/1500x1500/' + screenshots [ item . details . canonical _urls [ 0 ] ] ;
2018-06-06 23:35:07 +02:00
screenshot = '<a class="screenshot tt" href="' + surl + '" target="_blank" title="Screenshot für Smartphone-Ansicht anzeigen"><i class="icon ion-md-phone-portrait"></i></a>' ;
screenshot += '<a class="screenshot tt" href="' + lurl + '" target="_blank" title="Screenshot für Desktop-Ansicht anzeigen"><i class="icon ion-md-desktop"></i></a>' ;
2018-04-17 20:45:51 +02:00
}
}
2018-06-06 23:35:07 +02:00
var noscreenshot = '<span class="tt" title="Für diese Site liegen aktuell keine Screenshots vor (führt nicht zu Punktabzug).">' + no + '</span>' ;
row . append ( '<td class="' + ( screenshot ? 'good' : 'bad' ) + ' text-center" data-order="' + ( screenshot ? '1' : '0' ) + '">' + ( screenshot ? screenshot : noscreenshot ) + '</td>' ) ;
2018-04-17 20:45:51 +02:00
2018-04-20 23:36:31 +02:00
// cms
row . append ( '<td class="text text-center">' + ( item . details . cms ? item . details . cms : '' ) + '</td>' ) ;
2018-04-17 20:45:51 +02:00
tbody . append ( row ) ;
2018-04-05 18:11:40 +02:00
} ) ;
2018-06-06 23:35:07 +02:00
// enable data table functions (sorting)
2018-04-17 20:45:51 +02:00
table = $ ( 'table.table' ) . DataTable ( {
order : [ [ 0 , "asc" ] ] ,
paging : false ,
pageLength : 10000 ,
language : {
"search" : "Suche"
}
} ) ;
2018-04-09 23:25:36 +02:00
2018-06-06 23:35:07 +02:00
// activate tooltips
$ ( '.tt' ) . tooltipster ( {
2018-06-07 17:37:58 +02:00
animationDuration : 100 ,
theme : 'tooltipster-borderless'
2018-06-06 23:35:07 +02:00
} ) ;
2018-04-05 18:11:40 +02:00
} ) ;
2018-04-17 20:45:51 +02:00
2018-04-05 18:11:40 +02:00
} ) ;
} ) ;