From 3c2cc38ac88b0e447187567a620934d25065b202 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 16 Apr 2014 15:05:31 +0200 Subject: tg14 stream config --- web/streamlib/stream/config.pm | 123 +++++++++++------------------------------ 1 file changed, 31 insertions(+), 92 deletions(-) (limited to 'web') diff --git a/web/streamlib/stream/config.pm b/web/streamlib/stream/config.pm index 7c488b6..bfe998a 100644 --- a/web/streamlib/stream/config.pm +++ b/web/streamlib/stream/config.pm @@ -3,12 +3,12 @@ use strict; use warnings; use NetAddr::IP; -our $v4net = NetAddr::IP->new("151.216.0.0/17"); +our $v4net = NetAddr::IP->new("151.216.128.0/17"); our $v6net = NetAddr::IP->new("2a02:ed02::/32"); our $multicast = "udp://\@233.191.12.1"; -our $vlc_base_host = "http://stream.tg13.gathering.org"; -our $tg = 13; -our $tg_full = 2013; +our $vlc_base_host = "http://cubemap.tg14.gathering.org"; +our $tg = 14; +our $tg_full = 2014; # priority = sorting order in streaming list @@ -18,27 +18,18 @@ our $tg_full = 2013; # source , video source pew pew # title , title doh \:D/ our %streams = ( -# Deaktivert 31.mars kl 05.30 iush -# 'event-ios' => { -# 'type' => 'event', -# 'quality' => 'hd', -# 'priority' => 26, -# 'external' => 1, -# 'url' => "$vlc_base_host/ios/event.m3u8", -# 'source' => 'Event', -# 'title' => 'Event HD Stream for iOS devices (Apple)', -# }, -# 'event-hd' => { -# 'type' => 'event', -# 'quality' => 'hd', -# 'priority' => 20, -# 'port' => 13, -# 'interlaced' => 0, -# 'has_multicast' => 1, -# 'multicast_ip' => 'udp://@[ff7e:a40:2a02:ed02:ffff::13]', -# 'source' => 'Event', -# 'title' => 'Event HD (720p50)' -# }, + 'event-hd' => { + 'type' => 'event', + 'quality' => 'hd', + 'priority' => 20, + 'port' => 80, + 'url' => '/event.ts', + 'interlaced' => 0, + 'has_multicast' => 0, + 'multicast_ip' => 'udp://@[ff7e:a40:2a02:ed02:ffff::15]:2015', + 'source' => 'Event', + 'title' => 'Event HD (720p50)' + }, # 'event-sd' => { # 'type' => 'event', # 'quality' => 'sd', @@ -65,95 +56,43 @@ our %streams = ( 'south-raw' => { 'type' => 'camera', - 'location' => 3, 'quality' => 'hd', 'priority' => 40, - 'port' => 16, - 'interlaced' => 1, + 'url' => "/southcam.ts", + 'port' => 80, + 'interlaced' => 0, 'has_multicast' => 0, # 'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::16]", 'source' => 'Tech', - 'title' => 'Webcam South (HD) (1080i25)', - }, - - 'south-transcode' => { - 'type' => 'camera', - 'location' => 3, - 'quality' => 'hd', - 'priority' => 50, - 'port' => 17, - 'interlaced' => 0, - 'has_multicast' => 1, - 'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::17]", - 'source' => 'Tech', - 'title' => 'Webcam South (HD) (720p50)', + 'title' => 'Webcam South (HD) (1920x1080 H.264) 10mbps', }, - - 'fuglecam' => { + 'roofcam-raw' => { 'type' => 'camera', - 'location' => 2, 'quality' => 'hd', 'priority' => 118, - 'port' => 15, + 'url' => "/roofcam.ts", + 'port' => 80, 'interlaced' => 1, - 'has_multicast' => 1, - 'multicast_ip' => "udp://\@[ff7e:a40:2a02:ed02:ffff::15]", + 'has_multicast' => 0, + #'multicast_ip' => "udp://\@[ff7e:a40:2a02:ed02:ffff::15]", 'source' => 'Tech', - 'title' => 'Webcam Fugleberget (HD) (1080i50)', - }, - - - - 'fuglecam-flv-sd' => { - 'location' => 2, - 'type' => 'camera', - 'quality' => 'sd', - 'priority' => 121, - 'interlaced' => 1, - 'external' => 1, - 'url' => 'http://www.gathering.org/tg13/no/webcam/', - 'title' => 'Webcam Fugleberget (SD) (gathering.org flash player)', + 'title' => 'Webcam Roof (HD) (1536x1536 H.264) 8mbps', }, - 'noc-fisheye' => { + 'noccam-raw' => { 'type' => 'camera', - 'location' => 1, 'quality' => 'hd', 'priority' => 130, - 'port' => 18, - 'has_multicast' => 1, + 'url' => '/noccam.ts', + 'port' => 80, + 'has_multicast' => 0, 'interlaced' => 0, 'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::18]:2018", 'source' => "Tech", - 'title' => "Webcam NOC Fisheye (HD)" - }, - 'noc-fisheye-transcode' => { - 'type' => 'camera', - 'location' => 1, - 'quality' => 'hd', - 'priority' => 131, - 'port' => 19, - 'has_multicast' => 1, - 'interlaced' => 0, - 'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::19]:2019", - 'source' => "Tech", - 'title' => "Webcam NOC Fisheye (HD transcoded)" - }, - - - 'south-still' => { - 'location' => 3, - 'type' => 'camera', - 'quality' => 'hd', - 'priority' => 110, - 'external' => 1, - 'url' => 'http://stillcam.tg13.gathering.org/', - 'title' => 'Webcam South (Image)', - 'source' => 'Tech' + 'title' => "Webcam NOC (HD) (1280x720 H.264) 5mbps" }, - ); -- cgit v1.2.3 From ec5c01f47fd2c2389450fc0e5407876f6758fba7 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 16 Apr 2014 15:14:20 +0200 Subject: stream apache2 vhost config --- web/etc/apache2/stream.tg13.gathering.org | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'web') diff --git a/web/etc/apache2/stream.tg13.gathering.org b/web/etc/apache2/stream.tg13.gathering.org index b184b1c..ff8a7c0 100644 --- a/web/etc/apache2/stream.tg13.gathering.org +++ b/web/etc/apache2/stream.tg13.gathering.org @@ -1,10 +1,10 @@ ServerAdmin drift@gathering.org - ServerName stream.tg13.gathering.org - ServerAlias krosus.tg13.gathering.org + ServerName stream.tg14.gathering.org + ServerAlias krosus.tg14.gathering.org - DocumentRoot /srv/stream.tg13.gathering.org - + DocumentRoot /srv/stream.tg14.gathering.org + AllowOverride None Options Indexes FollowSymLinks ExecCGI MultiViews Order allow,deny @@ -14,12 +14,12 @@ - ErrorLog /var/log/apache2/error-stream.tg13.gathering.org.log + ErrorLog /var/log/apache2/error-stream.tg14.gathering.org.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel info - CustomLog /var/log/apache2/access-stream.tg13.gathering.org.log combined + CustomLog /var/log/apache2/access-stream.tg14.gathering.org.log combined ServerSignature On -- cgit v1.2.3 From 8c37af6dd3c23762540a312b90030e922938b324 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 16 Apr 2014 15:19:20 +0200 Subject: renaming from stream.tg13.gathering.org to stream.gathering.org. Easy symlink pewpew --- web/stream.gathering.org/fix_count.pl | 31 + web/stream.gathering.org/img/cam-map.png | Bin 0 -> 113375 bytes web/stream.gathering.org/img/icon_1.png | Bin 0 -> 3142 bytes web/stream.gathering.org/img/icon_2.png | Bin 0 -> 3336 bytes web/stream.gathering.org/img/icon_3.png | Bin 0 -> 3385 bytes web/stream.gathering.org/img/icon_camera.png | Bin 0 -> 3786 bytes web/stream.gathering.org/img/icon_event.png | Bin 0 -> 3463 bytes web/stream.gathering.org/img/icon_hd.png | Bin 0 -> 3412 bytes web/stream.gathering.org/img/icon_sd.png | Bin 0 -> 3731 bytes web/stream.gathering.org/index-bak.pl | 67 + web/stream.gathering.org/index-bak.tmpl | 31 + web/stream.gathering.org/index.pl | 72 + web/stream.gathering.org/index.tmpl | 31 + web/stream.gathering.org/ios/PLACEHOLDER | 0 web/stream.gathering.org/ios/event.m3u8 | 16 + web/stream.gathering.org/ios/stream.m3u8 | 8 + web/stream.gathering.org/singularity.png | Bin 0 -> 19719 bytes web/stream.gathering.org/stream.pl | 87 + web/stream.gathering.org/streamstats-fast.pl | 15 + web/stream.gathering.org/streamstats.cpp | 217 +++ web/stream.gathering.org/streamstats.html | 81 + web/stream.gathering.org/streamstats.pl | 116 ++ web/stream.gathering.org/style.css | 1960 ++++++++++++++++++++ web/stream.gathering.org/superawesomeness.css | 24 + web/stream.gathering.org/test.pl | 70 + web/stream.gathering.org/test.tmpl | 31 + web/stream.tg13.gathering.org/fix_count.pl | 31 - web/stream.tg13.gathering.org/img/cam-map.png | Bin 113375 -> 0 bytes web/stream.tg13.gathering.org/img/icon_1.png | Bin 3142 -> 0 bytes web/stream.tg13.gathering.org/img/icon_2.png | Bin 3336 -> 0 bytes web/stream.tg13.gathering.org/img/icon_3.png | Bin 3385 -> 0 bytes web/stream.tg13.gathering.org/img/icon_camera.png | Bin 3786 -> 0 bytes web/stream.tg13.gathering.org/img/icon_event.png | Bin 3463 -> 0 bytes web/stream.tg13.gathering.org/img/icon_hd.png | Bin 3412 -> 0 bytes web/stream.tg13.gathering.org/img/icon_sd.png | Bin 3731 -> 0 bytes web/stream.tg13.gathering.org/index-bak.pl | 67 - web/stream.tg13.gathering.org/index-bak.tmpl | 31 - web/stream.tg13.gathering.org/index.pl | 72 - web/stream.tg13.gathering.org/index.tmpl | 35 - web/stream.tg13.gathering.org/ios/PLACEHOLDER | 0 web/stream.tg13.gathering.org/ios/event.m3u8 | 16 - web/stream.tg13.gathering.org/ios/stream.m3u8 | 8 - web/stream.tg13.gathering.org/singularity.css | 1960 -------------------- web/stream.tg13.gathering.org/singularity.png | Bin 19719 -> 0 bytes web/stream.tg13.gathering.org/stream.pl | 87 - web/stream.tg13.gathering.org/streamstats-fast.pl | 15 - web/stream.tg13.gathering.org/streamstats.cpp | 217 --- web/stream.tg13.gathering.org/streamstats.html | 81 - web/stream.tg13.gathering.org/streamstats.pl | 116 -- web/stream.tg13.gathering.org/superawesomeness.css | 24 - web/stream.tg13.gathering.org/test.pl | 70 - web/stream.tg13.gathering.org/test.tmpl | 31 - 52 files changed, 2857 insertions(+), 2861 deletions(-) create mode 100755 web/stream.gathering.org/fix_count.pl create mode 100644 web/stream.gathering.org/img/cam-map.png create mode 100644 web/stream.gathering.org/img/icon_1.png create mode 100644 web/stream.gathering.org/img/icon_2.png create mode 100644 web/stream.gathering.org/img/icon_3.png create mode 100644 web/stream.gathering.org/img/icon_camera.png create mode 100644 web/stream.gathering.org/img/icon_event.png create mode 100644 web/stream.gathering.org/img/icon_hd.png create mode 100644 web/stream.gathering.org/img/icon_sd.png create mode 100755 web/stream.gathering.org/index-bak.pl create mode 100644 web/stream.gathering.org/index-bak.tmpl create mode 100755 web/stream.gathering.org/index.pl create mode 100644 web/stream.gathering.org/index.tmpl create mode 100644 web/stream.gathering.org/ios/PLACEHOLDER create mode 100644 web/stream.gathering.org/ios/event.m3u8 create mode 100644 web/stream.gathering.org/ios/stream.m3u8 create mode 100644 web/stream.gathering.org/singularity.png create mode 100755 web/stream.gathering.org/stream.pl create mode 100755 web/stream.gathering.org/streamstats-fast.pl create mode 100644 web/stream.gathering.org/streamstats.cpp create mode 100644 web/stream.gathering.org/streamstats.html create mode 100755 web/stream.gathering.org/streamstats.pl create mode 100644 web/stream.gathering.org/style.css create mode 100644 web/stream.gathering.org/superawesomeness.css create mode 100755 web/stream.gathering.org/test.pl create mode 100644 web/stream.gathering.org/test.tmpl delete mode 100755 web/stream.tg13.gathering.org/fix_count.pl delete mode 100644 web/stream.tg13.gathering.org/img/cam-map.png delete mode 100644 web/stream.tg13.gathering.org/img/icon_1.png delete mode 100644 web/stream.tg13.gathering.org/img/icon_2.png delete mode 100644 web/stream.tg13.gathering.org/img/icon_3.png delete mode 100644 web/stream.tg13.gathering.org/img/icon_camera.png delete mode 100644 web/stream.tg13.gathering.org/img/icon_event.png delete mode 100644 web/stream.tg13.gathering.org/img/icon_hd.png delete mode 100644 web/stream.tg13.gathering.org/img/icon_sd.png delete mode 100755 web/stream.tg13.gathering.org/index-bak.pl delete mode 100644 web/stream.tg13.gathering.org/index-bak.tmpl delete mode 100755 web/stream.tg13.gathering.org/index.pl delete mode 100644 web/stream.tg13.gathering.org/index.tmpl delete mode 100644 web/stream.tg13.gathering.org/ios/PLACEHOLDER delete mode 100644 web/stream.tg13.gathering.org/ios/event.m3u8 delete mode 100644 web/stream.tg13.gathering.org/ios/stream.m3u8 delete mode 100644 web/stream.tg13.gathering.org/singularity.css delete mode 100644 web/stream.tg13.gathering.org/singularity.png delete mode 100755 web/stream.tg13.gathering.org/stream.pl delete mode 100755 web/stream.tg13.gathering.org/streamstats-fast.pl delete mode 100644 web/stream.tg13.gathering.org/streamstats.cpp delete mode 100644 web/stream.tg13.gathering.org/streamstats.html delete mode 100755 web/stream.tg13.gathering.org/streamstats.pl delete mode 100644 web/stream.tg13.gathering.org/superawesomeness.css delete mode 100755 web/stream.tg13.gathering.org/test.pl delete mode 100644 web/stream.tg13.gathering.org/test.tmpl (limited to 'web') diff --git a/web/stream.gathering.org/fix_count.pl b/web/stream.gathering.org/fix_count.pl new file mode 100755 index 0000000..aaaf42e --- /dev/null +++ b/web/stream.gathering.org/fix_count.pl @@ -0,0 +1,31 @@ +#! /usr/bin/perl + +my $lines = {}; + +open LOG, "<", "/home/techserver/count_datacube.log" + or die "count_datacube.log: $!"; + +while () { + chomp; + my ($date, $port, $proto, $audience, $count) = split /\s+/; + my $key = $port . ' ' . $proto . ' ' . $audience; + $lines->{$date}{$key} = $count; +} + +close LOG; + +my $last_date = undef; +for my $date (sort keys %$lines) { + for my $key (keys %{$lines->{$date}}) { + if (defined($last_date) && !exists($lines->{$last_date}{$key})) { + $lines->{$last_date}{$key} = $lines->{$date}{$key}; + } + } + $last_date = $date; +} + +for my $date (sort keys %$lines) { + for my $key (sort keys %{$lines->{$date}}) { + print "$date $key " . $lines->{$date}{$key} . "\n"; + } +} diff --git a/web/stream.gathering.org/img/cam-map.png b/web/stream.gathering.org/img/cam-map.png new file mode 100644 index 0000000..759641a Binary files /dev/null and b/web/stream.gathering.org/img/cam-map.png differ diff --git a/web/stream.gathering.org/img/icon_1.png b/web/stream.gathering.org/img/icon_1.png new file mode 100644 index 0000000..6d6e67e Binary files /dev/null and b/web/stream.gathering.org/img/icon_1.png differ diff --git a/web/stream.gathering.org/img/icon_2.png b/web/stream.gathering.org/img/icon_2.png new file mode 100644 index 0000000..599d5f6 Binary files /dev/null and b/web/stream.gathering.org/img/icon_2.png differ diff --git a/web/stream.gathering.org/img/icon_3.png b/web/stream.gathering.org/img/icon_3.png new file mode 100644 index 0000000..4d1de76 Binary files /dev/null and b/web/stream.gathering.org/img/icon_3.png differ diff --git a/web/stream.gathering.org/img/icon_camera.png b/web/stream.gathering.org/img/icon_camera.png new file mode 100644 index 0000000..e1bf2c3 Binary files /dev/null and b/web/stream.gathering.org/img/icon_camera.png differ diff --git a/web/stream.gathering.org/img/icon_event.png b/web/stream.gathering.org/img/icon_event.png new file mode 100644 index 0000000..9ce6df4 Binary files /dev/null and b/web/stream.gathering.org/img/icon_event.png differ diff --git a/web/stream.gathering.org/img/icon_hd.png b/web/stream.gathering.org/img/icon_hd.png new file mode 100644 index 0000000..d9086bc Binary files /dev/null and b/web/stream.gathering.org/img/icon_hd.png differ diff --git a/web/stream.gathering.org/img/icon_sd.png b/web/stream.gathering.org/img/icon_sd.png new file mode 100644 index 0000000..3bddbe9 Binary files /dev/null and b/web/stream.gathering.org/img/icon_sd.png differ diff --git a/web/stream.gathering.org/index-bak.pl b/web/stream.gathering.org/index-bak.pl new file mode 100755 index 0000000..3e31107 --- /dev/null +++ b/web/stream.gathering.org/index-bak.pl @@ -0,0 +1,67 @@ +#!/usr/bin/perl -I /srv/streamlib +use warnings; +use strict; +use CGI; +use Geo::IP; +use NetAddr::IP; +use Net::IP; +# apt-get install libnet-ip-perl libnetaddr-ip-perl +use HTML::Template; +use stream; +use stream::config; + +my $client = CGI->new; + +my $v4net = $stream::config::v4net; +my $v6net = $stream::config::v6net; +my $tg = $stream::config::tg; +my $tg_full = $stream::config::tg_full; +my %streams = %stream::config::streams; + +my $force_unicast = $client->param('forceunicast'); + +my $location = undef; + +print $client->header(); + +my $clip = $client->remote_addr(); +my $template = HTML::Template->new(filename => 'index.tmpl'); +my $is_local = &is_ip_local($clip, $v4net, $v6net); + +my @streams = &html_local_test(); +$template->param(TG => $tg); +$template->param(TG_FULL => $tg_full); +$template->param(STREAMS => \@streams); +print $template->output(); + + +sub html_local_test() { + my @s = (); + foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { + my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; + my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; + $multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); + + if ($streams{$name}->{external}) { + $title_link = $streams{$name}->{url}; + } else { + $title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); + } + my %hash = ( + 'title_link' => $title_link, + 'title' => $streams{$name}->{title}, + 'source' => $streams{$name}->{source}, + 'delivery' => $multicast_link + ); + if ($multicast_link eq "multicast") { + $hash{'is_multicast'} .= 1; + my $unicast_link = $title_link; + $unicast_link=~s/multicast/unicast/g; + $hash{'unicast_link'} .= $unicast_link; + } + $hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); + push(@s, \%hash); + + } + return @s; +} diff --git a/web/stream.gathering.org/index-bak.tmpl b/web/stream.gathering.org/index-bak.tmpl new file mode 100644 index 0000000..c0aa95d --- /dev/null +++ b/web/stream.gathering.org/index-bak.tmpl @@ -0,0 +1,31 @@ + + + The Gathering <TMPL_VAR NAME=TG_FULL> + + + + +
+
+

The Gathering

+ +
+
+

Problems with the non game streams? The easiest way to get hold of us is on IRC (EFNet); + one of ViD, Rockj and Sesse should be available if there's too much traffic + on #tg to be heard.

+

.gathering.org">http://stream.tg.gathering.org

+ +
+ + + + diff --git a/web/stream.gathering.org/index.pl b/web/stream.gathering.org/index.pl new file mode 100755 index 0000000..e5f103c --- /dev/null +++ b/web/stream.gathering.org/index.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl -I /srv/streamlib +use warnings; +use strict; +use CGI; +use Geo::IP; +use NetAddr::IP; +use Net::IP; +# apt-get install libnet-ip-perl libnetaddr-ip-perl +use HTML::Template; +use stream; +use stream::config; + +my $client = CGI->new; + +my $v4net = $stream::config::v4net; +my $v6net = $stream::config::v6net; +my $tg = $stream::config::tg; +my $tg_full = $stream::config::tg_full; +my %streams = %stream::config::streams; + +my $force_unicast = $client->param('forceunicast'); +my $no_header = $client->param('noheader'); + +my $location = undef; + +print $client->header(); + +my $clip = $client->remote_addr(); +my $template = HTML::Template->new(filename => 'index.tmpl'); +my $is_local = &is_ip_local($clip, $v4net, $v6net); + +my @streams = &html_local_test(); +$template->param(TG => $tg); +$template->param(TG_FULL => $tg_full); +$template->param(STREAMS => \@streams); +$template->param(NOHEADER => $no_header); +print $template->output(); + + +sub html_local_test() { + my @s = (); + foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { + my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; + my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; + $multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); + + if ($streams{$name}->{external}) { + $title_link = $streams{$name}->{url}; + } else { + $title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); + } + my %hash = ( + 'title_link' => $title_link, + 'title' => $streams{$name}->{title}, + 'source' => $streams{$name}->{source}, + 'quality' => $streams{$name}->{quality}, + 'location' => $streams{$name}->{location}, + 'type' => $streams{$name}->{type}, + 'delivery' => $multicast_link, + ); + if ($multicast_link eq "multicast") { + $hash{'is_multicast'} .= 1; + my $unicast_link = $title_link; + $unicast_link=~s/multicast/unicast/g; + $hash{'unicast_link'} .= $unicast_link; + } + $hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); + push(@s, \%hash); + + } + return @s; +} diff --git a/web/stream.gathering.org/index.tmpl b/web/stream.gathering.org/index.tmpl new file mode 100644 index 0000000..853577b --- /dev/null +++ b/web/stream.gathering.org/index.tmpl @@ -0,0 +1,31 @@ + + + The Gathering <TMPL_VAR NAME=TG_FULL> Streams + + + +
+ +

The Gathering Streams

+
+ + + + +
+ +

Problems with the non game streams? The easiest way to get hold of us is on IRC (EFNet); one of ViD, Rockj and Sesse should be available if there's too much traffic on #tg to be heard.

+

.gathering.org">http://stream.tg.gathering.org

+ + + + + diff --git a/web/stream.gathering.org/ios/PLACEHOLDER b/web/stream.gathering.org/ios/PLACEHOLDER new file mode 100644 index 0000000..e69de29 diff --git a/web/stream.gathering.org/ios/event.m3u8 b/web/stream.gathering.org/ios/event.m3u8 new file mode 100644 index 0000000..11152d3 --- /dev/null +++ b/web/stream.gathering.org/ios/event.m3u8 @@ -0,0 +1,16 @@ +#EXTM3U +#EXT-X-TARGETDURATION:5 +#EXT-X-VERSION:3 +#EXT-X-ALLOW-CACHE:NO +#EXT-X-MEDIA-SEQUENCE:27432 +#EXTINF:4.97, +http://stream.tg13.gathering.org/ios/event-00027432.ts +#EXTINF:4.04, +http://stream.tg13.gathering.org/ios/event-00027433.ts +#EXTINF:3.99, +http://stream.tg13.gathering.org/ios/event-00027434.ts +#EXTINF:3.97, +http://stream.tg13.gathering.org/ios/event-00027435.ts +#EXTINF:3.74, +http://stream.tg13.gathering.org/ios/event-00027436.ts +#EXT-X-ENDLIST diff --git a/web/stream.gathering.org/ios/stream.m3u8 b/web/stream.gathering.org/ios/stream.m3u8 new file mode 100644 index 0000000..d3d46a6 --- /dev/null +++ b/web/stream.gathering.org/ios/stream.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-TARGETDURATION:5 +#EXT-X-VERSION:3 +#EXT-X-ALLOW-CACHE:NO +#EXT-X-MEDIA-SEQUENCE:1 +#EXTINF:3.84, +http://stream.tg13.gathering.org/ios/stream-00000001.ts +#EXT-X-ENDLIST diff --git a/web/stream.gathering.org/singularity.png b/web/stream.gathering.org/singularity.png new file mode 100644 index 0000000..3a13cdf Binary files /dev/null and b/web/stream.gathering.org/singularity.png differ diff --git a/web/stream.gathering.org/stream.pl b/web/stream.gathering.org/stream.pl new file mode 100755 index 0000000..9415389 --- /dev/null +++ b/web/stream.gathering.org/stream.pl @@ -0,0 +1,87 @@ +#!/usr/bin/perl -I /srv/streamlib + +use warnings; +use strict; + +use stream; +use stream::config; +use CGI; +my $client = CGI->new; + +my $stream = $client->param('stream'); +my $interlaced = $client->param('interlaced'); +my $delivery = $client->param('delivery'); + +my $v4net = $stream::config::v4net; +my $v6net = $stream::config::v6net; +my $multicast_ip = $stream::config::multicast; +my $tg = $stream::config::tg; +my $base_url = $stream::config::vlc_base_host; +my %streams = %stream::config::streams; + + + +#default +if (not defined $delivery) { + $delivery = "multicast"; +} + +if((not defined $stream) or (not defined $delivery)) { + print $client->header(); + die "No stream and/or delivery method, robots unhappy :/\n"; +} + +my $url = ""; +my $port_del = ""; +my $port_str = ""; +my $extinf = ""; +my $url_path = ""; + +my $clip = $client->remote_addr(); + +if (exists($streams{$stream})) { + my $is_multicast = 0; + # add force is_ip_local in check? + $is_multicast = 1 if (exists($streams{$stream}->{has_multicast}) && $delivery eq "multicast"); + + if ($is_multicast) { + $port_del = 20; + $extinf .= "Multicasted"; + $url = $streams{$stream}->{multicast_ip}; + } else { + #$port_del = 80; + $extinf .= "Unicasted"; + $url = $base_url; + $url_path = $streams{$stream}->{url}; + } + + $port_del = $streams{$stream}->{preport} if (defined($streams{$stream}->{preport})); + $port_str = $streams{$stream}->{port}; + $extinf .= " $streams{$stream}->{title}"; + +} else { + &error("No stream and/or delivery method, robots unhappy :-/"); +} + +#print out new file +print $client->header(-type => "application/vlc", + "-Content-disposition" => "attachment; filename=tg-".$delivery."-".$stream.".vlc" +); + +print "#EXTM3U\n"; +print "#EXTINF:-1,TG$tg $extinf\n"; +if(defined $interlaced && $interlaced == 1) { + print "#EXTVLCOPT:deinterlace=1\n"; + print "#EXTVLCOPT:deinterlace-mode=linear\n"; +} +if ($port_str == 80) { + print "$url$url_path\n"; +} else { + print "$url:$port_del$port_str$url_path\n"; +} + +sub error($) { + my $message = shift; + print $client->header(); + die($message."\n"); +} diff --git a/web/stream.gathering.org/streamstats-fast.pl b/web/stream.gathering.org/streamstats-fast.pl new file mode 100755 index 0000000..f4caa24 --- /dev/null +++ b/web/stream.gathering.org/streamstats-fast.pl @@ -0,0 +1,15 @@ +#! /usr/bin/perl +use strict; +use warnings; +use POSIX; +use CGI qw(fatalsToBrowser); + +my $port_spec = CGI::param('port'); +my $proto_spec = CGI::param('proto'); +my $audience_spec = CGI::param('audience'); + +print CGI::header(-type=>'image/png'); + +# I'm sure this is really safe +system("/srv/stream.tg13.gathering.org/fix_count.pl | /srv/stream.tg13.gathering.org/streamstats - $port_spec $proto_spec $audience_spec"); +#system("/srv/stream.tg13.gathering.org/streamstats", "/home/techserver/cleaned_datacube.log", $port_spec, $proto_spec, $audience_spec); diff --git a/web/stream.gathering.org/streamstats.cpp b/web/stream.gathering.org/streamstats.cpp new file mode 100644 index 0000000..e81419f --- /dev/null +++ b/web/stream.gathering.org/streamstats.cpp @@ -0,0 +1,217 @@ +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +map port_desc = { + { "3013", "main (3013)" }, + { "3014", "main-sd (3014)" }, + { "3015", "webcam (3015)" }, + { "3016", "webcam-south (3016)" }, + { "3017", "webcam-south-transcode (3017)" }, + { "3018", "webcam-fisheye (3018)" }, + { "5013", "main-transcode (5013)" }, + { "5015", "webcam-transcode (5015)" }, +}; + +struct Spec { + set incl; + bool compare; +}; + +Spec parse_spec(const string &spec) +{ + Spec ret; + ret.compare = false; + + if (spec == "compare") { + ret.compare = true; + return ret; + } + if (spec == "dontcare") { + return ret; + } + + const char *ptr = spec.c_str(); + if (strncmp(ptr, "compare:", 8) == 0) { + ptr += 8; + ret.compare = true; + } + + for ( ;; ) { + const char *end = strchr(ptr, ','); + if (end == NULL) { + ret.incl.insert(ptr); + break; + } else { + ret.incl.insert(string(ptr, end)); + ptr = end + 1; + } + } + + return ret; +} + +bool filter(const string &entry, const Spec &spec) +{ + if (spec.incl.empty()) { + return false; + } + return spec.incl.count(entry) == 0; +} + +vector get_stream_id(const string& port, const string &proto, const string &audience, + const Spec& port_spec, const Spec &proto_spec, const Spec &audience_spec) +{ + vector keys; + if (port_spec.compare) { + if (port_desc.count(port)) { + keys.push_back(port_desc[port]); + } else { + char buf[256]; + sprintf(buf, "___%s___", port.c_str()); + keys.push_back(buf); + } + } + if (proto_spec.compare) { + keys.push_back(proto); + } + if (audience_spec.compare) { + keys.push_back(audience); + } + return keys; +} + +string get_stream_desc(const vector &stream_id) +{ + string ret; + for (int i = 0; i < stream_id.size(); ++i) { + if (i != 0) { + ret += ","; + } + ret += stream_id[i]; + } + return ret; +} + +int main(int argc, char **argv) +{ + Spec port_spec = parse_spec(argv[2]); + Spec proto_spec = parse_spec(argv[3]); + Spec audience_spec = parse_spec(argv[4]); + + map, int> > lines; + map, int> stream_ids; + vector stream_descs; + + // Parse the log. + FILE *fp; + if (strcmp(argv[1], "-") == 0) { + fp = stdin; + } else { + fp = fopen(argv[1], "r"); + } + while (!feof(fp)) { + char buf[1024]; + fgets(buf, 1024, fp); + + if (buf == NULL) { + break; + } + char *ptr = strchr(buf, '\n'); + if (ptr != NULL) { + *ptr = 0; + } + + char *date = strtok(buf, " "); + char *port = strtok(NULL, " "); + char *proto = strtok(NULL, " "); + char *audience = strtok(NULL, " "); + char *count = strtok(NULL, " "); + + if (date == NULL || port == NULL || proto == NULL || audience == NULL || count == NULL) { + continue; + } + + if (filter(port, port_spec)) { + continue; + } + if (filter(proto, proto_spec)) { + continue; + } + if (filter(audience, audience_spec)) { + continue; + } + + vector stream_id = get_stream_id(port, proto, audience, port_spec, proto_spec, audience_spec); + if (stream_ids.count(stream_id) == 0) { + int stream_id_num = stream_ids.size(); + stream_ids.insert(make_pair(stream_id, stream_id_num)); + stream_descs.push_back(get_stream_desc(stream_id)); + } + lines[date][stream_id] += atoi(count); + } + fclose(fp); + + // Output. + char *data_file = tempnam(NULL, "data"); + FILE *datafp = fopen(data_file, "w"); + if (datafp == NULL) { + perror(data_file); + exit(1); + } + + vector cols(stream_ids.size()); + for (auto& it : lines) { + const string& date = it.first; + + for (const auto& it2 : stream_ids) { + const vector& stream_id = it2.first; + int stream_id_num = it2.second; + + cols[stream_id_num] = it.second[stream_id]; // note: might zero-initialize + } + fprintf(datafp, "%s", date.c_str()); + for (int i = 0; i < cols.size(); ++i) { + fprintf(datafp, " %d", cols[i]); + } + fprintf(datafp, "\n"); + } + fclose(datafp); + + // Make gnuplot script. + char *plot_file = tempnam(NULL, "plot"); + FILE *plotfp = fopen(plot_file, "w"); + if (plotfp == NULL) { + perror(plot_file); + exit(1); + } + + fprintf(plotfp, "set terminal png\n"); + fprintf(plotfp, "set xdata time\n"); + fprintf(plotfp, "set timefmt \"20%%y-%%m-%%d-%%H:%%M:%%S\"\n"); + fprintf(plotfp, "set xtics axis \"2000-00-00-01:00:00\"\n"); + fprintf(plotfp, "set format x \"%%H\"\n"); + + fprintf(plotfp, "plot"); + for (int i = 0; i < cols.size(); ++i) { + if (i == 0) { + fprintf(plotfp, " "); + } else { + fprintf(plotfp, ","); + } + fprintf(plotfp, "\"%s\" using 1:%d title \"%s\" with lines", data_file, i + 2, stream_descs[i].c_str()); + } + fprintf(plotfp, "\n"); + + fclose(plotfp); + + char buf[1024]; + sprintf(buf, "gnuplot < %s", plot_file); + system(buf); +} diff --git a/web/stream.gathering.org/streamstats.html b/web/stream.gathering.org/streamstats.html new file mode 100644 index 0000000..5d6adc7 --- /dev/null +++ b/web/stream.gathering.org/streamstats.html @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
Ports: +
+
+
+
+
+
+
+ +
+ +
Protocol: +
+
+
+ +
Audience: +
+
+
+ +
+ +
+

+ + + diff --git a/web/stream.gathering.org/streamstats.pl b/web/stream.gathering.org/streamstats.pl new file mode 100755 index 0000000..e4c20f9 --- /dev/null +++ b/web/stream.gathering.org/streamstats.pl @@ -0,0 +1,116 @@ +#! /usr/bin/perl +use strict; +use warnings; +use POSIX; +use CGI qw(fatalsToBrowser); + +my %port_spec = prepare_spec(CGI::param('port')); +my %proto_spec = prepare_spec(CGI::param('proto')); +my %audience_spec = prepare_spec(CGI::param('audience')); + +#open LOG, "<", "/home/techserver/count_datacube.log" +open LOG, "-|", "/home/techserver/fix_count.pl" +#open LOG, "<", "/home/techserver/cleaned_datacube.log" + or die "count_datacube.log: $!"; + +our %desc = ( + 3013 => 'main (3013)', + 3014 => 'main-sd (3014)', + 3015 => 'webcam (3015)', + 3016 => 'webcam-south (3016)', + 3017 => 'webcam-south-transcode (3017)', + 3018 => 'webcam-fisheye (3018)', + 5013 => 'main-transcode (5013)', + 5015 => 'webcam-transcode (5015)', +); + +my $lines = {}; +my %streams = (); + +while () { + chomp; + my ($date, $port, $proto, $audience, $count) = split /\s+/; + next if (filter($port, $proto, $audience)); + my $stream_id = get_stream_id($port, $proto, $audience); + $streams{$stream_id} = 1; + $lines->{$date}{$stream_id} += $count; +} + +close LOG; + +print CGI::header(-type=>'image/png'); + +my $tmpfile = POSIX::tmpnam(); +open GRAPH, ">", $tmpfile + or die "$tmpfile: $!"; +for my $date (sort keys %$lines) { + my @cols = (); + for my $stream (keys %streams) { + push @cols, ($lines->{$date}{$stream} // "0"); + } + print GRAPH "$date ", join(' ', @cols), "\n"; +} +close GRAPH; + +my $tmpfile2 = POSIX::tmpnam(); +open GNUPLOT, ">", $tmpfile2 + or die "$tmpfile2: $!"; +print GNUPLOT "set terminal png\n"; +print GNUPLOT "set xdata time\n"; +print GNUPLOT "set timefmt \"20%y-%m-%d-%H:%M:%S\"\n"; +print GNUPLOT "set xtics axis \"2000-00-00-01:00:00\"\n"; +print GNUPLOT "set format x \"%H\"\n"; + +my @plots = (); +my $idx = 2; +for my $stream (keys %streams) { + push @plots, "\"$tmpfile\" using 1:$idx title \"$stream\" with lines"; + ++$idx; +} +print GNUPLOT "plot ", join(', ', @plots); + +# \"$tmpfile\" using 0:2 with lines, \"$tmpfile\" using 0:3 with lines\n"; +close GNUPLOT; + +system("gnuplot < $tmpfile2"); + +sub prepare_spec { + my $spec = shift; + return () if ($spec eq 'compare' || $spec eq 'dontcare'); + $spec =~ s/^compare://; + + my %ret = (); + for my $s (split /,/, $spec) { + $ret{$s} = 1; + } + return %ret; +} + +sub filter { + my ($port, $proto, $audience) = @_; + return 1 if (filter_list(\%port_spec, $port)); + return 1 if (filter_list(\%proto_spec, $proto)); + return 1 if (filter_list(\%audience_spec, $audience)); + return 0; +} + +sub filter_list { + my ($spec, $candidate) = @_; + return 0 if ((scalar keys %$spec) == 0); + return !exists($spec->{$candidate}); +} + +sub get_stream_id { + my ($port, $proto, $audience) = @_; + my @keys = (); + if (CGI::param('port') =~ /^compare/) { + if (exists($desc{$port})) { + push @keys, $desc{$port}; + } else { + push @keys, "___" . $port . "___"; + } + } + push @keys, $proto if (CGI::param('proto') =~ /^compare/); + push @keys, $audience if (CGI::param('audience') =~ /^compare/); + return join(',', @keys); +} diff --git a/web/stream.gathering.org/style.css b/web/stream.gathering.org/style.css new file mode 100644 index 0000000..0d21d45 --- /dev/null +++ b/web/stream.gathering.org/style.css @@ -0,0 +1,1960 @@ +•/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1.5; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* @override http://www.gathering.org/tg12/files/content/design/css/typography.css */ + +/* Generic +------------------------------------------------------ */ +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { + font-family: Arial, Sans-Serif; + font-weight: 400; +} +body { + font-size: 15px; + line-height: 20px; + color: #777; +} +/* Headings +------------------------------------------------------ */ +h1, h2, h3, h4, h5, h6 { font-weight: bold; color: #404040; } +h1 { font-size: 45px; line-height: 50px; margin-bottom: 15px; } +h2 { font-size: 25px; line-height: 31px; margin-bottom: 12px;} +h3 { font-size: 20px; line-height: 26px; } +h4 { font-size: 16px; line-height: 22px; } +h5 { font-size: 15px; line-height: 20px; } +h6 { font-size: 12px; line-height: 17px; } + +/* Text 'n stuff +------------------------------------------------------ */ +p { margin: 0 0 20px 0; } +.page p { + margin: 0 0 0.8em 0 !important; +} +blockquote { + margin: 20px; + padding: 0 0 0 40px; + color: #555; + font-style: italic; + color: #888; + position: relative; +} +blockquote p::before { + position: absolute; + top: 50px; + margin-left: -60px; + content: "\201D"; + font-size: 150px; + font-style: normal; + color: #b20f15; +} +blockquote p { + display: block; + margin-left: 40px !important; +} +blockquote small::before { + content: "\2013"; + margin: 5px; +} +blockquote small { + font-size: 13px; + margin-left: -55px; +} +strong { font-weight: bold; } + +ul { + margin: 0 0 20px 10px; + list-style-type: none; + position: relative; +} +ul.submenu ul { + margin-bottom: 0px; +} +ul li:before { + content: "\2022"; + position: absolute; + left: -17px; + width: 15px; + text-align: right; + color: #b20f15; + font-size: 13px; + line-height: 21px; +} +i, em { font-style: italic; } + +ol { + margin: 0 0 20px 15px; + list-style-type: none; + position: relative; + counter-reset: section; +} +ol > li { + counter-increment: section; +} +ol > li:before { + content: counter(section); + position: absolute; + left: -30px; + width: 23px; + text-align: right; + color: #b20f15; + font-size: 12px; + line-height: 22px; +} +dl dt { font-weight: bold; } +dd { margin: 0 0 0 20px; } + +a { color: #b20f15; text-decoration: none; } +a:hover { color: #c3027b; } +code, pre { + padding: 0 3px 2px; + font-family: Menlo, Monaco, "Courier New", monospace; + font-size: 12px; + color: #8F8F8F; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background-color: #F8F8F8; + border: 1px solid #C0C4C5; +} +code { + padding: 3px 4px; + color: #b20f15; +} +pre { + display: block; + padding: 8.5px; + margin: 0 0 9px; + line-height: 18px; + white-space: pre; + white-space: pre-wrap; + word-break: break-all; +} +table { + margin-bottom: 20px; +} +th, td { + padding: 4px 5px; +} +td, th { + border-left: 1px solid #E2E2E2; +} +tr td:first-child, tr th:first-child { + border: none; +} +tr td { + text-align: right; +} +th { + font-weight: bold; + vertical-align: bottom; +} +th, td { + min-width: 100px; +} +th p, td p { + margin: 0; +} +tbody tr:nth-child(even) td, thead tr th { + background-color: #F2F2F2; +} +hr { + margin-top: 0.5em; + margin-bottom: 0.5em; + border: 0; + color: #D5D5D5; + background-color: #D5D5D5; + height: 1px; +} +.visible-phone { + display: none; +} +.title-container h2 { + font-family: Tahoma, Geneva, sans-serif; + font-size: 26px; + margin-bottom: 5px; + line-height: normal; +} +h2.size13 { font-size: 13px; } +h2.size14 { font-size: 14px; } +h2.size15 { font-size: 15px; } +h2.size16 { font-size: 16px; } +h2.size17 { font-size: 17px; } +h2.size18 { font-size: 18px; } +h2.size19 { font-size: 19px; } +h2.size20 { font-size: 20px; } +h2.size21 { font-size: 21px; } +h2.size22 { font-size: 22px; } +h2.size23 { font-size: 23px; } +h2.size24 { font-size: 24px; } +h2.size25 { font-size: 25px; } +h2.size26 { font-size: 26px; } +h2.size27 { font-size: 27px; } +h2.size28 { font-size: 28px; } +h2.size29 { font-size: 29px; } +h2.size30 { font-size: 30px; } +h2.size31 { font-size: 31px; } +h2.size32 { font-size: 32px; } +h2.size33 { font-size: 33px; } +h2.size34 { font-size: 34px; } +h2.size35 { font-size: 35px; } +h2.size36 { font-size: 36px; } +h2.size37 { font-size: 37px; } +h2.size38 { font-size: 38px; } +h2.size39 { font-size: 39px; } +h2.size40 { font-size: 40px; } +h2.size41 { font-size: 41px; } +h2.size42 { font-size: 42px; } +h2.size43 { font-size: 43px; } +h2.size44 { font-size: 44px; } +h2.size45 { font-size: 45px; } +h2.size46 { font-size: 46px; } +h2.size47 { font-size: 47px; } +h2.size48 { font-size: 48px; } +h2.size49 { font-size: 49px; } +h2.size50 { font-size: 50px; } +h2.size51 { font-size: 51px; } +h2.size52 { font-size: 52px; } +h2.size53 { font-size: 53px; } +h2.size54 { font-size: 54px; } +h2.size55 { font-size: 55px; } +h2.size56 { font-size: 56px; } +h2.size57 { font-size: 57px; } +h2.size58 { font-size: 58px; } +h2.size59 { font-size: 59px; } +h2.size60 { font-size: 60px; } +h2.size61 { font-size: 61px; } +h2.size62 { font-size: 62px; } +h2.size63 { font-size: 63px; } +h2.size64 { font-size: 64px; } +h2.size65 { font-size: 65px; } +h2.size66 { font-size: 66px; } +h2.size67 { font-size: 67px; } +h2.size68 { font-size: 68px; } +h2.size69 { font-size: 69px; } +h2.size70 { font-size: 70px; } +h2.size71 { font-size: 71px; } +h2.size72 { font-size: 72px; } +h2.size73 { font-size: 73px; } +h2.size74 { font-size: 74px; } +h2.size75 { font-size: 75px; } +h2.size76 { font-size: 76px; } +h2.size77 { font-size: 77px; } +h2.size78 { font-size: 78px; } +h2.size79 { font-size: 79px; } +h2.size80 { font-size: 80px; } +h2.size81 { font-size: 81px; } +h2.size82 { font-size: 82px; } +h2.size83 { font-size: 83px; } +h2.size84 { font-size: 84px; } +h2.size85 { font-size: 85px; } +h2.size86 { font-size: 86px; } +h2.size87 { font-size: 87px; } +h2.size88 { font-size: 88px; } +h2.size89 { font-size: 89px; } +h2.size90 { font-size: 90px; } +h2.size91 { font-size: 91px; } +h2.size92 { font-size: 92px; } +h2.size93 { font-size: 93px; } +h2.size94 { font-size: 94px; } +h2.size95 { font-size: 95px; } +h2.size96 { font-size: 96px; } +h2.size97 { font-size: 97px; } +h2.size98 { font-size: 98px; } +h2.size99 { font-size: 99px; } +h2.size100 { font-size: 100px; } + +.cite:before { + content: "\201C"; +} +.cite:after { + content: "\201D"; +} +.cite > .cite:before { + content: "\2018"; +} +.cite > .cite:after { + content: "\2019"; +} +.bullet:before { + content: "\2022"; +} +.dash:after { + content: "\2013"; +} +.hellip:after { + content: "\2026"; +} +.cite:lang(no):before { + content: "\00AB"; +} +.cite:lang(no):after { + content: "\00BB"; +} +/* Meta thingy +------------------------------------------------------ */ +.breadcrumbs span.delimiter:before { + content: "\25BA"; + margin-right: 8px; + font-size: 8px; + position: relative; + top: -2px; + margin: 0 5px 0 3px; + color: #b20f15; +} +.breadcrumbs { + font-size: 12px; + margin-bottom: 10px; +} +.summary, +.summary p { + font-size: 16px; + line-height: 22px; + font-weight: 600 !important; + margin-bottom: 10px; +} +.metainfo { margin: 10px 0; } +.byline, .meta { + color: #888; + display: block; + font-size: 12px; + margin-bottom: 0.8em; +} +.byline span.delimiter:before { + content: "\2022"; + margin-right: 8px; + font-size: 8px; + position: relative; + top: -2px; + margin: 0 5px 0 5px; + color: #b20f15; +} +.phototext { + margin-top: 5px; + line-height: 18px; +} +.photoline { + margin-top: 5px; + font-style: italic; + font-size: 12px; + float: right; +} +.page h1 { margin-top: 10px; } +.vignette { + background-color: #6e6e6e; + margin-top: 5px; + margin-bottom: 5px; + height: 8px; + position: relative; +} +.vignette span { + line-height: 19px; +} +div.page .vignette { + margin-bottom: 10px; +} +div.page .span11 img { + max-width: 488px; + height: auto; +} +.vignette > span { + text-transform: lowercase; + color: #6e6e6e; + display: block; + margin-left: 15px; + background-color: white; + position: absolute; + top: -6px; + font-size: 12px; + padding: 0 3px 0 3px; + font-weight: 500; +} +div.news33.category-news:nth-child(3n) { + clear: left; +} +div.portal > h1 { + font-size: 20px; + padding: 0 10px; + color: white; +} +h1.portal-creative { + background-color: #ec008c; +} +h1.portal-game { + background-color: #fba51e; +} +h1.portal-entertainmentlectures { + background-color: #819700; +} +div.portal > div.row { + margin-bottom: 40px; +} +div.category-news h2 a { + color: black; +} +/* + * CSS for The Gathering 2013. + * Copyright KANDU and contributors + */ + +/* HTML & BODY +------------------------------------------------------ */ +body { + //background: url('/tg13/files/content/design/images/background.jpg') no-repeat; + background-position: top center; +} + +html, body { + height:100%; +} +body.iframe { + background-image: none; + height: auto; +} + +/* Generic styles +------------------------------------------------------ */ + +.hidden { display: none; } +menu { margin: 0; padding: 0; } + +/* Containers and rows +------------------------------------------------------ */ +.container { + width: 1320px; + margin: 0 auto; + zoom: 1; +} + +.content { + width: 840px; +} + +.container:before, +.container:after { + zoom: 1; +} +.container:before, +.container:after, +.content:before, +.content:after, +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} +.container:after, +.row:after { + clear: both; +} +.row { + margin-left: -40px; +} + +/* Main structure +------------------------------------------------------ */ +header, header > div.container { +} +header { + margin-bottom: 40px; +} +header > div.container { +} +header > div.container .inner { + float: left; + width: 830px; +} +footer a, footer, footer p, footer h4 { + color: #2d4f9e; +} +footer a:hover { + color: #fff; +} +header a { + color: #c3027b; +} +header a:hover { + color: #860050; +} +header > div.container .logo { + float: left; + width: 250px; +} +header .left, header .left > div { + float: right; +} +header .right { + margin-left: 10px; + float: right; + width: 180px; +} +header .when { + background-color: #5a0037; + padding: 10px; + color: white; + border-bottom-right-radius: 6px; + border-bottom-left-radius: 6px; + font-size: 11px; + line-height: 12px; + width: 110px; + text-align: center; +} +header .when-phone .when { + width: 120px; +} +header .when-phone { + float: right; +} +header .language { + margin-top: 10px; + line-height: 25px; + font-weight: 300; + margin-right: 10px; + padding-right: 10px; + border-right: 1px solid white; + font-size: 12px; +} +header ul.promo-menu { + padding-top: 40px; + margin: 0 0 0 15px; +} +header ul.promo-menu a { + font-weight: bold; + font-size: 13px; +} +header ul li:before { + margin-top: 2px; + content: "\25A0"; + position: absolute; + left: -15px; + width: 10px; + text-align: right; + color: #860050; + font-size: 18px; + line-height: 13px; +} +header .language a { + color: white; +} +header .language a:hover { + color: #2d4f9e; +} +footer { + margin-top: 80px; + background-color: #abdcff; + background-image: url('/tg13/files/content/design/images/footerbg.jpg'); + background-repeat: no-repeat; + background-position: center bottom; +} +footer > div.container { + padding: 0px 0px 150px 0px; +} +.footer-about { + margin-bottom: 40px; + height: 100px; + position: relative; +} +.footer-about > span { + position: absolute !important; + bottom: 0; left: 0; +} +footer > div.container > div.row { + margin-top: 80px; +} +footer ul { + margin: 0; +} +footer h4 { + margin-bottom: 20px; +} +footer div.full-span2 > iframe { + margin: 20px 0px; +} +footer a { + line-height: 25px; +} +footer ul li::before { + content: ""; +} +footer div.row { + margin-left: -20px; +} +footer div.row div.row { + margin-left: -40px; +} +.footnote p { + font-size: 13px; +} +.full-span9 { width: 1360px; } +.full-span8 { width: 1280px; } +.full-span7 { width: 1115px; } +.full-span6 { width: 950px; } +.full-span5 { width: 785px; } +.full-span4 { width: 620px; } +.full-span3 { width: 455px; } +.full-span2 { width: 290px; } +.full-span1 { width: 125px; } +.content, .sidebar { + float: left; +} +.content { + margin: 0 40px 0 40px; +} +.sidebar { + width: 200px; +} +.sidebar.sponsor img { + width: 200px; +} +.sidebar.sponsor img, +.sidebar.sponsor > div.vignette { + margin-bottom: 20px; +} +.sidebar.sponsor img { + filter: grayscale(100%); + -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); + -ms-filter: grayscale(100%); -o-filter: grayscale(100%); + filter: url(/tg13/files/content/design/css/filters.svg#grayscale); + filter: gray; + -webkit-filter: grayscale(1); +} +.sidebar.sponsor img:hover { + filter: none; + -webkit-filter: grayscale(0%); -moz-filter: grayscale(0%); + -ms-filter: grayscale(0%); -o-filter: grayscale(0%); +} +.fb-comments, .fb-comments *, .fb_iframe_widget, .fb_iframe_widget * {width: 100% !important;} +.span4 iframe { + width: 100%; +} +div.comments_header { + padding:8px; + background-color: #b1b1b1; + color: white; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + margin-bottom: 10px; + margin-top: 10px; +} +div.comments_header > div { + float: left; + margin-right: 8px; + content:url('/tg13/files/content/design/images/info.png'); +} +div.comments_header h4 { + line-height: 34px; + color: white; +} +div.comments_header p { + clear: both; + margin: 8px 0 0 0 !important; + font-size: 12px; + line-height: 15px; +} +.media-page { + margin-left: 40px; +} +.videoWrapper, #mediaspace { + position: relative; + padding-bottom: 56.25%; /* 16:9 */ + padding-top: 25px; + height: 0; + margin-bottom: 0.8em; +} +.videoWrapper iframe, #mediaspace embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.stream-icon { + float: left; + margin-right: 10px; +} +.stream-link { margin-bottom: 8px;} +#galleria { + width: 840px; +} + +/* Menu & Sidebar +------------------------------------------------------ */ + +menu { + list-style: none; +} +menu a { + color: #777; +} +menu a:hover, li[class^="menu-"] a:hover { + color: black; +} +li.menu-creative a, li.menu-creative span, li.menu-creative + menu.sub-menu a, li.menu-creative + menu.submenu span { + color: #ec008c; +} +li.menu-game a, li.menu-game span, li.menu-game + menu.sub-menu a, li.menu-game + menu.submenu span { + color: #fba51e; +} +li.menu-tickets a, li.menu-tickets span, li.menu-tickets + menu.sub-menu a, li.menu-tickets + menu.submenu span { + color: #b20f15; +} +li.menu-guide a, li.menu-guide span, li.menu-guide + menu.sub-menu a, li.menu-guide + menu.submenu span { + color: #034ea2; +} +li.menu-entertainment-lectures a, li.menu-entertainment-lectures span, li.menu-entertainment-lectures + menu.sub-menu a, li.menu-entertainment-lectures + menu.submenu span { + color: #819700; +} +menu.top-menu > li { + margin-bottom: 10px; +} + +div.top-menu-text > span { + color: #7595af; + font-size: 23px; + font-weight: bold; + display: table-row; + line-height: 23px; +} +div.top-menu-text > span.help-text { + font-weight: normal; + font-size: 14px; + display: table-row; + color: #a3a3a3; + line-height: 15px; +} +div.top-menu-text { + height: 38px; + padding: 6px 0 6px 0; + margin: 0 0 0 56px; +} +div.top-menu-icon { + width: 50px; + height: 50px; + float: left; + background-color: #bfd4e5; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} +menu.top-menu a:hover div.top-menu-text > span, +menu.top-menu a:hover div.top-menu-text > span.help-text { + color: #27448b; +} +menu.top-menu a:hover div.top-menu-icon { + background-color: #3d6db3; +} +div.top-menu-icon.icon-schedule { + background-image: url('/tg13/files/content/design/images/schedule.png'); +} +div.top-menu-icon.icon-tgtv { + background-image: url('/tg13/files/content/design/images/tgtv.png'); +} +div.top-menu-icon.icon-tng { + background-image: url('/tg13/files/content/design/images/tng.png'); +} +div.top-menu-icon.icon-forum { + background-image: url('/tg13/files/content/design/images/forum.png'); +} +div.top-menu-icon.icon-compo { + background-image: url('/tg13/files/content/design/images/compo.png'); +} +div.top-menu-icon.icon-news { + background-image: url('/tg13/files/content/design/images/news.png'); +} +menu.section-menu { + margin-top: 40px; + margin-left: 15px; +} +menu.section-menu li { + margin-bottom: 15px; +} +menu.sub-menu { + margin-bottom: 20px; + margin-left: 15px; +} +span.menu-expand { + display: block; + float: left; + margin-left: -15px; + cursor: pointer; +} + +/* Graphical Elements +------------------------------------------------------ */ +/* Language +------------------------------------------------------ */ +/* Search +------------------------------------------------------ */ +.search input { + vertical-align: top; + line-height: 1; +} +.search input[type="search"] { + -webkit-appearance: none; + box-sizing:content-box; + padding: 0; + padding-left: 3px; + margin: 0; + margin-top: 10px; + border: none; + color: #9dbfd9; + height: 25px; + width: 200px; + font-size: 12px; + font-style: italic; + border-radius: 3px; + line-height: 15px; +} +.search input:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + outline: 0; +} +input[type=search]::-webkit-search-decoration { + -webkit-appearance:none; +} +input::-webkit-input-placeholder, +isindex::-webkit-input-placeholder, +textarea::-webkit-input-placeholder, +input::-moz-placeholder, +textarea::-moz-placeholder { + font-style: italic; + color: silver; +} +/* News +------------------------------------------------------ */ +.news { position: relative; } + +.news100, .clearer, .span19 { width: 840px; } +.span18 { width: 796px; } +.span17 { width: 752px; } +.span16 { width: 708px; } +.span15 { width: 664px; } +.news75, .span14 { width: 620px; } +.span13 { width: 576px; } +.news66, .span-two-third { width: 547px; } +.span12 { width: 532px; } +.span11 { width: 488px; } +.span10 { width: 444px; } +.news50, .span9 { width: 400px; } +.span8 { width: 356px; } +.span7 { width: 312px; } +.span6 { width: 268px; } +.news33, .span-one-third { width: 253px; } +.span5 { width: 224px; } +.news25, .span4 { width: 180px; } +.span3 { width: 136px; } +.span2 { width: 92px; } +.span1 { width: 48px; } +.clearer { clear: both; margin: 0px 0px 0px 40px !important; } + +div[class^="news"] > span, +div[class^="full-span"] > span, +div[class^="span"] > span { + position: relative; + display: block; +} +div[class^="news"] p, +div[class^="full-span"] p, +div[class^="span"] p { + margin: 0; +} +.article { + float: left; + margin: 0px 0px 40px 40px; +} +.article a, +.article a:hover { + text-decoration: none; + color: #777; +} + +.news_img_100 { + width: 100%; + margin: 20px 0 10px 0; +} +img.news_img_right { + width: 50%; + float: right; + margin: 0 0 20px 40px; +} +.span2.social-news div { + margin-bottom: 10px; +} +.icon-more > a { + float: right; + font-size: 13px; + margin-right: 21px; +} +.icon-more { + position: relative; +} +.icon-more > a::after { + margin-top: 2px; + padding-left: 3px; + padding-top: 2px; + padding-bottom: 1px; + margin-left: 5px; + position: absolute; + content: "\25BA"; + color: white; + background-color: black; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + width: 13px; + height: 13px; + font-size: 11px; + line-height: 11px; +} + +/* Page +------------------------------------------------------ */ +.page { + float: left; + margin: 0px 0px 40px 40px; +} +.page .page { + margin-left: 0px; +} +.page .page.news33 { + margin-left: 40px; +} +div.news-portal-header { + width: 840px; + margin-left: 40px !important; +} +div[class^="full-span"], +.page div[class^="news"], +.page div[class^="span"]{ + float: left; + margin-left: 40px; +} +.page h3 a, +.page li a { + border: none; +} +.page-right { + float: right; + clear: right; + margin-bottom: 40px; + margin-left: 40px; +} +.page-right a { + border: none; +} +.page-sidebar { + margin-left: 40px; +} +.page-right h3, +.page-sidebar h3 { + border-bottom: solid 4px #c0c4c5; + position: relative; + margin: 0 0 10px 0; +} +.page-sidebar .meta { + text-transform: uppercase; + font-size: 10px; +} +.page-sidebar { + position: relative; +} +.related-news { + margin-bottom: 8px; +} +.img-container { + margin-bottom: -5px; +} +.img-container a { + display:block; +} +/* Article skins +------------------------------------------------------ */ +div.article.skin-important { + background-color: black; + color: white; +} +div.article.skin-important { + padding-bottom: 40px; +} +div.article.skin-important > div[class^="news"] > span.content-container, +div.article.skin-important > div[class^="news"] > span.title-container { + margin-left: 40px; + margin-right: 40px; +} +div.article.skin-important > div[class^="news"] > span.title-container { + padding-top: 40px; +} +div.article.skin-important p, +div.article.skin-important h2, +div.article.skin-important a, +div.article.skin-important a:hover, +div.article.skin-important a:visited { + color: white; +} +div.article.skin-game .vignette, +div.article.skin-creative .vignette, +div.article.skin-entertainment .vignette { + background-color: #000; + margin: 5px 0 5px 0; + height: 8px; + position: relative; +} +div.article.skin-game .vignette span, +div.article.skin-creative .vignette span, +div.article.skin-entertainment .vignette span { + text-transform: lowercase; + color: #000; + display: block; + margin-left: 15px; + background-color: white; + position: absolute; + top: -6px; + font-size: 12px; + padding: 0 3px 0 3px; + font-weight: 500; +} +div.article.skin-game .vignette, +div.vignette.category-game { + background-color: #fba51e; +} +div.article.skin-creative .vignette, +div.vignette.category-creative { + background-color: #ec008c; +} +div.article.skin-entertainment .vignette, +div.vignette.category-entertainmentlectures { + background-color: #819700; +} +div.article.skin-game .vignette span, +div.vignette.category-game span{ + color: #fba51e; +} +div.article.skin-creative .vignette span, +div.vignette.category-creative span{ + color: #ec008c; +} +div.article.skin-entertainment .vignette span, +div.vignette.category-entertainmentlectures span{ + color: #819700; +} +div.article.skin-info { + background-color: #E6E7E8; + padding-bottom: 40px; +} +div.article.skin-info > div[class^="news"] > span.content-container, +div.article.skin-info > div[class^="news"] > span.title-container { + margin-left: 40px; + margin-right: 40px; +} +div.article.skin-info > div[class^="news"] > span.title-container { + padding-top: 40px; +} +div.article.skin-important > div[class^="news"] > span.img-container, +div.article.skin-info > div[class^="news"] > span.img-container { + margin-bottom: -25px; +} + +/* Modal +------------------------------------------------------ */ +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop { + opacity: 0.8; + filter: alpha(opacity=80); +} +.modal-c { + width: 800px; +} +.modal { + position: absolute; + top: 206px; + z-index: 1050; + width: 800px; + margin: 0 auto; + background-color: #ffffff; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.modal-body { + padding: 20px; + padding-top: 10px; +} +.modal-body .modal-form { + margin-bottom: 0; +} +.right { + float: right; +} + +/* Video +----------------------------------------------------- */ + +.video h2 { + margin-top: 10px; + margin-bottom: 5px; +} +.tags span { + margin-left: 5px; + padding: 3px 4px; + border: 1px solid #DDD; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.tags span:hover { + background-color: whiteSmoke; +} +.tags span:hover a { + color: black; +} +.tags span a { + color: #07A430; + border-bottom: none !important; +} +.tags span a:hover { + border-bottom: none !important; +} +.tags { + margin-bottom: 20px; +} + +/* Buttons +----------------------------------------------------- */ +.btn.stage, +.btn.stage.active, +.btn.stage:hover, +.btn.game, +.btn.game.active, +.btn.game:hover, +.btn.creative, +.btn.creative.active, +.btn.creative:hover, +.btn.auditorium, +.btn.auditorium.active, +.btn.auditorium:hover { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + color: white; +} +.btn.stage { + background-color: #ff7800; + background-image: -moz-linear-gradient(top, #ff7800, #db4d00); + background-image: -ms-linear-gradient(top, #ff7800, #db4d00); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ff7800), to(#db4d00)); + background-image: -webkit-linear-gradient(top, #ff7800, #db4d00); + background-image: -o-linear-gradient(top, #ff7800, #db4d00); + background-image: linear-gradient(top, #ff7800, #db4d00); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff7800', endColorstr='#db4d00', GradientType=0); + border-color: #db4d00 #db4d00 #ca4900; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn.stage:hover, +.btn.stage:active, +.btn.stage.active, +.btn.stage.disabled, +.btn.stage[disabled] { + background-color: #db4d00; +} +.btn.stage:active, .btn.stage.active { + background-color: #e65a99 \9; +} +.btn.game { + background-color: #49afcd; + background-image: -moz-linear-gradient(top, #009cff, #0078c4); + background-image: -ms-linear-gradient(top, #009cff, #0078c4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#009cff), to(#0078c4)); + background-image: -webkit-linear-gradient(top, #009cff, #0078c4); + background-image: -o-linear-gradient(top, #009cff, #0078c4); + background-image: linear-gradient(top, #009cff, #0078c4); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#009cff', endColorstr='#0078c4', GradientType=0); + border-color: #0078c4 #0078c4 #0062a0; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn.game:hover, +.btn.game:active, +.btn.game.active, +.btn.game.disabled, +.btn.game[disabled] { + background-color: #0078c4; +} +.btn.game:active, .btn.game.active { + background-color: #0089e0 \9; +} +.btn.auditorium { + background-color: #49afcd; + background-image: -moz-linear-gradient(top, #f33183, #dc0c64); + background-image: -ms-linear-gradient(top, #f33183, #dc0c64); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f33183), to(#dc0c64)); + background-image: -webkit-linear-gradient(top, #f33183, #dc0c64); + background-image: -o-linear-gradient(top, #f33183, #dc0c64); + background-image: linear-gradient(top, #f33183, #dc0c64); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f33183', endColorstr='#dc0c64', GradientType=0); + border-color: #dc0c64 #dc0c64 #bb004f; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn.auditorium:hover, +.btn.auditorium:active, +.btn.auditorium.active, +.btn.auditorium.disabled, +.btn.auditorium[disabled] { + background-color: #dc0c64; +} +.btn.auditorium:active, .btn.auditorium.active { + background-color: #e81f74 \9; +} +.btn.creative { + background-color: #009997; + background-image: -moz-linear-gradient(top, #009997, #007170); + background-image: -ms-linear-gradient(top, #009997, #007170); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#009997), to(#007170)); + background-image: -webkit-linear-gradient(top, #009997, #007170); + background-image: -o-linear-gradient(top, #009997, #007170); + background-image: linear-gradient(top, #009997, #007170); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#009997', endColorstr='#007170', GradientType=0); + border-color: #007170 #007170 #004e4d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn.creative:hover, +.btn.creative:active, +.btn.creative.active, +.btn.creative.disabled, +.btn.creative[disabled] { + background-color: #007170; +} +.btn.creative:active, .btn.creative.active { + background-color: #007f7d \9; +} +.btn { + display: inline-block; + padding: 4px 10px 4px; + font-size: 13px; + line-height: 18px; + color: #333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + background-color: #FAFAFA; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(white), color-stop(25%, white), to(#E6E6E6)); + background-image: -webkit-linear-gradient(white, white 25%, #E6E6E6); + background-image: -moz-linear-gradient(top, white, white 25%, #E6E6E6); + background-image: -ms-linear-gradient(white, white 25%, #E6E6E6); + background-image: -o-linear-gradient(white, white 25%, #E6E6E6); + background-image: linear-gradient(white, white 25%, #E6E6E6); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + border: 1px solid #CCC; + border-bottom-color: #BBB; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + cursor: pointer; +} +.btn:first-child { + *margin-left: 0; +} +.btn:hover { + color: #333333; + text-decoration: none; + background-color: #e6e6e6; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -ms-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} +.btn:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn.active, .btn:active { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + background-color: #e6e6e6; + background-color: #d9d9d9 \9; + color: rgba(0, 0, 0, 0.5); + outline: 0; +} +.btn-group { + position: relative; + *zoom: 1; + *margin-left: .3em; +} +.btn-group:before, .btn-group:after { + display: table; + content: ""; +} +.btn-group:after { + clear: both; +} +.btn-group:first-child { + *margin-left: 0; +} +.btn-group + .btn-group { + margin-left: 5px; +} +.btn-group .btn { + position: relative; + float: left; + margin-left: -1px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-group .btn:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.btn-group .btn:last-child, .btn-group .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.btn-group .btn.large:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; +} +.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; +} +.btn-group .btn:hover, +.btn-group .btn:focus, +.btn-group .btn:active, +.btn-group .btn.active { + z-index: 2; +} +.page a.btn, +.page a.btn::hover { + border-bottom: 1px solid #CCC; +} + +/* Schedule +------------------------------------------------------ */ +a.stage { + color: white; + background-color: #819700; +} +a.game { + color: white; + background-color: #fba51e; +} +a.auditorium { + color: black; + background-color: #d8e600; +} +a.creative { + color: white; + background-color: #ec008c; +} +a.agora { + color: white; + background-color: #2e4f9e; +} +a.remove-filter { + color: white; + background-color: #CCC; +} +.filterLink { + padding: 3px 6px; + margin-right: 5px; + line-height: 28px; +} +.calendar .stage { + color: #819700; + font-size: 25px; +} +.calendar .game { + color: #fba51e; + font-size: 25px; +} +.calendar .auditorium { + color: #d8e600; + font-size: 25px; +} +.calendar .creative { + color: #ec008c; + font-size: 25px; +} +.calendar .agora { + color: #2e4f9e; + font-size: 25px; +} +.calendar tr td { + text-align: left; +} +.calendar td, .calendar td { + min-width: 0; +} +.calendar tbody tr:nth-child(even) td { + background-color: transparent; +} +.calendar tbody tr.odd td { + background-color: #F2F2F2; +} +/* Responsive +------------------------------------------------------ */ +@media (max-width: 1320px) { + footer { + width: 1320px; + } +} +@media (max-width: 1094px) { + div.news-portal-header { + width: 630px; + margin-left: 30px !important; + } + .news100, .clearer, .span19 { width: 630px; } + .span18 { width: 597px; } + .span17 { width: 564px; } + .span16 { width: 531px; } + .span15 { width: 498px; } + .news75, .span14 { width: 465px; } + .span13 { width: 432px; } + .news66, .span-two-third { width: 410px; } + .span12 { width: 399px; } + .span11 { width: 366px; } + .span10 { width: 333px; } + .news50, .span9 { width: 300px; } + .span8 { width: 267px; } + .span7 { width: 234px; } + .span6 { width: 201px; } + .news33, .span-one-third { width: 190px; } + .span5 { width: 168px; } + .news25, .span4 { width: 135px; } + .span3 { width: 102px; } + .span2 { width: 69px; } + .span1 { width: 36px; } + .clearer { margin: 0px 0px 0px 30px !important; } + .full-span9 { width: 1094px; } + .full-span8 { width: 1034x; } + .full-span7 { width: 901px; } + .full-span6 { width: 768px; } + .full-span5 { width: 635px; } + .full-span4 { width: 502px; } + .full-span3 { width: 369px; } + .full-span2 { width: 236px; } + .full-span1 { width: 103px; } + .img-container.news100 img { width: 630px; height: auto; } + .img-container.news75 img { width: 465px; height: auto; } + .img-container.news66 img { width: 410px; height: auto; } + .img-container.news50 img { width: 300px; height: auto; } + .img-container.news33 img { width: 190px; height: auto; } + .img-container.news25 img { width: 135px; height: auto; } + .title-container h2 { + margin-bottom: 4px; + font-size: 19px; + } + h2.size13 { font-size: 9px; } + h2.size14 { font-size: 10px; } + h2.size15 { font-size: 11px; } + h2.size16 { font-size: 12px; } + h2.size17 { font-size: 12px; } + h2.size18 { font-size: 13px; } + h2.size19 { font-size: 14px; } + h2.size20 { font-size: 15px; } + h2.size21 { font-size: 15px; } + h2.size22 { font-size: 16px; } + h2.size23 { font-size: 17px; } + h2.size24 { font-size: 18px; } + h2.size25 { font-size: 18px; } + h2.size26 { font-size: 19px; } + h2.size27 { font-size: 20px; } + h2.size28 { font-size: 21px; } + h2.size29 { font-size: 21px; } + h2.size30 { font-size: 22px; } + h2.size31 { font-size: 23px; } + h2.size32 { font-size: 24px; } + h2.size33 { font-size: 24px; } + h2.size34 { font-size: 25px; } + h2.size35 { font-size: 26px; } + h2.size36 { font-size: 27px; } + h2.size37 { font-size: 27px; } + h2.size38 { font-size: 28px; } + h2.size39 { font-size: 29px; } + h2.size40 { font-size: 30px; } + h2.size41 { font-size: 30px; } + h2.size42 { font-size: 31px; } + h2.size43 { font-size: 32px; } + h2.size44 { font-size: 33px; } + h2.size45 { font-size: 33px; } + h2.size46 { font-size: 34px; } + h2.size47 { font-size: 35px; } + h2.size48 { font-size: 36px; } + h2.size49 { font-size: 36px; } + h2.size50 { font-size: 37px; } + h2.size51 { font-size: 38px; } + h2.size52 { font-size: 39px; } + h2.size53 { font-size: 39px; } + h2.size54 { font-size: 40px; } + h2.size55 { font-size: 41px; } + h2.size56 { font-size: 42px; } + h2.size57 { font-size: 42px; } + h2.size58 { font-size: 43px; } + h2.size59 { font-size: 44px; } + h2.size60 { font-size: 45px; } + h2.size61 { font-size: 45px; } + h2.size62 { font-size: 46px; } + h2.size63 { font-size: 47px; } + h2.size64 { font-size: 48px; } + h2.size65 { font-size: 48px; } + h2.size66 { font-size: 49px; } + h2.size67 { font-size: 50px; } + h2.size68 { font-size: 51px; } + h2.size69 { font-size: 51px; } + h2.size70 { font-size: 52px; } + h2.size71 { font-size: 53px; } + h2.size72 { font-size: 54px; } + h2.size73 { font-size: 54px; } + h2.size74 { font-size: 55px; } + h2.size75 { font-size: 56px; } + h2.size76 { font-size: 57px; } + h2.size77 { font-size: 57px; } + h2.size78 { font-size: 58px; } + h2.size79 { font-size: 59px; } + h2.size80 { font-size: 60px; } + h2.size81 { font-size: 60px; } + h2.size82 { font-size: 61px; } + h2.size83 { font-size: 62px; } + h2.size84 { font-size: 63px; } + h2.size85 { font-size: 63px; } + h2.size86 { font-size: 64px; } + h2.size87 { font-size: 65px; } + h2.size88 { font-size: 66px; } + h2.size89 { font-size: 66px; } + h2.size90 { font-size: 67px; } + h2.size91 { font-size: 68px; } + h2.size92 { font-size: 69px; } + h2.size93 { font-size: 69px; } + h2.size94 { font-size: 70px; } + h2.size95 { font-size: 71px; } + h2.size96 { font-size: 72px; } + h2.size97 { font-size: 72px; } + h2.size98 { font-size: 73px; } + h2.size99 { font-size: 74px; } + h2.size100 { font-size: 75px; } + .content-container p { + font-size: 12px !important; + line-height: 14px !important; + font-weight: 300; + } + .article, .page, .page-right { + margin: 0px 0px 30px 30px; + } + .page div[class^="news"], + div[class^="full-span"], + .page div[class^="span"]{ + margin-left: 30px; + } + .content { + width: 630px; + margin: 0 30px 0 30px; + } + .row { + margin-left: -30px; + } + footer div.row { + margin-left: -15px; + } + .container, footer { + width: 1094px; + } + .sidebar { + width: 202px; + } + .img-container { + margin-bottom: 4px; + } + div[class^="news"] p, + div[class^="full-span"] p, + div[class^="span"] p { + line-height: 18px; + } + div.article.skin-important { + padding-bottom: 30px; + } + div.article.skin-important > div[class^="news"] > span.content-container, + div.article.skin-important > div[class^="news"] > span.title-*, + div.article.skin-info > div[class^="news"] > span.content-container, + div.article.skin-info > div[class^="news"] > span.title-container { + margin-left: 30px; + margin-right: 30px; + } + div.article.skin-important > div[class^="news"] > span.title-container, + div.article.skin-info > div[class^="news"] > span.title-container { + padding-top: 30px; + } + .row.news .page img { + width: 100%; + } + header > div.container .inner { + width: 640px; + } + div.page .span11 img { + max-width: 366px; + height: auto; + } + footer div.row div.row { + margin-left: -30px; + } + div.content > div.row > div.page > img { + width: 630px; + height: auto; + } + div.content > div.row.news > iframe.full { + width: 630px; + margin-left: 30px; + } + #galleria { + width: 630px; + } + .media-page { + margin-left: 30px; + } +} +@media (max-width: 767px) { + .media-page { + margin-left: 0px; + } + div.page.news33.category-news { + margin-bottom: 40px; + } + div.news-portal-header { + width: 100%; + margin-left: 0px !important; + } + .img-container.news100 img, + .img-container.news75 img, + .img-container.news66 img, + .img-container.news50 img, + .img-container.news33 img, + .img-container.news25 img, + div.page .span11 img { + width: 100%; + height: auto; + } + .img-container { width: 100%; } + .img-container a { display:block; width: 100%; } + div[class^="news"], + div[class^="span"], + div[class^="full-span"], + .page div[class^="news"], + .page div[class^="span"], + .clearer, .content, .container, .sidebar, .page, header > div.container .inner, footer { + width: auto; + float: none; + clear: both; + } + .content { + margin: 0px 20px 20px 20px; + } + div.article.skin-important { + padding-bottom: 20px; + } + div.article { + width: 100% !important; + margin-left: 0; + } + .row.news { + margin-left: 0; + } + div.article.skin-important > div[class^="news"] > span.content-container, + div.article.skin-important > div[class^="news"] > span.title-container, + div.article.skin-info > div[class^="news"] > span.content-container, + div.article.skin-info > div[class^="news"] > span.title-container { + width: auto; + margin-left: 10px; + margin-right: 10px; + } + div.article.skin-important > div[class^="news"] > span.title-container, + div.article.skin-info > div[class^="news"] > span.title-container { + padding-top: 20px; + } + .content > div[class^="news"], + div[class^="span"] { + margin: 0 0 0 20px; + } + h2[class^="size"] { + font-size: 15px; + } + .sidebar { + margin: 0 20px 20px 20px; + } + header, footer { + padding: 0 20px 20px 20px; + } + .sidebar.sponsor a { + margin: 0 10px 10px 0; + float: left; + } + .sidebar.sponsor div.vignette { + clear: both; + } + .footnote > div { + width: auto; + display: block; + text-align: center; + } + footer div[class^="full-span"] { + margin-bottom: 20px; + } + .social-news > div { + float: left; + margin-right: 20px; + } + menu.top-menu { + height: 100px; + } + menu.top-menu li { + width: 45%; + float: left; + background-color: #bfd4e5; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + } + menu.top-menu li > a { + color: white; + } + menu.top-menu .top-menu-text { + text-align: center; + margin: 0; + } + menu.top-menu .top-menu-text > span:first-child { + display: block; + font-size: 15px; + line-height: 38px; + } + menu.top-menu > li:nth-child(odd) { + margin-right: 10%; + } + div.top-menu-icon { + display: none; + } + .hidden-phone { + display: none; + } + .visible-phone { + display: block; + } + menu.section-menu { + margin: 20px 0px 0px; + padding: 60px 10px 10px; + background-color: #555; + border-radius: 5px; + color: white; + } + menu.section-menu li { + padding: 6px; + border-radius: 5px; + } + menu.section-menu a, menu.section-menu a:hover { + color: white; + } + div.top-menu-text > span.help-text { + display: none; + } + th, td { + min-width: 0px; + } + .section-menu-button { + float: right; + margin-bottom: 15px; + } + .section-menu-button a { + width: 70px; + height: 50px; + line-height: 50px; + display: block; + text-align: center; + border-radius: 5px; + background-color: #555; + color: white; + } + .section-menu-button a:hover, menu.section-menu li:hover { + background-color: #6f6f6f; + } + h1 { font-size: 25px; line-height: 30px; margin-bottom: 10px; } + h2 { font-size: 20px; line-height: 25px; margin-bottom: 8px;} + h3 { font-size: 15px; line-height: 20px; } + h4 { font-size: 12px; line-height: 17px; } + h5 { font-size: 12px; line-height: 17px; } + h6 { font-size: 12px; line-height: 17px; } + .row.news .page { + margin: 0px; + } + header { + margin-bottom: 0px; + } + menu.top-menu a:hover div.top-menu-text > span, menu.top-menu a:hover div.top-menu-text > span.help-text, div.top-menu-text > span { + color: white; + } + div.logo { + width: 132px; + } + div.logo img { + height: 100px; + } + div.inner div.when { + display: none; + } + div.inner div.right { + float: left; + } + footer > div.container > div.row { + margin-top: 30px; + } + div[class^="full-span"] { + margin: 0px 0px 0px 15px; + } + footer .search input[type="search"]{ + width: 100%; + } + footer .language { + text-align: center; + } + footer > div.container { + padding: 0px 0px 90px 0px; + } + header ul.promo-menu { + padding-top: 20px; + } + footer div.row div.row { + margin-left: -20px; + } + div.content > div.row > div.page > img { + width: 100%; + height: auto; + } + div.content > div.row.news > iframe.full { + width: 100%; + margin-left: 0px; + } + #galleria { + width: 100%; + } + div.calendar table, + div.calendar table thead, + div.calendar table tbody, + div.calendar table th, + div.calendar table td, + div.calendar table tr { + display: block; + } + div.calendar table thead tr { + position: absolute; + top: -9999px; + left: -9999px; + } + div.calendar table td { + border: none; + border-bottom: 1px solid #CCC; + position: relative; + padding-left: 20%; + white-space: normal; + text-align: left; + } + div.calendar table td:before { + position: absolute; + top: 6px; + left: 6px; + width: 45%; + padding-right: 10px; + white-space: nowrap; + text-align:left; + font-weight: bold; + content: attr(data-title); + } + .filterLink { + clear: right; + display: block; + text-align: center; + } + li.menu-creative a, li.menu-creative span, li.menu-creative + menu.sub-menu a, li.menu-creative + menu.submenu span, + li.menu-game a, li.menu-game span, li.menu-game + menu.sub-menu a, li.menu-game + menu.submenu span, + li.menu-tickets a, li.menu-tickets span, li.menu-tickets + menu.sub-menu a, li.menu-tickets + menu.submenu span, + li.menu-guide a, li.menu-guide span, li.menu-guide + menu.sub-menu a, li.menu-guide + menu.submenu span, + li.menu-entertainment-lectures a, li.menu-entertainment-lectures span, li.menu-entertainment-lectures + menu.sub-menu a, li.menu-entertainment-lectures + menu.submenu span { + color: white; + } +} diff --git a/web/stream.gathering.org/superawesomeness.css b/web/stream.gathering.org/superawesomeness.css new file mode 100644 index 0000000..b8c5545 --- /dev/null +++ b/web/stream.gathering.org/superawesomeness.css @@ -0,0 +1,24 @@ +* { font-family: 'Open Sans', sans-serif; + +} + +body { + background: #fff; color: #000; opacity: 1; +} + +#spaceship { background: url('singularity.png'); width: 237px; height: 200px;position:absolute; top: 0; right: 0;z-index: -1} + +@media screen and (max-width: 1145px) { /* Min iPad size*/ + #spaceship { + background: #fff; + } +} + + +/* #innhold { position: absolute; left:0px ; top: 50px; margin: 0 50px 0 50px; z-index: 9; width: 520px; }*/ +#innhold { width: 480px; } +footer { clear: both; width:480px; } +a { color: #000; } +h4 { margin: 0; margin-top: 35px;} +p { margin: 0; padding: 0; } +li { margin-bottom: 14px; } diff --git a/web/stream.gathering.org/test.pl b/web/stream.gathering.org/test.pl new file mode 100755 index 0000000..3b440d5 --- /dev/null +++ b/web/stream.gathering.org/test.pl @@ -0,0 +1,70 @@ +#!/usr/bin/perl -I /srv/streamlib +use warnings; +use strict; +use CGI; +use Geo::IP; +use NetAddr::IP; +use Net::IP; +# apt-get install libnet-ip-perl libnetaddr-ip-perl +use HTML::Template; +use stream; +use stream::config; + +my $client = CGI->new; + +my $v4net = $stream::config::v4net; +my $v6net = $stream::config::v6net; +my $tg = $stream::config::tg; +my $tg_full = $stream::config::tg_full; +my %streams = %stream::config::streams; + +my $force_unicast = $client->param('forceunicast'); + +my $location = undef; + +print $client->header(); + +my $clip = $client->remote_addr(); +my $template = HTML::Template->new(filename => 'test.tmpl'); +my $is_local = &is_ip_local($clip, $v4net, $v6net); + +my @streams = &html_local_test(); +$template->param(TG => $tg); +$template->param(TG_FULL => $tg_full); +$template->param(STREAMS => \@streams); +print $template->output(); + + +sub html_local_test() { + my @s = (); + foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { + my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; + my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; + $multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); + + if ($streams{$name}->{external}) { + $title_link = $streams{$name}->{url}; + } else { + $title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); + } + my %hash = ( + 'title_link' => $title_link, + 'title' => $streams{$name}->{title}, + 'source' => $streams{$name}->{source}, + 'quality' => $streams{$name}->{quality}, + 'location' => $streams{$name}->{location}, + 'type' => $streams{$name}->{type}, + 'delivery' => $multicast_link, + ); + if ($multicast_link eq "multicast") { + $hash{'is_multicast'} .= 1; + my $unicast_link = $title_link; + $unicast_link=~s/multicast/unicast/g; + $hash{'unicast_link'} .= $unicast_link; + } + $hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); + push(@s, \%hash); + + } + return @s; +} diff --git a/web/stream.gathering.org/test.tmpl b/web/stream.gathering.org/test.tmpl new file mode 100644 index 0000000..fe88674 --- /dev/null +++ b/web/stream.gathering.org/test.tmpl @@ -0,0 +1,31 @@ + + + The Gathering <TMPL_VAR NAME=TG_FULL> Streams + + + +
+

The Gathering Streams

+ + + +
+ +
+ +
+ +

Problems with the non game streams? The easiest way to get hold of us is on IRC (EFNet); one of ViD, Rockj and Sesse should be available if there's too much traffic on #tg to be heard.

+

.gathering.org">http://stream.tg.gathering.org

+ + + + + diff --git a/web/stream.tg13.gathering.org/fix_count.pl b/web/stream.tg13.gathering.org/fix_count.pl deleted file mode 100755 index aaaf42e..0000000 --- a/web/stream.tg13.gathering.org/fix_count.pl +++ /dev/null @@ -1,31 +0,0 @@ -#! /usr/bin/perl - -my $lines = {}; - -open LOG, "<", "/home/techserver/count_datacube.log" - or die "count_datacube.log: $!"; - -while () { - chomp; - my ($date, $port, $proto, $audience, $count) = split /\s+/; - my $key = $port . ' ' . $proto . ' ' . $audience; - $lines->{$date}{$key} = $count; -} - -close LOG; - -my $last_date = undef; -for my $date (sort keys %$lines) { - for my $key (keys %{$lines->{$date}}) { - if (defined($last_date) && !exists($lines->{$last_date}{$key})) { - $lines->{$last_date}{$key} = $lines->{$date}{$key}; - } - } - $last_date = $date; -} - -for my $date (sort keys %$lines) { - for my $key (sort keys %{$lines->{$date}}) { - print "$date $key " . $lines->{$date}{$key} . "\n"; - } -} diff --git a/web/stream.tg13.gathering.org/img/cam-map.png b/web/stream.tg13.gathering.org/img/cam-map.png deleted file mode 100644 index 759641a..0000000 Binary files a/web/stream.tg13.gathering.org/img/cam-map.png and /dev/null differ diff --git a/web/stream.tg13.gathering.org/img/icon_1.png b/web/stream.tg13.gathering.org/img/icon_1.png deleted file mode 100644 index 6d6e67e..0000000 Binary files a/web/stream.tg13.gathering.org/img/icon_1.png and /dev/null differ diff --git a/web/stream.tg13.gathering.org/img/icon_2.png b/web/stream.tg13.gathering.org/img/icon_2.png deleted file mode 100644 index 599d5f6..0000000 Binary files a/web/stream.tg13.gathering.org/img/icon_2.png and /dev/null differ diff --git a/web/stream.tg13.gathering.org/img/icon_3.png b/web/stream.tg13.gathering.org/img/icon_3.png deleted file mode 100644 index 4d1de76..0000000 Binary files a/web/stream.tg13.gathering.org/img/icon_3.png and /dev/null differ diff --git a/web/stream.tg13.gathering.org/img/icon_camera.png b/web/stream.tg13.gathering.org/img/icon_camera.png deleted file mode 100644 index e1bf2c3..0000000 Binary files a/web/stream.tg13.gathering.org/img/icon_camera.png and /dev/null differ diff --git a/web/stream.tg13.gathering.org/img/icon_event.png b/web/stream.tg13.gathering.org/img/icon_event.png deleted file mode 100644 index 9ce6df4..0000000 Binary files a/web/stream.tg13.gathering.org/img/icon_event.png and /dev/null differ diff --git a/web/stream.tg13.gathering.org/img/icon_hd.png b/web/stream.tg13.gathering.org/img/icon_hd.png deleted file mode 100644 index d9086bc..0000000 Binary files a/web/stream.tg13.gathering.org/img/icon_hd.png and /dev/null differ diff --git a/web/stream.tg13.gathering.org/img/icon_sd.png b/web/stream.tg13.gathering.org/img/icon_sd.png deleted file mode 100644 index 3bddbe9..0000000 Binary files a/web/stream.tg13.gathering.org/img/icon_sd.png and /dev/null differ diff --git a/web/stream.tg13.gathering.org/index-bak.pl b/web/stream.tg13.gathering.org/index-bak.pl deleted file mode 100755 index 3e31107..0000000 --- a/web/stream.tg13.gathering.org/index-bak.pl +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/perl -I /srv/streamlib -use warnings; -use strict; -use CGI; -use Geo::IP; -use NetAddr::IP; -use Net::IP; -# apt-get install libnet-ip-perl libnetaddr-ip-perl -use HTML::Template; -use stream; -use stream::config; - -my $client = CGI->new; - -my $v4net = $stream::config::v4net; -my $v6net = $stream::config::v6net; -my $tg = $stream::config::tg; -my $tg_full = $stream::config::tg_full; -my %streams = %stream::config::streams; - -my $force_unicast = $client->param('forceunicast'); - -my $location = undef; - -print $client->header(); - -my $clip = $client->remote_addr(); -my $template = HTML::Template->new(filename => 'index.tmpl'); -my $is_local = &is_ip_local($clip, $v4net, $v6net); - -my @streams = &html_local_test(); -$template->param(TG => $tg); -$template->param(TG_FULL => $tg_full); -$template->param(STREAMS => \@streams); -print $template->output(); - - -sub html_local_test() { - my @s = (); - foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { - my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; - my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; - $multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); - - if ($streams{$name}->{external}) { - $title_link = $streams{$name}->{url}; - } else { - $title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); - } - my %hash = ( - 'title_link' => $title_link, - 'title' => $streams{$name}->{title}, - 'source' => $streams{$name}->{source}, - 'delivery' => $multicast_link - ); - if ($multicast_link eq "multicast") { - $hash{'is_multicast'} .= 1; - my $unicast_link = $title_link; - $unicast_link=~s/multicast/unicast/g; - $hash{'unicast_link'} .= $unicast_link; - } - $hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); - push(@s, \%hash); - - } - return @s; -} diff --git a/web/stream.tg13.gathering.org/index-bak.tmpl b/web/stream.tg13.gathering.org/index-bak.tmpl deleted file mode 100644 index c0aa95d..0000000 --- a/web/stream.tg13.gathering.org/index-bak.tmpl +++ /dev/null @@ -1,31 +0,0 @@ - - - The Gathering <TMPL_VAR NAME=TG_FULL> - - - - -
-
-

The Gathering

- -
-
-

Problems with the non game streams? The easiest way to get hold of us is on IRC (EFNet); - one of ViD, Rockj and Sesse should be available if there's too much traffic - on #tg to be heard.

-

.gathering.org">http://stream.tg.gathering.org

- -
- - - - diff --git a/web/stream.tg13.gathering.org/index.pl b/web/stream.tg13.gathering.org/index.pl deleted file mode 100755 index e5f103c..0000000 --- a/web/stream.tg13.gathering.org/index.pl +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/perl -I /srv/streamlib -use warnings; -use strict; -use CGI; -use Geo::IP; -use NetAddr::IP; -use Net::IP; -# apt-get install libnet-ip-perl libnetaddr-ip-perl -use HTML::Template; -use stream; -use stream::config; - -my $client = CGI->new; - -my $v4net = $stream::config::v4net; -my $v6net = $stream::config::v6net; -my $tg = $stream::config::tg; -my $tg_full = $stream::config::tg_full; -my %streams = %stream::config::streams; - -my $force_unicast = $client->param('forceunicast'); -my $no_header = $client->param('noheader'); - -my $location = undef; - -print $client->header(); - -my $clip = $client->remote_addr(); -my $template = HTML::Template->new(filename => 'index.tmpl'); -my $is_local = &is_ip_local($clip, $v4net, $v6net); - -my @streams = &html_local_test(); -$template->param(TG => $tg); -$template->param(TG_FULL => $tg_full); -$template->param(STREAMS => \@streams); -$template->param(NOHEADER => $no_header); -print $template->output(); - - -sub html_local_test() { - my @s = (); - foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { - my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; - my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; - $multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); - - if ($streams{$name}->{external}) { - $title_link = $streams{$name}->{url}; - } else { - $title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); - } - my %hash = ( - 'title_link' => $title_link, - 'title' => $streams{$name}->{title}, - 'source' => $streams{$name}->{source}, - 'quality' => $streams{$name}->{quality}, - 'location' => $streams{$name}->{location}, - 'type' => $streams{$name}->{type}, - 'delivery' => $multicast_link, - ); - if ($multicast_link eq "multicast") { - $hash{'is_multicast'} .= 1; - my $unicast_link = $title_link; - $unicast_link=~s/multicast/unicast/g; - $hash{'unicast_link'} .= $unicast_link; - } - $hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); - push(@s, \%hash); - - } - return @s; -} diff --git a/web/stream.tg13.gathering.org/index.tmpl b/web/stream.tg13.gathering.org/index.tmpl deleted file mode 100644 index a565f0e..0000000 --- a/web/stream.tg13.gathering.org/index.tmpl +++ /dev/null @@ -1,35 +0,0 @@ - - - The Gathering <TMPL_VAR NAME=TG_FULL> Streams - - - -
- -

The Gathering Streams

-
- - - - -
- -
- -
- -

Problems with the non game streams? The easiest way to get hold of us is on IRC (EFNet); one of ViD, Rockj and Sesse should be available if there's too much traffic on #tg to be heard.

-

.gathering.org">http://stream.tg.gathering.org

- - - - - diff --git a/web/stream.tg13.gathering.org/ios/PLACEHOLDER b/web/stream.tg13.gathering.org/ios/PLACEHOLDER deleted file mode 100644 index e69de29..0000000 diff --git a/web/stream.tg13.gathering.org/ios/event.m3u8 b/web/stream.tg13.gathering.org/ios/event.m3u8 deleted file mode 100644 index 11152d3..0000000 --- a/web/stream.tg13.gathering.org/ios/event.m3u8 +++ /dev/null @@ -1,16 +0,0 @@ -#EXTM3U -#EXT-X-TARGETDURATION:5 -#EXT-X-VERSION:3 -#EXT-X-ALLOW-CACHE:NO -#EXT-X-MEDIA-SEQUENCE:27432 -#EXTINF:4.97, -http://stream.tg13.gathering.org/ios/event-00027432.ts -#EXTINF:4.04, -http://stream.tg13.gathering.org/ios/event-00027433.ts -#EXTINF:3.99, -http://stream.tg13.gathering.org/ios/event-00027434.ts -#EXTINF:3.97, -http://stream.tg13.gathering.org/ios/event-00027435.ts -#EXTINF:3.74, -http://stream.tg13.gathering.org/ios/event-00027436.ts -#EXT-X-ENDLIST diff --git a/web/stream.tg13.gathering.org/ios/stream.m3u8 b/web/stream.tg13.gathering.org/ios/stream.m3u8 deleted file mode 100644 index d3d46a6..0000000 --- a/web/stream.tg13.gathering.org/ios/stream.m3u8 +++ /dev/null @@ -1,8 +0,0 @@ -#EXTM3U -#EXT-X-TARGETDURATION:5 -#EXT-X-VERSION:3 -#EXT-X-ALLOW-CACHE:NO -#EXT-X-MEDIA-SEQUENCE:1 -#EXTINF:3.84, -http://stream.tg13.gathering.org/ios/stream-00000001.ts -#EXT-X-ENDLIST diff --git a/web/stream.tg13.gathering.org/singularity.css b/web/stream.tg13.gathering.org/singularity.css deleted file mode 100644 index 05e1518..0000000 --- a/web/stream.tg13.gathering.org/singularity.css +++ /dev/null @@ -1,1960 +0,0 @@ -•/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) -*/ - -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} -body { - line-height: 1.5; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} - -/* @override http://www.gathering.org/tg12/files/content/design/css/typography.css */ - -/* Generic ------------------------------------------------------- */ -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { - font-family: Arial, Sans-Serif; - font-weight: 400; -} -body { - font-size: 15px; - line-height: 20px; - color: #777; -} -/* Headings ------------------------------------------------------- */ -h1, h2, h3, h4, h5, h6 { font-weight: bold; color: #404040; } -h1 { font-size: 45px; line-height: 50px; margin-bottom: 15px; } -h2 { font-size: 25px; line-height: 31px; margin-bottom: 12px;} -h3 { font-size: 20px; line-height: 26px; } -h4 { font-size: 16px; line-height: 22px; } -h5 { font-size: 15px; line-height: 20px; } -h6 { font-size: 12px; line-height: 17px; } - -/* Text 'n stuff ------------------------------------------------------- */ -p { margin: 0 0 20px 0; } -.page p { - margin: 0 0 0.8em 0 !important; -} -blockquote { - margin: 20px; - padding: 0 0 0 40px; - color: #555; - font-style: italic; - color: #888; - position: relative; -} -blockquote p::before { - position: absolute; - top: 50px; - margin-left: -60px; - content: "\201D"; - font-size: 150px; - font-style: normal; - color: #00aaad; -} -blockquote p { - display: block; - margin-left: 40px !important; -} -blockquote small::before { - content: "\2013"; - margin: 5px; -} -blockquote small { - font-size: 13px; - margin-left: -55px; -} -strong { font-weight: bold; } - -ul { - margin: 0 0 20px 10px; - list-style-type: none; - position: relative; -} -ul.submenu ul { - margin-bottom: 0px; -} -ul li:before { - content: "\2022"; - position: absolute; - left: -17px; - width: 15px; - text-align: right; - color: #00aaad; - font-size: 13px; - line-height: 21px; -} -i, em { font-style: italic; } - -ol { - margin: 0 0 20px 15px; - list-style-type: none; - position: relative; - counter-reset: section; -} -ol > li { - counter-increment: section; -} -ol > li:before { - content: counter(section); - position: absolute; - left: -30px; - width: 23px; - text-align: right; - color: #00aaad; - font-size: 12px; - line-height: 22px; -} -dl dt { font-weight: bold; } -dd { margin: 0 0 0 20px; } - -a { color: #00aaad; text-decoration: none; } -a:hover { color: #c3027b; } -code, pre { - padding: 0 3px 2px; - font-family: Menlo, Monaco, "Courier New", monospace; - font-size: 12px; - color: #8F8F8F; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - background-color: #F8F8F8; - border: 1px solid #C0C4C5; -} -code { - padding: 3px 4px; - color: #00aaad; -} -pre { - display: block; - padding: 8.5px; - margin: 0 0 9px; - line-height: 18px; - white-space: pre; - white-space: pre-wrap; - word-break: break-all; -} -table { - margin-bottom: 20px; -} -th, td { - padding: 4px 5px; -} -td, th { - border-left: 1px solid #E2E2E2; -} -tr td:first-child, tr th:first-child { - border: none; -} -tr td { - text-align: right; -} -th { - font-weight: bold; - vertical-align: bottom; -} -th, td { - min-width: 100px; -} -th p, td p { - margin: 0; -} -tbody tr:nth-child(even) td, thead tr th { - background-color: #F2F2F2; -} -hr { - margin-top: 0.5em; - margin-bottom: 0.5em; - border: 0; - color: #D5D5D5; - background-color: #D5D5D5; - height: 1px; -} -.visible-phone { - display: none; -} -.title-container h2 { - font-family: Tahoma, Geneva, sans-serif; - font-size: 26px; - margin-bottom: 5px; - line-height: normal; -} -h2.size13 { font-size: 13px; } -h2.size14 { font-size: 14px; } -h2.size15 { font-size: 15px; } -h2.size16 { font-size: 16px; } -h2.size17 { font-size: 17px; } -h2.size18 { font-size: 18px; } -h2.size19 { font-size: 19px; } -h2.size20 { font-size: 20px; } -h2.size21 { font-size: 21px; } -h2.size22 { font-size: 22px; } -h2.size23 { font-size: 23px; } -h2.size24 { font-size: 24px; } -h2.size25 { font-size: 25px; } -h2.size26 { font-size: 26px; } -h2.size27 { font-size: 27px; } -h2.size28 { font-size: 28px; } -h2.size29 { font-size: 29px; } -h2.size30 { font-size: 30px; } -h2.size31 { font-size: 31px; } -h2.size32 { font-size: 32px; } -h2.size33 { font-size: 33px; } -h2.size34 { font-size: 34px; } -h2.size35 { font-size: 35px; } -h2.size36 { font-size: 36px; } -h2.size37 { font-size: 37px; } -h2.size38 { font-size: 38px; } -h2.size39 { font-size: 39px; } -h2.size40 { font-size: 40px; } -h2.size41 { font-size: 41px; } -h2.size42 { font-size: 42px; } -h2.size43 { font-size: 43px; } -h2.size44 { font-size: 44px; } -h2.size45 { font-size: 45px; } -h2.size46 { font-size: 46px; } -h2.size47 { font-size: 47px; } -h2.size48 { font-size: 48px; } -h2.size49 { font-size: 49px; } -h2.size50 { font-size: 50px; } -h2.size51 { font-size: 51px; } -h2.size52 { font-size: 52px; } -h2.size53 { font-size: 53px; } -h2.size54 { font-size: 54px; } -h2.size55 { font-size: 55px; } -h2.size56 { font-size: 56px; } -h2.size57 { font-size: 57px; } -h2.size58 { font-size: 58px; } -h2.size59 { font-size: 59px; } -h2.size60 { font-size: 60px; } -h2.size61 { font-size: 61px; } -h2.size62 { font-size: 62px; } -h2.size63 { font-size: 63px; } -h2.size64 { font-size: 64px; } -h2.size65 { font-size: 65px; } -h2.size66 { font-size: 66px; } -h2.size67 { font-size: 67px; } -h2.size68 { font-size: 68px; } -h2.size69 { font-size: 69px; } -h2.size70 { font-size: 70px; } -h2.size71 { font-size: 71px; } -h2.size72 { font-size: 72px; } -h2.size73 { font-size: 73px; } -h2.size74 { font-size: 74px; } -h2.size75 { font-size: 75px; } -h2.size76 { font-size: 76px; } -h2.size77 { font-size: 77px; } -h2.size78 { font-size: 78px; } -h2.size79 { font-size: 79px; } -h2.size80 { font-size: 80px; } -h2.size81 { font-size: 81px; } -h2.size82 { font-size: 82px; } -h2.size83 { font-size: 83px; } -h2.size84 { font-size: 84px; } -h2.size85 { font-size: 85px; } -h2.size86 { font-size: 86px; } -h2.size87 { font-size: 87px; } -h2.size88 { font-size: 88px; } -h2.size89 { font-size: 89px; } -h2.size90 { font-size: 90px; } -h2.size91 { font-size: 91px; } -h2.size92 { font-size: 92px; } -h2.size93 { font-size: 93px; } -h2.size94 { font-size: 94px; } -h2.size95 { font-size: 95px; } -h2.size96 { font-size: 96px; } -h2.size97 { font-size: 97px; } -h2.size98 { font-size: 98px; } -h2.size99 { font-size: 99px; } -h2.size100 { font-size: 100px; } - -.cite:before { - content: "\201C"; -} -.cite:after { - content: "\201D"; -} -.cite > .cite:before { - content: "\2018"; -} -.cite > .cite:after { - content: "\2019"; -} -.bullet:before { - content: "\2022"; -} -.dash:after { - content: "\2013"; -} -.hellip:after { - content: "\2026"; -} -.cite:lang(no):before { - content: "\00AB"; -} -.cite:lang(no):after { - content: "\00BB"; -} -/* Meta thingy ------------------------------------------------------- */ -.breadcrumbs span.delimiter:before { - content: "\25BA"; - margin-right: 8px; - font-size: 8px; - position: relative; - top: -2px; - margin: 0 5px 0 3px; - color: #00aaad; -} -.breadcrumbs { - font-size: 12px; - margin-bottom: 10px; -} -.summary, -.summary p { - font-size: 16px; - line-height: 22px; - font-weight: 600 !important; - margin-bottom: 10px; -} -.metainfo { margin: 10px 0; } -.byline, .meta { - color: #888; - display: block; - font-size: 12px; - margin-bottom: 0.8em; -} -.byline span.delimiter:before { - content: "\2022"; - margin-right: 8px; - font-size: 8px; - position: relative; - top: -2px; - margin: 0 5px 0 5px; - color: #00aaad; -} -.phototext { - margin-top: 5px; - line-height: 18px; -} -.photoline { - margin-top: 5px; - font-style: italic; - font-size: 12px; - float: right; -} -.page h1 { margin-top: 10px; } -.vignette { - background-color: #6e6e6e; - margin-top: 5px; - margin-bottom: 5px; - height: 8px; - position: relative; -} -.vignette span { - line-height: 19px; -} -div.page .vignette { - margin-bottom: 10px; -} -div.page .span11 img { - max-width: 488px; - height: auto; -} -.vignette > span { - text-transform: lowercase; - color: #6e6e6e; - display: block; - margin-left: 15px; - background-color: white; - position: absolute; - top: -6px; - font-size: 12px; - padding: 0 3px 0 3px; - font-weight: 500; -} -div.news33.category-news:nth-child(3n) { - clear: left; -} -div.portal > h1 { - font-size: 20px; - padding: 0 10px; - color: white; -} -h1.portal-creative { - background-color: #ec008c; -} -h1.portal-game { - background-color: #fba51e; -} -h1.portal-entertainmentlectures { - background-color: #819700; -} -div.portal > div.row { - margin-bottom: 40px; -} -div.category-news h2 a { - color: black; -} -/* - * CSS for The Gathering 2013. - * Copyright KANDU and contributors - */ - -/* HTML & BODY ------------------------------------------------------- */ -body { - background: url('/tg13/files/content/design/images/background.jpg') no-repeat; - background-position: top center; -} - -html, body { - height:100%; -} -body.iframe { - background-image: none; - height: auto; -} - -/* Generic styles ------------------------------------------------------- */ - -.hidden { display: none; } -menu { margin: 0; padding: 0; } - -/* Containers and rows ------------------------------------------------------- */ -.container { - width: 1320px; - margin: 0 auto; - zoom: 1; -} - -.content { - width: 840px; -} - -.container:before, -.container:after { - zoom: 1; -} -.container:before, -.container:after, -.content:before, -.content:after, -.row:before, -.row:after { - display: table; - line-height: 0; - content: ""; -} -.container:after, -.row:after { - clear: both; -} -.row { - margin-left: -40px; -} - -/* Main structure ------------------------------------------------------- */ -header, header > div.container { -} -header { - margin-bottom: 40px; -} -header > div.container { -} -header > div.container .inner { - float: left; - width: 830px; -} -footer a, footer, footer p, footer h4 { - color: #2d4f9e; -} -footer a:hover { - color: #fff; -} -header a { - color: #c3027b; -} -header a:hover { - color: #860050; -} -header > div.container .logo { - float: left; - width: 250px; -} -header .left, header .left > div { - float: right; -} -header .right { - margin-left: 10px; - float: right; - width: 180px; -} -header .when { - background-color: #5a0037; - padding: 10px; - color: white; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - font-size: 11px; - line-height: 12px; - width: 110px; - text-align: center; -} -header .when-phone .when { - width: 120px; -} -header .when-phone { - float: right; -} -header .language { - margin-top: 10px; - line-height: 25px; - font-weight: 300; - margin-right: 10px; - padding-right: 10px; - border-right: 1px solid white; - font-size: 12px; -} -header ul.promo-menu { - padding-top: 40px; - margin: 0 0 0 15px; -} -header ul.promo-menu a { - font-weight: bold; - font-size: 13px; -} -header ul li:before { - margin-top: 2px; - content: "\25A0"; - position: absolute; - left: -15px; - width: 10px; - text-align: right; - color: #860050; - font-size: 18px; - line-height: 13px; -} -header .language a { - color: white; -} -header .language a:hover { - color: #2d4f9e; -} -footer { - margin-top: 80px; - background-color: #abdcff; - background-image: url('/tg13/files/content/design/images/footerbg.jpg'); - background-repeat: no-repeat; - background-position: center bottom; -} -footer > div.container { - padding: 0px 0px 150px 0px; -} -.footer-about { - margin-bottom: 40px; - height: 100px; - position: relative; -} -.footer-about > span { - position: absolute !important; - bottom: 0; left: 0; -} -footer > div.container > div.row { - margin-top: 80px; -} -footer ul { - margin: 0; -} -footer h4 { - margin-bottom: 20px; -} -footer div.full-span2 > iframe { - margin: 20px 0px; -} -footer a { - line-height: 25px; -} -footer ul li::before { - content: ""; -} -footer div.row { - margin-left: -20px; -} -footer div.row div.row { - margin-left: -40px; -} -.footnote p { - font-size: 13px; -} -.full-span9 { width: 1360px; } -.full-span8 { width: 1280px; } -.full-span7 { width: 1115px; } -.full-span6 { width: 950px; } -.full-span5 { width: 785px; } -.full-span4 { width: 620px; } -.full-span3 { width: 455px; } -.full-span2 { width: 290px; } -.full-span1 { width: 125px; } -.content, .sidebar { - float: left; -} -.content { - margin: 0 40px 0 40px; -} -.sidebar { - width: 200px; -} -.sidebar.sponsor img { - width: 200px; -} -.sidebar.sponsor img, -.sidebar.sponsor > div.vignette { - margin-bottom: 20px; -} -.sidebar.sponsor img { - filter: grayscale(100%); - -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); - -ms-filter: grayscale(100%); -o-filter: grayscale(100%); - filter: url(/tg13/files/content/design/css/filters.svg#grayscale); - filter: gray; - -webkit-filter: grayscale(1); -} -.sidebar.sponsor img:hover { - filter: none; - -webkit-filter: grayscale(0%); -moz-filter: grayscale(0%); - -ms-filter: grayscale(0%); -o-filter: grayscale(0%); -} -.fb-comments, .fb-comments *, .fb_iframe_widget, .fb_iframe_widget * {width: 100% !important;} -.span4 iframe { - width: 100%; -} -div.comments_header { - padding:8px; - background-color: #b1b1b1; - color: white; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - margin-bottom: 10px; - margin-top: 10px; -} -div.comments_header > div { - float: left; - margin-right: 8px; - content:url('/tg13/files/content/design/images/info.png'); -} -div.comments_header h4 { - line-height: 34px; - color: white; -} -div.comments_header p { - clear: both; - margin: 8px 0 0 0 !important; - font-size: 12px; - line-height: 15px; -} -.media-page { - margin-left: 40px; -} -.videoWrapper, #mediaspace { - position: relative; - padding-bottom: 56.25%; /* 16:9 */ - padding-top: 25px; - height: 0; - margin-bottom: 0.8em; -} -.videoWrapper iframe, #mediaspace embed { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.stream-icon { - float: left; - margin-right: 10px; -} -.stream-link { margin-bottom: 8px;} -#galleria { - width: 840px; -} - -/* Menu & Sidebar ------------------------------------------------------- */ - -menu { - list-style: none; -} -menu a { - color: #777; -} -menu a:hover, li[class^="menu-"] a:hover { - color: black; -} -li.menu-creative a, li.menu-creative span, li.menu-creative + menu.sub-menu a, li.menu-creative + menu.submenu span { - color: #ec008c; -} -li.menu-game a, li.menu-game span, li.menu-game + menu.sub-menu a, li.menu-game + menu.submenu span { - color: #fba51e; -} -li.menu-tickets a, li.menu-tickets span, li.menu-tickets + menu.sub-menu a, li.menu-tickets + menu.submenu span { - color: #00aaad; -} -li.menu-guide a, li.menu-guide span, li.menu-guide + menu.sub-menu a, li.menu-guide + menu.submenu span { - color: #034ea2; -} -li.menu-entertainment-lectures a, li.menu-entertainment-lectures span, li.menu-entertainment-lectures + menu.sub-menu a, li.menu-entertainment-lectures + menu.submenu span { - color: #819700; -} -menu.top-menu > li { - margin-bottom: 10px; -} - -div.top-menu-text > span { - color: #7595af; - font-size: 23px; - font-weight: bold; - display: table-row; - line-height: 23px; -} -div.top-menu-text > span.help-text { - font-weight: normal; - font-size: 14px; - display: table-row; - color: #a3a3a3; - line-height: 15px; -} -div.top-menu-text { - height: 38px; - padding: 6px 0 6px 0; - margin: 0 0 0 56px; -} -div.top-menu-icon { - width: 50px; - height: 50px; - float: left; - background-color: #bfd4e5; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} -menu.top-menu a:hover div.top-menu-text > span, -menu.top-menu a:hover div.top-menu-text > span.help-text { - color: #27448b; -} -menu.top-menu a:hover div.top-menu-icon { - background-color: #3d6db3; -} -div.top-menu-icon.icon-schedule { - background-image: url('/tg13/files/content/design/images/schedule.png'); -} -div.top-menu-icon.icon-tgtv { - background-image: url('/tg13/files/content/design/images/tgtv.png'); -} -div.top-menu-icon.icon-tng { - background-image: url('/tg13/files/content/design/images/tng.png'); -} -div.top-menu-icon.icon-forum { - background-image: url('/tg13/files/content/design/images/forum.png'); -} -div.top-menu-icon.icon-compo { - background-image: url('/tg13/files/content/design/images/compo.png'); -} -div.top-menu-icon.icon-news { - background-image: url('/tg13/files/content/design/images/news.png'); -} -menu.section-menu { - margin-top: 40px; - margin-left: 15px; -} -menu.section-menu li { - margin-bottom: 15px; -} -menu.sub-menu { - margin-bottom: 20px; - margin-left: 15px; -} -span.menu-expand { - display: block; - float: left; - margin-left: -15px; - cursor: pointer; -} - -/* Graphical Elements ------------------------------------------------------- */ -/* Language ------------------------------------------------------- */ -/* Search ------------------------------------------------------- */ -.search input { - vertical-align: top; - line-height: 1; -} -.search input[type="search"] { - -webkit-appearance: none; - box-sizing:content-box; - padding: 0; - padding-left: 3px; - margin: 0; - margin-top: 10px; - border: none; - color: #9dbfd9; - height: 25px; - width: 200px; - font-size: 12px; - font-style: italic; - border-radius: 3px; - line-height: 15px; -} -.search input:focus { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - outline: 0; -} -input[type=search]::-webkit-search-decoration { - -webkit-appearance:none; -} -input::-webkit-input-placeholder, -isindex::-webkit-input-placeholder, -textarea::-webkit-input-placeholder, -input::-moz-placeholder, -textarea::-moz-placeholder { - font-style: italic; - color: silver; -} -/* News ------------------------------------------------------- */ -.news { position: relative; } - -.news100, .clearer, .span19 { width: 840px; } -.span18 { width: 796px; } -.span17 { width: 752px; } -.span16 { width: 708px; } -.span15 { width: 664px; } -.news75, .span14 { width: 620px; } -.span13 { width: 576px; } -.news66, .span-two-third { width: 547px; } -.span12 { width: 532px; } -.span11 { width: 488px; } -.span10 { width: 444px; } -.news50, .span9 { width: 400px; } -.span8 { width: 356px; } -.span7 { width: 312px; } -.span6 { width: 268px; } -.news33, .span-one-third { width: 253px; } -.span5 { width: 224px; } -.news25, .span4 { width: 180px; } -.span3 { width: 136px; } -.span2 { width: 92px; } -.span1 { width: 48px; } -.clearer { clear: both; margin: 0px 0px 0px 40px !important; } - -div[class^="news"] > span, -div[class^="full-span"] > span, -div[class^="span"] > span { - position: relative; - display: block; -} -div[class^="news"] p, -div[class^="full-span"] p, -div[class^="span"] p { - margin: 0; -} -.article { - float: left; - margin: 0px 0px 40px 40px; -} -.article a, -.article a:hover { - text-decoration: none; - color: #777; -} - -.news_img_100 { - width: 100%; - margin: 20px 0 10px 0; -} -img.news_img_right { - width: 50%; - float: right; - margin: 0 0 20px 40px; -} -.span2.social-news div { - margin-bottom: 10px; -} -.icon-more > a { - float: right; - font-size: 13px; - margin-right: 21px; -} -.icon-more { - position: relative; -} -.icon-more > a::after { - margin-top: 2px; - padding-left: 3px; - padding-top: 2px; - padding-bottom: 1px; - margin-left: 5px; - position: absolute; - content: "\25BA"; - color: white; - background-color: black; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - border-radius: 8px; - width: 13px; - height: 13px; - font-size: 11px; - line-height: 11px; -} - -/* Page ------------------------------------------------------- */ -.page { - float: left; - margin: 0px 0px 40px 40px; -} -.page .page { - margin-left: 0px; -} -.page .page.news33 { - margin-left: 40px; -} -div.news-portal-header { - width: 840px; - margin-left: 40px !important; -} -div[class^="full-span"], -.page div[class^="news"], -.page div[class^="span"]{ - float: left; - margin-left: 40px; -} -.page h3 a, -.page li a { - border: none; -} -.page-right { - float: right; - clear: right; - margin-bottom: 40px; - margin-left: 40px; -} -.page-right a { - border: none; -} -.page-sidebar { - margin-left: 40px; -} -.page-right h3, -.page-sidebar h3 { - border-bottom: solid 4px #c0c4c5; - position: relative; - margin: 0 0 10px 0; -} -.page-sidebar .meta { - text-transform: uppercase; - font-size: 10px; -} -.page-sidebar { - position: relative; -} -.related-news { - margin-bottom: 8px; -} -.img-container { - margin-bottom: -5px; -} -.img-container a { - display:block; -} -/* Article skins ------------------------------------------------------- */ -div.article.skin-important { - background-color: black; - color: white; -} -div.article.skin-important { - padding-bottom: 40px; -} -div.article.skin-important > div[class^="news"] > span.content-container, -div.article.skin-important > div[class^="news"] > span.title-container { - margin-left: 40px; - margin-right: 40px; -} -div.article.skin-important > div[class^="news"] > span.title-container { - padding-top: 40px; -} -div.article.skin-important p, -div.article.skin-important h2, -div.article.skin-important a, -div.article.skin-important a:hover, -div.article.skin-important a:visited { - color: white; -} -div.article.skin-game .vignette, -div.article.skin-creative .vignette, -div.article.skin-entertainment .vignette { - background-color: #000; - margin: 5px 0 5px 0; - height: 8px; - position: relative; -} -div.article.skin-game .vignette span, -div.article.skin-creative .vignette span, -div.article.skin-entertainment .vignette span { - text-transform: lowercase; - color: #000; - display: block; - margin-left: 15px; - background-color: white; - position: absolute; - top: -6px; - font-size: 12px; - padding: 0 3px 0 3px; - font-weight: 500; -} -div.article.skin-game .vignette, -div.vignette.category-game { - background-color: #fba51e; -} -div.article.skin-creative .vignette, -div.vignette.category-creative { - background-color: #ec008c; -} -div.article.skin-entertainment .vignette, -div.vignette.category-entertainmentlectures { - background-color: #819700; -} -div.article.skin-game .vignette span, -div.vignette.category-game span{ - color: #fba51e; -} -div.article.skin-creative .vignette span, -div.vignette.category-creative span{ - color: #ec008c; -} -div.article.skin-entertainment .vignette span, -div.vignette.category-entertainmentlectures span{ - color: #819700; -} -div.article.skin-info { - background-color: #E6E7E8; - padding-bottom: 40px; -} -div.article.skin-info > div[class^="news"] > span.content-container, -div.article.skin-info > div[class^="news"] > span.title-container { - margin-left: 40px; - margin-right: 40px; -} -div.article.skin-info > div[class^="news"] > span.title-container { - padding-top: 40px; -} -div.article.skin-important > div[class^="news"] > span.img-container, -div.article.skin-info > div[class^="news"] > span.img-container { - margin-bottom: -25px; -} - -/* Modal ------------------------------------------------------- */ -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal-c { - width: 800px; -} -.modal { - position: absolute; - top: 206px; - z-index: 1050; - width: 800px; - margin: 0 auto; - background-color: #ffffff; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.modal-body { - padding: 20px; - padding-top: 10px; -} -.modal-body .modal-form { - margin-bottom: 0; -} -.right { - float: right; -} - -/* Video ------------------------------------------------------ */ - -.video h2 { - margin-top: 10px; - margin-bottom: 5px; -} -.tags span { - margin-left: 5px; - padding: 3px 4px; - border: 1px solid #DDD; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.tags span:hover { - background-color: whiteSmoke; -} -.tags span:hover a { - color: black; -} -.tags span a { - color: #07A430; - border-bottom: none !important; -} -.tags span a:hover { - border-bottom: none !important; -} -.tags { - margin-bottom: 20px; -} - -/* Buttons ------------------------------------------------------ */ -.btn.stage, -.btn.stage.active, -.btn.stage:hover, -.btn.game, -.btn.game.active, -.btn.game:hover, -.btn.creative, -.btn.creative.active, -.btn.creative:hover, -.btn.auditorium, -.btn.auditorium.active, -.btn.auditorium:hover { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - color: white; -} -.btn.stage { - background-color: #ff7800; - background-image: -moz-linear-gradient(top, #ff7800, #db4d00); - background-image: -ms-linear-gradient(top, #ff7800, #db4d00); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ff7800), to(#db4d00)); - background-image: -webkit-linear-gradient(top, #ff7800, #db4d00); - background-image: -o-linear-gradient(top, #ff7800, #db4d00); - background-image: linear-gradient(top, #ff7800, #db4d00); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff7800', endColorstr='#db4d00', GradientType=0); - border-color: #db4d00 #db4d00 #ca4900; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn.stage:hover, -.btn.stage:active, -.btn.stage.active, -.btn.stage.disabled, -.btn.stage[disabled] { - background-color: #db4d00; -} -.btn.stage:active, .btn.stage.active { - background-color: #e65a99 \9; -} -.btn.game { - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #009cff, #0078c4); - background-image: -ms-linear-gradient(top, #009cff, #0078c4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#009cff), to(#0078c4)); - background-image: -webkit-linear-gradient(top, #009cff, #0078c4); - background-image: -o-linear-gradient(top, #009cff, #0078c4); - background-image: linear-gradient(top, #009cff, #0078c4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#009cff', endColorstr='#0078c4', GradientType=0); - border-color: #0078c4 #0078c4 #0062a0; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn.game:hover, -.btn.game:active, -.btn.game.active, -.btn.game.disabled, -.btn.game[disabled] { - background-color: #0078c4; -} -.btn.game:active, .btn.game.active { - background-color: #0089e0 \9; -} -.btn.auditorium { - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #f33183, #dc0c64); - background-image: -ms-linear-gradient(top, #f33183, #dc0c64); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f33183), to(#dc0c64)); - background-image: -webkit-linear-gradient(top, #f33183, #dc0c64); - background-image: -o-linear-gradient(top, #f33183, #dc0c64); - background-image: linear-gradient(top, #f33183, #dc0c64); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f33183', endColorstr='#dc0c64', GradientType=0); - border-color: #dc0c64 #dc0c64 #bb004f; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn.auditorium:hover, -.btn.auditorium:active, -.btn.auditorium.active, -.btn.auditorium.disabled, -.btn.auditorium[disabled] { - background-color: #dc0c64; -} -.btn.auditorium:active, .btn.auditorium.active { - background-color: #e81f74 \9; -} -.btn.creative { - background-color: #009997; - background-image: -moz-linear-gradient(top, #009997, #007170); - background-image: -ms-linear-gradient(top, #009997, #007170); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#009997), to(#007170)); - background-image: -webkit-linear-gradient(top, #009997, #007170); - background-image: -o-linear-gradient(top, #009997, #007170); - background-image: linear-gradient(top, #009997, #007170); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#009997', endColorstr='#007170', GradientType=0); - border-color: #007170 #007170 #004e4d; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn.creative:hover, -.btn.creative:active, -.btn.creative.active, -.btn.creative.disabled, -.btn.creative[disabled] { - background-color: #007170; -} -.btn.creative:active, .btn.creative.active { - background-color: #007f7d \9; -} -.btn { - display: inline-block; - padding: 4px 10px 4px; - font-size: 13px; - line-height: 18px; - color: #333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #FAFAFA; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(white), color-stop(25%, white), to(#E6E6E6)); - background-image: -webkit-linear-gradient(white, white 25%, #E6E6E6); - background-image: -moz-linear-gradient(top, white, white 25%, #E6E6E6); - background-image: -ms-linear-gradient(white, white 25%, #E6E6E6); - background-image: -o-linear-gradient(white, white 25%, #E6E6E6); - background-image: linear-gradient(white, white 25%, #E6E6E6); - background-repeat: no-repeat; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); - border: 1px solid #CCC; - border-bottom-color: #BBB; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - cursor: pointer; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover { - color: #333333; - text-decoration: none; - background-color: #e6e6e6; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -ms-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, .btn:active { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - background-color: #e6e6e6; - background-color: #d9d9d9 \9; - color: rgba(0, 0, 0, 0.5); - outline: 0; -} -.btn-group { - position: relative; - *zoom: 1; - *margin-left: .3em; -} -.btn-group:before, .btn-group:after { - display: table; - content: ""; -} -.btn-group:after { - clear: both; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-group .btn { - position: relative; - float: left; - margin-left: -1px; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group .btn:last-child, .btn-group .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group .btn:hover, -.btn-group .btn:focus, -.btn-group .btn:active, -.btn-group .btn.active { - z-index: 2; -} -.page a.btn, -.page a.btn::hover { - border-bottom: 1px solid #CCC; -} - -/* Schedule ------------------------------------------------------- */ -a.stage { - color: white; - background-color: #819700; -} -a.game { - color: white; - background-color: #fba51e; -} -a.auditorium { - color: black; - background-color: #d8e600; -} -a.creative { - color: white; - background-color: #ec008c; -} -a.agora { - color: white; - background-color: #2e4f9e; -} -a.remove-filter { - color: white; - background-color: #CCC; -} -.filterLink { - padding: 3px 6px; - margin-right: 5px; - line-height: 28px; -} -.calendar .stage { - color: #819700; - font-size: 25px; -} -.calendar .game { - color: #fba51e; - font-size: 25px; -} -.calendar .auditorium { - color: #d8e600; - font-size: 25px; -} -.calendar .creative { - color: #ec008c; - font-size: 25px; -} -.calendar .agora { - color: #2e4f9e; - font-size: 25px; -} -.calendar tr td { - text-align: left; -} -.calendar td, .calendar td { - min-width: 0; -} -.calendar tbody tr:nth-child(even) td { - background-color: transparent; -} -.calendar tbody tr.odd td { - background-color: #F2F2F2; -} -/* Responsive ------------------------------------------------------- */ -@media (max-width: 1320px) { - footer { - width: 1320px; - } -} -@media (max-width: 1094px) { - div.news-portal-header { - width: 630px; - margin-left: 30px !important; - } - .news100, .clearer, .span19 { width: 630px; } - .span18 { width: 597px; } - .span17 { width: 564px; } - .span16 { width: 531px; } - .span15 { width: 498px; } - .news75, .span14 { width: 465px; } - .span13 { width: 432px; } - .news66, .span-two-third { width: 410px; } - .span12 { width: 399px; } - .span11 { width: 366px; } - .span10 { width: 333px; } - .news50, .span9 { width: 300px; } - .span8 { width: 267px; } - .span7 { width: 234px; } - .span6 { width: 201px; } - .news33, .span-one-third { width: 190px; } - .span5 { width: 168px; } - .news25, .span4 { width: 135px; } - .span3 { width: 102px; } - .span2 { width: 69px; } - .span1 { width: 36px; } - .clearer { margin: 0px 0px 0px 30px !important; } - .full-span9 { width: 1094px; } - .full-span8 { width: 1034x; } - .full-span7 { width: 901px; } - .full-span6 { width: 768px; } - .full-span5 { width: 635px; } - .full-span4 { width: 502px; } - .full-span3 { width: 369px; } - .full-span2 { width: 236px; } - .full-span1 { width: 103px; } - .img-container.news100 img { width: 630px; height: auto; } - .img-container.news75 img { width: 465px; height: auto; } - .img-container.news66 img { width: 410px; height: auto; } - .img-container.news50 img { width: 300px; height: auto; } - .img-container.news33 img { width: 190px; height: auto; } - .img-container.news25 img { width: 135px; height: auto; } - .title-container h2 { - margin-bottom: 4px; - font-size: 19px; - } - h2.size13 { font-size: 9px; } - h2.size14 { font-size: 10px; } - h2.size15 { font-size: 11px; } - h2.size16 { font-size: 12px; } - h2.size17 { font-size: 12px; } - h2.size18 { font-size: 13px; } - h2.size19 { font-size: 14px; } - h2.size20 { font-size: 15px; } - h2.size21 { font-size: 15px; } - h2.size22 { font-size: 16px; } - h2.size23 { font-size: 17px; } - h2.size24 { font-size: 18px; } - h2.size25 { font-size: 18px; } - h2.size26 { font-size: 19px; } - h2.size27 { font-size: 20px; } - h2.size28 { font-size: 21px; } - h2.size29 { font-size: 21px; } - h2.size30 { font-size: 22px; } - h2.size31 { font-size: 23px; } - h2.size32 { font-size: 24px; } - h2.size33 { font-size: 24px; } - h2.size34 { font-size: 25px; } - h2.size35 { font-size: 26px; } - h2.size36 { font-size: 27px; } - h2.size37 { font-size: 27px; } - h2.size38 { font-size: 28px; } - h2.size39 { font-size: 29px; } - h2.size40 { font-size: 30px; } - h2.size41 { font-size: 30px; } - h2.size42 { font-size: 31px; } - h2.size43 { font-size: 32px; } - h2.size44 { font-size: 33px; } - h2.size45 { font-size: 33px; } - h2.size46 { font-size: 34px; } - h2.size47 { font-size: 35px; } - h2.size48 { font-size: 36px; } - h2.size49 { font-size: 36px; } - h2.size50 { font-size: 37px; } - h2.size51 { font-size: 38px; } - h2.size52 { font-size: 39px; } - h2.size53 { font-size: 39px; } - h2.size54 { font-size: 40px; } - h2.size55 { font-size: 41px; } - h2.size56 { font-size: 42px; } - h2.size57 { font-size: 42px; } - h2.size58 { font-size: 43px; } - h2.size59 { font-size: 44px; } - h2.size60 { font-size: 45px; } - h2.size61 { font-size: 45px; } - h2.size62 { font-size: 46px; } - h2.size63 { font-size: 47px; } - h2.size64 { font-size: 48px; } - h2.size65 { font-size: 48px; } - h2.size66 { font-size: 49px; } - h2.size67 { font-size: 50px; } - h2.size68 { font-size: 51px; } - h2.size69 { font-size: 51px; } - h2.size70 { font-size: 52px; } - h2.size71 { font-size: 53px; } - h2.size72 { font-size: 54px; } - h2.size73 { font-size: 54px; } - h2.size74 { font-size: 55px; } - h2.size75 { font-size: 56px; } - h2.size76 { font-size: 57px; } - h2.size77 { font-size: 57px; } - h2.size78 { font-size: 58px; } - h2.size79 { font-size: 59px; } - h2.size80 { font-size: 60px; } - h2.size81 { font-size: 60px; } - h2.size82 { font-size: 61px; } - h2.size83 { font-size: 62px; } - h2.size84 { font-size: 63px; } - h2.size85 { font-size: 63px; } - h2.size86 { font-size: 64px; } - h2.size87 { font-size: 65px; } - h2.size88 { font-size: 66px; } - h2.size89 { font-size: 66px; } - h2.size90 { font-size: 67px; } - h2.size91 { font-size: 68px; } - h2.size92 { font-size: 69px; } - h2.size93 { font-size: 69px; } - h2.size94 { font-size: 70px; } - h2.size95 { font-size: 71px; } - h2.size96 { font-size: 72px; } - h2.size97 { font-size: 72px; } - h2.size98 { font-size: 73px; } - h2.size99 { font-size: 74px; } - h2.size100 { font-size: 75px; } - .content-container p { - font-size: 12px !important; - line-height: 14px !important; - font-weight: 300; - } - .article, .page, .page-right { - margin: 0px 0px 30px 30px; - } - .page div[class^="news"], - div[class^="full-span"], - .page div[class^="span"]{ - margin-left: 30px; - } - .content { - width: 630px; - margin: 0 30px 0 30px; - } - .row { - margin-left: -30px; - } - footer div.row { - margin-left: -15px; - } - .container, footer { - width: 1094px; - } - .sidebar { - width: 202px; - } - .img-container { - margin-bottom: 4px; - } - div[class^="news"] p, - div[class^="full-span"] p, - div[class^="span"] p { - line-height: 18px; - } - div.article.skin-important { - padding-bottom: 30px; - } - div.article.skin-important > div[class^="news"] > span.content-container, - div.article.skin-important > div[class^="news"] > span.title-*, - div.article.skin-info > div[class^="news"] > span.content-container, - div.article.skin-info > div[class^="news"] > span.title-container { - margin-left: 30px; - margin-right: 30px; - } - div.article.skin-important > div[class^="news"] > span.title-container, - div.article.skin-info > div[class^="news"] > span.title-container { - padding-top: 30px; - } - .row.news .page img { - width: 100%; - } - header > div.container .inner { - width: 640px; - } - div.page .span11 img { - max-width: 366px; - height: auto; - } - footer div.row div.row { - margin-left: -30px; - } - div.content > div.row > div.page > img { - width: 630px; - height: auto; - } - div.content > div.row.news > iframe.full { - width: 630px; - margin-left: 30px; - } - #galleria { - width: 630px; - } - .media-page { - margin-left: 30px; - } -} -@media (max-width: 767px) { - .media-page { - margin-left: 0px; - } - div.page.news33.category-news { - margin-bottom: 40px; - } - div.news-portal-header { - width: 100%; - margin-left: 0px !important; - } - .img-container.news100 img, - .img-container.news75 img, - .img-container.news66 img, - .img-container.news50 img, - .img-container.news33 img, - .img-container.news25 img, - div.page .span11 img { - width: 100%; - height: auto; - } - .img-container { width: 100%; } - .img-container a { display:block; width: 100%; } - div[class^="news"], - div[class^="span"], - div[class^="full-span"], - .page div[class^="news"], - .page div[class^="span"], - .clearer, .content, .container, .sidebar, .page, header > div.container .inner, footer { - width: auto; - float: none; - clear: both; - } - .content { - margin: 0px 20px 20px 20px; - } - div.article.skin-important { - padding-bottom: 20px; - } - div.article { - width: 100% !important; - margin-left: 0; - } - .row.news { - margin-left: 0; - } - div.article.skin-important > div[class^="news"] > span.content-container, - div.article.skin-important > div[class^="news"] > span.title-container, - div.article.skin-info > div[class^="news"] > span.content-container, - div.article.skin-info > div[class^="news"] > span.title-container { - width: auto; - margin-left: 10px; - margin-right: 10px; - } - div.article.skin-important > div[class^="news"] > span.title-container, - div.article.skin-info > div[class^="news"] > span.title-container { - padding-top: 20px; - } - .content > div[class^="news"], - div[class^="span"] { - margin: 0 0 0 20px; - } - h2[class^="size"] { - font-size: 15px; - } - .sidebar { - margin: 0 20px 20px 20px; - } - header, footer { - padding: 0 20px 20px 20px; - } - .sidebar.sponsor a { - margin: 0 10px 10px 0; - float: left; - } - .sidebar.sponsor div.vignette { - clear: both; - } - .footnote > div { - width: auto; - display: block; - text-align: center; - } - footer div[class^="full-span"] { - margin-bottom: 20px; - } - .social-news > div { - float: left; - margin-right: 20px; - } - menu.top-menu { - height: 100px; - } - menu.top-menu li { - width: 45%; - float: left; - background-color: #bfd4e5; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - } - menu.top-menu li > a { - color: white; - } - menu.top-menu .top-menu-text { - text-align: center; - margin: 0; - } - menu.top-menu .top-menu-text > span:first-child { - display: block; - font-size: 15px; - line-height: 38px; - } - menu.top-menu > li:nth-child(odd) { - margin-right: 10%; - } - div.top-menu-icon { - display: none; - } - .hidden-phone { - display: none; - } - .visible-phone { - display: block; - } - menu.section-menu { - margin: 20px 0px 0px; - padding: 60px 10px 10px; - background-color: #555; - border-radius: 5px; - color: white; - } - menu.section-menu li { - padding: 6px; - border-radius: 5px; - } - menu.section-menu a, menu.section-menu a:hover { - color: white; - } - div.top-menu-text > span.help-text { - display: none; - } - th, td { - min-width: 0px; - } - .section-menu-button { - float: right; - margin-bottom: 15px; - } - .section-menu-button a { - width: 70px; - height: 50px; - line-height: 50px; - display: block; - text-align: center; - border-radius: 5px; - background-color: #555; - color: white; - } - .section-menu-button a:hover, menu.section-menu li:hover { - background-color: #6f6f6f; - } - h1 { font-size: 25px; line-height: 30px; margin-bottom: 10px; } - h2 { font-size: 20px; line-height: 25px; margin-bottom: 8px;} - h3 { font-size: 15px; line-height: 20px; } - h4 { font-size: 12px; line-height: 17px; } - h5 { font-size: 12px; line-height: 17px; } - h6 { font-size: 12px; line-height: 17px; } - .row.news .page { - margin: 0px; - } - header { - margin-bottom: 0px; - } - menu.top-menu a:hover div.top-menu-text > span, menu.top-menu a:hover div.top-menu-text > span.help-text, div.top-menu-text > span { - color: white; - } - div.logo { - width: 132px; - } - div.logo img { - height: 100px; - } - div.inner div.when { - display: none; - } - div.inner div.right { - float: left; - } - footer > div.container > div.row { - margin-top: 30px; - } - div[class^="full-span"] { - margin: 0px 0px 0px 15px; - } - footer .search input[type="search"]{ - width: 100%; - } - footer .language { - text-align: center; - } - footer > div.container { - padding: 0px 0px 90px 0px; - } - header ul.promo-menu { - padding-top: 20px; - } - footer div.row div.row { - margin-left: -20px; - } - div.content > div.row > div.page > img { - width: 100%; - height: auto; - } - div.content > div.row.news > iframe.full { - width: 100%; - margin-left: 0px; - } - #galleria { - width: 100%; - } - div.calendar table, - div.calendar table thead, - div.calendar table tbody, - div.calendar table th, - div.calendar table td, - div.calendar table tr { - display: block; - } - div.calendar table thead tr { - position: absolute; - top: -9999px; - left: -9999px; - } - div.calendar table td { - border: none; - border-bottom: 1px solid #CCC; - position: relative; - padding-left: 20%; - white-space: normal; - text-align: left; - } - div.calendar table td:before { - position: absolute; - top: 6px; - left: 6px; - width: 45%; - padding-right: 10px; - white-space: nowrap; - text-align:left; - font-weight: bold; - content: attr(data-title); - } - .filterLink { - clear: right; - display: block; - text-align: center; - } - li.menu-creative a, li.menu-creative span, li.menu-creative + menu.sub-menu a, li.menu-creative + menu.submenu span, - li.menu-game a, li.menu-game span, li.menu-game + menu.sub-menu a, li.menu-game + menu.submenu span, - li.menu-tickets a, li.menu-tickets span, li.menu-tickets + menu.sub-menu a, li.menu-tickets + menu.submenu span, - li.menu-guide a, li.menu-guide span, li.menu-guide + menu.sub-menu a, li.menu-guide + menu.submenu span, - li.menu-entertainment-lectures a, li.menu-entertainment-lectures span, li.menu-entertainment-lectures + menu.sub-menu a, li.menu-entertainment-lectures + menu.submenu span { - color: white; - } -} diff --git a/web/stream.tg13.gathering.org/singularity.png b/web/stream.tg13.gathering.org/singularity.png deleted file mode 100644 index 3a13cdf..0000000 Binary files a/web/stream.tg13.gathering.org/singularity.png and /dev/null differ diff --git a/web/stream.tg13.gathering.org/stream.pl b/web/stream.tg13.gathering.org/stream.pl deleted file mode 100755 index 8ccf05c..0000000 --- a/web/stream.tg13.gathering.org/stream.pl +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/perl -I /srv/streamlib - -use warnings; -use strict; - -use stream; -use stream::config; -use CGI; -my $client = CGI->new; - -my $stream = $client->param('stream'); -my $interlaced = $client->param('interlaced'); -my $delivery = $client->param('delivery'); - -my $v4net = $stream::config::v4net; -my $v6net = $stream::config::v6net; -my $multicast_ip = $stream::config::multicast; -my $tg = $stream::config::tg; -my $base_url = $stream::config::vlc_base_host; -my %streams = %stream::config::streams; - - - -#default -if (not defined $delivery) { - $delivery = "multicast"; -} - -if((not defined $stream) or (not defined $delivery)) { - print $client->header(); - die "No stream and/or delivery method, robots unhappy :/\n"; -} - -my $url = ""; -my $port_del = ""; -my $port_str = ""; -my $extinf = ""; -my $flash_appendix = ""; - -my $clip = $client->remote_addr(); - -if (exists($streams{$stream})) { - my $is_multicast = 0; - # add force is_ip_local in check? - $is_multicast = 1 if (exists($streams{$stream}->{has_multicast}) && $delivery eq "multicast"); - - if ($is_multicast) { - $port_del = 20; - $extinf .= "Multicasted"; - $url = $streams{$stream}->{multicast_ip}; - } else { - $port_del = 30; - $extinf .= "Unicasted"; - $url = $base_url; - - if ($streams{$stream}->{is_flash}) { - $port_del = 50; - $flash_appendix = "/stream.flv"; - } - } - - $port_del = $streams{$stream}->{preport} if (defined($streams{$stream}->{preport})); - $port_str = $streams{$stream}->{port}; - $extinf .= " $streams{$stream}->{title}"; - -} else { - &error("No stream and/or delivery method, robots unhappy :-/"); -} - -#print out new file -print $client->header(-type => "application/vlc", - "-Content-disposition" => "attachment; filename=tg-".$delivery."-".$stream.".vlc" -); - -print "#EXTM3U\n"; -print "#EXTINF:-1,TG$tg $extinf\n"; -if(defined $interlaced && $interlaced == 1) { - print "#EXTVLCOPT:deinterlace=1\n"; - print "#EXTVLCOPT:deinterlace-mode=linear\n"; -} -print "$url:$port_del$port_str$flash_appendix\n"; - -sub error($) { - my $message = shift; - print $client->header(); - die($message."\n"); -} diff --git a/web/stream.tg13.gathering.org/streamstats-fast.pl b/web/stream.tg13.gathering.org/streamstats-fast.pl deleted file mode 100755 index f4caa24..0000000 --- a/web/stream.tg13.gathering.org/streamstats-fast.pl +++ /dev/null @@ -1,15 +0,0 @@ -#! /usr/bin/perl -use strict; -use warnings; -use POSIX; -use CGI qw(fatalsToBrowser); - -my $port_spec = CGI::param('port'); -my $proto_spec = CGI::param('proto'); -my $audience_spec = CGI::param('audience'); - -print CGI::header(-type=>'image/png'); - -# I'm sure this is really safe -system("/srv/stream.tg13.gathering.org/fix_count.pl | /srv/stream.tg13.gathering.org/streamstats - $port_spec $proto_spec $audience_spec"); -#system("/srv/stream.tg13.gathering.org/streamstats", "/home/techserver/cleaned_datacube.log", $port_spec, $proto_spec, $audience_spec); diff --git a/web/stream.tg13.gathering.org/streamstats.cpp b/web/stream.tg13.gathering.org/streamstats.cpp deleted file mode 100644 index e81419f..0000000 --- a/web/stream.tg13.gathering.org/streamstats.cpp +++ /dev/null @@ -1,217 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -map port_desc = { - { "3013", "main (3013)" }, - { "3014", "main-sd (3014)" }, - { "3015", "webcam (3015)" }, - { "3016", "webcam-south (3016)" }, - { "3017", "webcam-south-transcode (3017)" }, - { "3018", "webcam-fisheye (3018)" }, - { "5013", "main-transcode (5013)" }, - { "5015", "webcam-transcode (5015)" }, -}; - -struct Spec { - set incl; - bool compare; -}; - -Spec parse_spec(const string &spec) -{ - Spec ret; - ret.compare = false; - - if (spec == "compare") { - ret.compare = true; - return ret; - } - if (spec == "dontcare") { - return ret; - } - - const char *ptr = spec.c_str(); - if (strncmp(ptr, "compare:", 8) == 0) { - ptr += 8; - ret.compare = true; - } - - for ( ;; ) { - const char *end = strchr(ptr, ','); - if (end == NULL) { - ret.incl.insert(ptr); - break; - } else { - ret.incl.insert(string(ptr, end)); - ptr = end + 1; - } - } - - return ret; -} - -bool filter(const string &entry, const Spec &spec) -{ - if (spec.incl.empty()) { - return false; - } - return spec.incl.count(entry) == 0; -} - -vector get_stream_id(const string& port, const string &proto, const string &audience, - const Spec& port_spec, const Spec &proto_spec, const Spec &audience_spec) -{ - vector keys; - if (port_spec.compare) { - if (port_desc.count(port)) { - keys.push_back(port_desc[port]); - } else { - char buf[256]; - sprintf(buf, "___%s___", port.c_str()); - keys.push_back(buf); - } - } - if (proto_spec.compare) { - keys.push_back(proto); - } - if (audience_spec.compare) { - keys.push_back(audience); - } - return keys; -} - -string get_stream_desc(const vector &stream_id) -{ - string ret; - for (int i = 0; i < stream_id.size(); ++i) { - if (i != 0) { - ret += ","; - } - ret += stream_id[i]; - } - return ret; -} - -int main(int argc, char **argv) -{ - Spec port_spec = parse_spec(argv[2]); - Spec proto_spec = parse_spec(argv[3]); - Spec audience_spec = parse_spec(argv[4]); - - map, int> > lines; - map, int> stream_ids; - vector stream_descs; - - // Parse the log. - FILE *fp; - if (strcmp(argv[1], "-") == 0) { - fp = stdin; - } else { - fp = fopen(argv[1], "r"); - } - while (!feof(fp)) { - char buf[1024]; - fgets(buf, 1024, fp); - - if (buf == NULL) { - break; - } - char *ptr = strchr(buf, '\n'); - if (ptr != NULL) { - *ptr = 0; - } - - char *date = strtok(buf, " "); - char *port = strtok(NULL, " "); - char *proto = strtok(NULL, " "); - char *audience = strtok(NULL, " "); - char *count = strtok(NULL, " "); - - if (date == NULL || port == NULL || proto == NULL || audience == NULL || count == NULL) { - continue; - } - - if (filter(port, port_spec)) { - continue; - } - if (filter(proto, proto_spec)) { - continue; - } - if (filter(audience, audience_spec)) { - continue; - } - - vector stream_id = get_stream_id(port, proto, audience, port_spec, proto_spec, audience_spec); - if (stream_ids.count(stream_id) == 0) { - int stream_id_num = stream_ids.size(); - stream_ids.insert(make_pair(stream_id, stream_id_num)); - stream_descs.push_back(get_stream_desc(stream_id)); - } - lines[date][stream_id] += atoi(count); - } - fclose(fp); - - // Output. - char *data_file = tempnam(NULL, "data"); - FILE *datafp = fopen(data_file, "w"); - if (datafp == NULL) { - perror(data_file); - exit(1); - } - - vector cols(stream_ids.size()); - for (auto& it : lines) { - const string& date = it.first; - - for (const auto& it2 : stream_ids) { - const vector& stream_id = it2.first; - int stream_id_num = it2.second; - - cols[stream_id_num] = it.second[stream_id]; // note: might zero-initialize - } - fprintf(datafp, "%s", date.c_str()); - for (int i = 0; i < cols.size(); ++i) { - fprintf(datafp, " %d", cols[i]); - } - fprintf(datafp, "\n"); - } - fclose(datafp); - - // Make gnuplot script. - char *plot_file = tempnam(NULL, "plot"); - FILE *plotfp = fopen(plot_file, "w"); - if (plotfp == NULL) { - perror(plot_file); - exit(1); - } - - fprintf(plotfp, "set terminal png\n"); - fprintf(plotfp, "set xdata time\n"); - fprintf(plotfp, "set timefmt \"20%%y-%%m-%%d-%%H:%%M:%%S\"\n"); - fprintf(plotfp, "set xtics axis \"2000-00-00-01:00:00\"\n"); - fprintf(plotfp, "set format x \"%%H\"\n"); - - fprintf(plotfp, "plot"); - for (int i = 0; i < cols.size(); ++i) { - if (i == 0) { - fprintf(plotfp, " "); - } else { - fprintf(plotfp, ","); - } - fprintf(plotfp, "\"%s\" using 1:%d title \"%s\" with lines", data_file, i + 2, stream_descs[i].c_str()); - } - fprintf(plotfp, "\n"); - - fclose(plotfp); - - char buf[1024]; - sprintf(buf, "gnuplot < %s", plot_file); - system(buf); -} diff --git a/web/stream.tg13.gathering.org/streamstats.html b/web/stream.tg13.gathering.org/streamstats.html deleted file mode 100644 index 5d6adc7..0000000 --- a/web/stream.tg13.gathering.org/streamstats.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
Ports: -
-
-
-
-
-
-
- -
- -
Protocol: -
-
-
- -
Audience: -
-
-
- -
- -
-

- - - diff --git a/web/stream.tg13.gathering.org/streamstats.pl b/web/stream.tg13.gathering.org/streamstats.pl deleted file mode 100755 index e4c20f9..0000000 --- a/web/stream.tg13.gathering.org/streamstats.pl +++ /dev/null @@ -1,116 +0,0 @@ -#! /usr/bin/perl -use strict; -use warnings; -use POSIX; -use CGI qw(fatalsToBrowser); - -my %port_spec = prepare_spec(CGI::param('port')); -my %proto_spec = prepare_spec(CGI::param('proto')); -my %audience_spec = prepare_spec(CGI::param('audience')); - -#open LOG, "<", "/home/techserver/count_datacube.log" -open LOG, "-|", "/home/techserver/fix_count.pl" -#open LOG, "<", "/home/techserver/cleaned_datacube.log" - or die "count_datacube.log: $!"; - -our %desc = ( - 3013 => 'main (3013)', - 3014 => 'main-sd (3014)', - 3015 => 'webcam (3015)', - 3016 => 'webcam-south (3016)', - 3017 => 'webcam-south-transcode (3017)', - 3018 => 'webcam-fisheye (3018)', - 5013 => 'main-transcode (5013)', - 5015 => 'webcam-transcode (5015)', -); - -my $lines = {}; -my %streams = (); - -while () { - chomp; - my ($date, $port, $proto, $audience, $count) = split /\s+/; - next if (filter($port, $proto, $audience)); - my $stream_id = get_stream_id($port, $proto, $audience); - $streams{$stream_id} = 1; - $lines->{$date}{$stream_id} += $count; -} - -close LOG; - -print CGI::header(-type=>'image/png'); - -my $tmpfile = POSIX::tmpnam(); -open GRAPH, ">", $tmpfile - or die "$tmpfile: $!"; -for my $date (sort keys %$lines) { - my @cols = (); - for my $stream (keys %streams) { - push @cols, ($lines->{$date}{$stream} // "0"); - } - print GRAPH "$date ", join(' ', @cols), "\n"; -} -close GRAPH; - -my $tmpfile2 = POSIX::tmpnam(); -open GNUPLOT, ">", $tmpfile2 - or die "$tmpfile2: $!"; -print GNUPLOT "set terminal png\n"; -print GNUPLOT "set xdata time\n"; -print GNUPLOT "set timefmt \"20%y-%m-%d-%H:%M:%S\"\n"; -print GNUPLOT "set xtics axis \"2000-00-00-01:00:00\"\n"; -print GNUPLOT "set format x \"%H\"\n"; - -my @plots = (); -my $idx = 2; -for my $stream (keys %streams) { - push @plots, "\"$tmpfile\" using 1:$idx title \"$stream\" with lines"; - ++$idx; -} -print GNUPLOT "plot ", join(', ', @plots); - -# \"$tmpfile\" using 0:2 with lines, \"$tmpfile\" using 0:3 with lines\n"; -close GNUPLOT; - -system("gnuplot < $tmpfile2"); - -sub prepare_spec { - my $spec = shift; - return () if ($spec eq 'compare' || $spec eq 'dontcare'); - $spec =~ s/^compare://; - - my %ret = (); - for my $s (split /,/, $spec) { - $ret{$s} = 1; - } - return %ret; -} - -sub filter { - my ($port, $proto, $audience) = @_; - return 1 if (filter_list(\%port_spec, $port)); - return 1 if (filter_list(\%proto_spec, $proto)); - return 1 if (filter_list(\%audience_spec, $audience)); - return 0; -} - -sub filter_list { - my ($spec, $candidate) = @_; - return 0 if ((scalar keys %$spec) == 0); - return !exists($spec->{$candidate}); -} - -sub get_stream_id { - my ($port, $proto, $audience) = @_; - my @keys = (); - if (CGI::param('port') =~ /^compare/) { - if (exists($desc{$port})) { - push @keys, $desc{$port}; - } else { - push @keys, "___" . $port . "___"; - } - } - push @keys, $proto if (CGI::param('proto') =~ /^compare/); - push @keys, $audience if (CGI::param('audience') =~ /^compare/); - return join(',', @keys); -} diff --git a/web/stream.tg13.gathering.org/superawesomeness.css b/web/stream.tg13.gathering.org/superawesomeness.css deleted file mode 100644 index b8c5545..0000000 --- a/web/stream.tg13.gathering.org/superawesomeness.css +++ /dev/null @@ -1,24 +0,0 @@ -* { font-family: 'Open Sans', sans-serif; - -} - -body { - background: #fff; color: #000; opacity: 1; -} - -#spaceship { background: url('singularity.png'); width: 237px; height: 200px;position:absolute; top: 0; right: 0;z-index: -1} - -@media screen and (max-width: 1145px) { /* Min iPad size*/ - #spaceship { - background: #fff; - } -} - - -/* #innhold { position: absolute; left:0px ; top: 50px; margin: 0 50px 0 50px; z-index: 9; width: 520px; }*/ -#innhold { width: 480px; } -footer { clear: both; width:480px; } -a { color: #000; } -h4 { margin: 0; margin-top: 35px;} -p { margin: 0; padding: 0; } -li { margin-bottom: 14px; } diff --git a/web/stream.tg13.gathering.org/test.pl b/web/stream.tg13.gathering.org/test.pl deleted file mode 100755 index 3b440d5..0000000 --- a/web/stream.tg13.gathering.org/test.pl +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/perl -I /srv/streamlib -use warnings; -use strict; -use CGI; -use Geo::IP; -use NetAddr::IP; -use Net::IP; -# apt-get install libnet-ip-perl libnetaddr-ip-perl -use HTML::Template; -use stream; -use stream::config; - -my $client = CGI->new; - -my $v4net = $stream::config::v4net; -my $v6net = $stream::config::v6net; -my $tg = $stream::config::tg; -my $tg_full = $stream::config::tg_full; -my %streams = %stream::config::streams; - -my $force_unicast = $client->param('forceunicast'); - -my $location = undef; - -print $client->header(); - -my $clip = $client->remote_addr(); -my $template = HTML::Template->new(filename => 'test.tmpl'); -my $is_local = &is_ip_local($clip, $v4net, $v6net); - -my @streams = &html_local_test(); -$template->param(TG => $tg); -$template->param(TG_FULL => $tg_full); -$template->param(STREAMS => \@streams); -print $template->output(); - - -sub html_local_test() { - my @s = (); - foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { - my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; - my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; - $multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); - - if ($streams{$name}->{external}) { - $title_link = $streams{$name}->{url}; - } else { - $title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); - } - my %hash = ( - 'title_link' => $title_link, - 'title' => $streams{$name}->{title}, - 'source' => $streams{$name}->{source}, - 'quality' => $streams{$name}->{quality}, - 'location' => $streams{$name}->{location}, - 'type' => $streams{$name}->{type}, - 'delivery' => $multicast_link, - ); - if ($multicast_link eq "multicast") { - $hash{'is_multicast'} .= 1; - my $unicast_link = $title_link; - $unicast_link=~s/multicast/unicast/g; - $hash{'unicast_link'} .= $unicast_link; - } - $hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); - push(@s, \%hash); - - } - return @s; -} diff --git a/web/stream.tg13.gathering.org/test.tmpl b/web/stream.tg13.gathering.org/test.tmpl deleted file mode 100644 index ea0eaca..0000000 --- a/web/stream.tg13.gathering.org/test.tmpl +++ /dev/null @@ -1,31 +0,0 @@ - - - The Gathering <TMPL_VAR NAME=TG_FULL> Streams - - - -
-

The Gathering Streams

- - - -
- -
- -
- -

Problems with the non game streams? The easiest way to get hold of us is on IRC (EFNet); one of ViD, Rockj and Sesse should be available if there's too much traffic on #tg to be heard.

-

.gathering.org">http://stream.tg.gathering.org

- - - - - -- cgit v1.2.3 From cc9a6912958b0e2f78cc5d7b4b4797eca03dcfc7 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 16 Apr 2014 15:52:54 +0200 Subject: Remove domain names from nettkart.pl. --- web/nms.gathering.org/nettkart.pl | 1 + 1 file changed, 1 insertion(+) (limited to 'web') diff --git a/web/nms.gathering.org/nettkart.pl b/web/nms.gathering.org/nettkart.pl index 19e48d1..6711dae 100755 --- a/web/nms.gathering.org/nettkart.pl +++ b/web/nms.gathering.org/nettkart.pl @@ -87,6 +87,7 @@ while (my $ref = $q->fetchrow_hashref()) { my $sysname = $ref->{'sysname'}; $sysname =~ s/-sekrit//; + $sysname =~ s/\..*$//; $ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; $img->filledRectangle($3,$4,$1,$2,$clr); -- cgit v1.2.3 From eafd9d512bed97a60243581012b95a93ba48440e Mon Sep 17 00:00:00 2001 From: root Date: Wed, 16 Apr 2014 15:55:09 +0200 Subject: Tweak the shortening in nettkart. --- web/nms.gathering.org/nettkart.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'web') diff --git a/web/nms.gathering.org/nettkart.pl b/web/nms.gathering.org/nettkart.pl index 6711dae..f6dd2c2 100755 --- a/web/nms.gathering.org/nettkart.pl +++ b/web/nms.gathering.org/nettkart.pl @@ -99,7 +99,7 @@ while (my $ref = $q->fetchrow_hashref()) { my $max_textlen = ($x2-$x1) > ($y2-$y1) ? $x2-$x1 : $y2-$y1; while (length($sysname) * 6 > $max_textlen) { # Try to abbreviate sysname if it is too long for the box - $sysname =~ s/^(.*)[a-z]~?([0-9]+)$/$1~$2/ or last; + $sysname =~ s/^(.*)[a-z]~?([0-9-]+)$/$1~$2/ or last; } if (($x2-$x1) > ($y2-$y1)) { $text_img->string(gdSmallFont,$x1+2,$y1,$sysname,$blk); -- cgit v1.2.3 From 1929b6b4efcd9cb03f92cae1bf994527a80c2138 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 16 Apr 2014 16:14:52 +0200 Subject: add jwplayer to stream site --- web/stream.gathering.org/jwplayer.js | 1 + web/stream.gathering.org/player.swf | Bin 0 -> 98583 bytes 2 files changed, 1 insertion(+) create mode 100644 web/stream.gathering.org/jwplayer.js create mode 100644 web/stream.gathering.org/player.swf (limited to 'web') diff --git a/web/stream.gathering.org/jwplayer.js b/web/stream.gathering.org/jwplayer.js new file mode 100644 index 0000000..41ade50 --- /dev/null +++ b/web/stream.gathering.org/jwplayer.js @@ -0,0 +1 @@ +var jwplayer=function(a){if(jwplayer.api){return jwplayer.api.selectPlayer(a)}};var $jw=jwplayer;jwplayer.version="5.5.1641";jwplayer.vid=document.createElement("video");jwplayer.audio=document.createElement("audio");jwplayer.source=document.createElement("source");(function(b){b.utils=function(){};b.utils.typeOf=function(d){var c=typeof d;if(c==="object"){if(d){if(d instanceof Array){c="array"}}else{c="null"}}return c};b.utils.extend=function(){var c=b.utils.extend["arguments"];if(c.length>1){for(var e=1;e-1){return c.substr(c.lastIndexOf(".")+1,c.length).toLowerCase()}return};b.utils.html=function(c,d){c.innerHTML=d};b.utils.wrap=function(c,d){c.parentNode.replaceChild(d,c);d.appendChild(c)};b.utils.ajax=function(f,e,c){var d;if(window.XMLHttpRequest){d=new XMLHttpRequest()}else{d=new ActiveXObject("Microsoft.XMLHTTP")}d.onreadystatechange=function(){if(d.readyState===4){if(d.status===200){if(e){e(d)}}else{if(c){c(f)}}}};d.open("GET",f,true);d.send(null);return d};b.utils.load=function(d,e,c){d.onreadystatechange=function(){if(d.readyState===4){if(d.status===200){if(e){e()}}else{if(c){c()}}}}};b.utils.find=function(d,c){return d.getElementsByTagName(c)};b.utils.append=function(c,d){c.appendChild(d)};b.utils.isIE=function(){return((!+"\v1")||(typeof window.ActiveXObject!="undefined"))};b.utils.isLegacyAndroid=function(){var c=navigator.userAgent.toLowerCase();return(c.match(/android 2.[012]/i)!==null)};b.utils.isIOS=function(){var c=navigator.userAgent.toLowerCase();return(c.match(/iP(hone|ad)/i)!==null)};b.utils.getFirstPlaylistItemFromConfig=function(c){var d={};var e;if(c.playlist&&c.playlist.length){e=c.playlist[0]}else{e=c}d.file=e.file;d.levels=e.levels;d.streamer=e.streamer;d.playlistfile=e.playlistfile;if(d.file&&d.file.toLowerCase().indexOf("youtube.com")>-1){d.provider="youtube"}if(d.streamer&&d.streamer.toLowerCase().indexOf("rtmp://")==0){d.provider="rtmp"}if(e.type){d.provider=e.type.toLowerCase()}else{if(e.provider){d.provider=e.provider.toLowerCase()}}return d};b.utils.getOuterHTML=function(d){if(d.outerHTML){return d.outerHTML}else{var e=d.parentNode;var c=document.createElement(e.tagName);var g=document.createElement(d.tagName);e.replaceChild(g,d);c.appendChild(d);var f=c.innerHTML;e.replaceChild(d,g);return f}};b.utils.setOuterHTML=function(f,e){if(f.outerHTML){f.outerHTML=e}else{var g=document.createElement("div");g.innerHTML=e;var c=document.createRange();c.selectNodeContents(g);var d=c.extractContents();f.parentNode.insertBefore(d,f);f.parentNode.removeChild(f)}};b.utils.hasFlash=function(){return(typeof navigator.plugins!="undefined"&&typeof navigator.plugins["Shockwave Flash"]!="undefined")||(typeof window.ActiveXObject!="undefined")};b.utils.getPluginName=function(c){if(c.lastIndexOf("/")>=0){c=c.substring(c.lastIndexOf("/")+1,c.length)}if(c.lastIndexOf("-")>=0){c=c.substring(0,c.lastIndexOf("-"))}if(c.lastIndexOf(".swf")>=0){c=c.substring(0,c.lastIndexOf(".swf"))}if(c.lastIndexOf(".js")>=0){c=c.substring(0,c.lastIndexOf(".js"))}return c};b.utils.getAbsolutePath=function(j,h){if(h===undefined){h=document.location.href}if(j===undefined){return undefined}if(a(j)){return j}var k=h.substring(0,h.indexOf("://")+3);var g=h.substring(k.length,h.indexOf("/",k.length+1));var d;if(j.indexOf("/")===0){d=j.split("/")}else{var e=h.split("?")[0];e=e.substring(k.length+g.length+1,e.lastIndexOf("/"));d=e.split("/").concat(j.split("/"))}var c=[];for(var f=0;f0&&(c<0||(c>e)))}b.utils.pluginPathType={ABSOLUTE:"ABSOLUTE",RELATIVE:"RELATIVE",CDN:"CDN"};b.utils.getPluginPathType=function(d){if(typeof d!="string"){return}d=d.split("?")[0];var e=d.indexOf("://");if(e>0){return b.utils.pluginPathType.ABSOLUTE}var c=d.indexOf("/");var f=b.utils.extension(d);if(e<0&&c<0&&(!f||!isNaN(f))){return b.utils.pluginPathType.CDN}return b.utils.pluginPathType.RELATIVE};b.utils.mapEmpty=function(c){for(var d in c){return false}return true};b.utils.mapLength=function(d){var c=0;for(var e in d){c++}return c};b.utils.log=function(d,c){if(typeof console!="undefined"&&typeof console.log!="undefined"){if(c){console.log(d,c)}else{console.log(d)}}};b.utils.css=function(d,g,c){if(d!==undefined){for(var e in g){try{if(typeof g[e]==="undefined"){continue}else{if(typeof g[e]=="number"&&!(e=="zIndex"||e=="opacity")){if(isNaN(g[e])){continue}if(e.match(/color/i)){g[e]="#"+b.utils.strings.pad(g[e].toString(16),6)}else{g[e]=Math.ceil(g[e])+"px"}}}d.style[e]=g[e]}catch(f){}}}};b.utils.isYouTube=function(c){return c.indexOf("youtube.com")>-1};b.utils.getYouTubeId=function(c){c.indexOf("youtube.com">0)};b.utils.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d};b.utils.stretch=function(h,m,l,f,k,g){if(typeof l=="undefined"||typeof f=="undefined"||typeof k=="undefined"||typeof g=="undefined"){return}var d=l/k;var e=f/g;var j=0;var i=0;m.style.overflow="hidden";b.utils.transform(m,"");var c={};switch(h.toUpperCase()){case b.utils.stretching.NONE:c.width=k;c.height=g;break;case b.utils.stretching.UNIFORM:if(d>e){c.width=k*e;c.height=g*e}else{c.width=k*d;c.height=g*d}break;case b.utils.stretching.FILL:if(d>e){c.width=k*d;c.height=g*d}else{c.width=k*e;c.height=g*e}break;case b.utils.stretching.EXACTFIT:b.utils.transform(m,["scale(",d,",",e,")"," translate(0px,0px)"].join(""));c.width=k;c.height=g;break;default:break}c.top=(f-c.height)/2;c.left=(l-c.width)/2;b.utils.css(m,c)};b.utils.stretching={NONE:"NONE",FILL:"FILL",UNIFORM:"UNIFORM",EXACTFIT:"EXACTFIT"}})(jwplayer);(function(a){a.events=function(){};a.events.COMPLETE="COMPLETE";a.events.ERROR="ERROR"})(jwplayer);(function(jwplayer){jwplayer.events.eventdispatcher=function(debug){var _debug=debug;var _listeners;var _globallisteners;this.resetEventListeners=function(){_listeners={};_globallisteners=[]};this.resetEventListeners();this.addEventListener=function(type,listener,count){try{if(_listeners[type]===undefined){_listeners[type]=[]}if(typeof(listener)=="string"){eval("listener = "+listener)}_listeners[type].push({listener:listener,count:count})}catch(err){jwplayer.utils.log("error",err)}return false};this.removeEventListener=function(type,listener){try{for(var listenerIndex=0;listenerIndex<_listeners[type].length;listenerIndex++){if(_listeners[type][lisenterIndex].toString()==listener.toString()){_listeners[type].slice(lisenterIndex,lisenterIndex+1);break}}}catch(err){jwplayer.utils.log("error",err)}return false};this.addGlobalListener=function(listener,count){try{if(typeof(listener)=="string"){eval("listener = "+listener)}_globallisteners.push({listener:listener,count:count})}catch(err){jwplayer.utils.log("error",err)}return false};this.removeGlobalListener=function(listener){try{for(var globalListenerIndex=0;globalListenerIndex<_globallisteners.length;globalListenerIndex++){if(_globallisteners[globalListenerIndex].toString()==listener.toString()){_globallisteners.slice(globalListenerIndex,globalListenerIndex+1);break}}}catch(err){jwplayer.utils.log("error",err)}return false};this.sendEvent=function(type,data){if(data===undefined){data={}}if(_debug){jwplayer.utils.log(type,data)}if(typeof _listeners[type]!="undefined"){for(var listenerIndex=0;listenerIndex<_listeners[type].length;listenerIndex++){try{_listeners[type][listenerIndex].listener(data)}catch(err){jwplayer.utils.log("There was an error while handling a listener: "+err.toString(),_listeners[type][listenerIndex].listener)}if(_listeners[type][listenerIndex].count===1){delete _listeners[type][listenerIndex]}else{if(_listeners[type][listenerIndex].count>0){_listeners[type][listenerIndex].count=_listeners[type][listenerIndex].count-1}}}}for(var globalListenerIndex=0;globalListenerIndex<_globallisteners.length;globalListenerIndex++){try{_globallisteners[globalListenerIndex].listener(data)}catch(err){jwplayer.utils.log("There was an error while handling a listener: "+err.toString(),_globallisteners[globalListenerIndex].listener)}if(_globallisteners[globalListenerIndex].count===1){delete _globallisteners[globalListenerIndex]}else{if(_globallisteners[globalListenerIndex].count>0){_globallisteners[globalListenerIndex].count=_globallisteners[globalListenerIndex].count-1}}}}}})(jwplayer);(function(a){var b={};a.utils.animations=function(){};a.utils.animations.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d};a.utils.animations.transformOrigin=function(c,d){c.style.webkitTransformOrigin=d;c.style.MozTransformOrigin=d;c.style.OTransformOrigin=d};a.utils.animations.rotate=function(c,d){a.utils.animations.transform(c,["rotate(",d,"deg)"].join(""))};a.utils.cancelAnimation=function(c){delete b[c.id]};a.utils.fadeTo=function(l,f,e,i,h,d){if(b[l.id]!=d&&d!==undefined){return}var c=new Date().getTime();if(d>c){setTimeout(function(){a.utils.fadeTo(l,f,e,i,0,d)},d-c)}l.style.display="block";if(i===undefined){i=l.style.opacity===""?1:l.style.opacity}if(l.style.opacity==f&&l.style.opacity!==""&&d!==undefined){if(f===0){l.style.display="none"}return}if(d===undefined){d=c;b[l.id]=d}if(h===undefined){h=0}var j=(c-d)/(e*1000);j=j>1?1:j;var k=f-i;var g=i+(j*k);if(g>1){g=1}else{if(g<0){g=0}}l.style.opacity=g;if(h>0){b[l.id]=d+h*1000;a.utils.fadeTo(l,f,e,i,0,b[l.id]);return}setTimeout(function(){a.utils.fadeTo(l,f,e,i,0,d)},10)}})(jwplayer);(function(a){a.utils.arrays=function(){};a.utils.arrays.indexOf=function(c,d){for(var b=0;b-1){c.splice(b,1)}}})(jwplayer);(function(a){a.utils.extensionmap={"3gp":{html5:"video/3gpp",flash:"video"},"3gpp":{html5:"video/3gpp"},"3g2":{html5:"video/3gpp2",flash:"video"},"3gpp2":{html5:"video/3gpp2"},flv:{flash:"video"},f4a:{html5:"audio/mp4"},f4b:{html5:"audio/mp4",flash:"video"},f4p:{html5:"video/mp4",flash:"video"},f4v:{html5:"video/mp4",flash:"video"},mov:{html5:"video/quicktime",flash:"video"},m4a:{html5:"audio/mp4",flash:"video"},m4b:{html5:"audio/mp4"},m4p:{html5:"audio/mp4"},m4v:{html5:"video/mp4",flash:"video"},mkv:{html5:"video/x-matroska"},mp4:{html5:"video/mp4",flash:"video"},rbs:{flash:"sound"},sdp:{html5:"application/sdp",flash:"video"},vp6:{html5:"video/x-vp6"},aac:{html5:"audio/aac",flash:"video"},mp3:{flash:"sound"},ogg:{html5:"audio/ogg"},ogv:{html5:"video/ogg"},webm:{html5:"video/webm"},m3u8:{html5:"audio/x-mpegurl"},gif:{flash:"image"},jpeg:{flash:"image"},jpg:{flash:"image"},swf:{flash:"image"},png:{flash:"image"}}})(jwplayer);(function(e){e.utils.mediaparser=function(){};var g={element:{width:"width",height:"height",id:"id","class":"className",name:"name"},media:{src:"file",preload:"preload",autoplay:"autostart",loop:"repeat",controls:"controls"},source:{src:"file",type:"type",media:"media","data-jw-width":"width","data-jw-bitrate":"bitrate"},video:{poster:"image"}};var f={};e.utils.mediaparser.parseMedia=function(i){return d(i)};function c(j,i){if(i===undefined){i=g[j]}else{e.utils.extend(i,g[j])}return i}function d(m,i){if(f[m.tagName.toLowerCase()]&&(i===undefined)){return f[m.tagName.toLowerCase()](m)}else{i=c("element",i);var n={};for(var j in i){if(j!="length"){var l=m.getAttribute(j);if(!(l===""||l===undefined||l===null)){n[i[j]]=m.getAttribute(j)}}}var k=m.style["#background-color"];if(k&&!(k=="transparent"||k=="rgba(0, 0, 0, 0)")){n.screencolor=k}return n}}function h(n,k){k=c("media",k);var l=[];var j=e.utils.selectors("source",n);for(var m in j){if(!isNaN(m)){l.push(a(j[m]))}}var o=d(n,k);if(o.file!==undefined){l[0]={file:o.file}}o.levels=l;return o}function a(k,j){j=c("source",j);var i=d(k,j);i.width=i.width?i.width:0;i.bitrate=i.bitrate?i.bitrate:0;return i}function b(k,j){j=c("video",j);var i=h(k,j);return i}f.media=h;f.audio=h;f.source=a;f.video=b})(jwplayer);(function(a){a.utils.loaderstatus={NEW:"NEW",LOADING:"LOADING",ERROR:"ERROR",COMPLETE:"COMPLETE"};a.utils.scriptloader=function(c){var d=a.utils.loaderstatus.NEW;var b=new a.events.eventdispatcher();a.utils.extend(this,b);this.load=function(){if(d==a.utils.loaderstatus.NEW){d=a.utils.loaderstatus.LOADING;var e=document.createElement("script");e.onload=function(f){d=a.utils.loaderstatus.COMPLETE;b.sendEvent(a.events.COMPLETE)};e.onerror=function(f){d=a.utils.loaderstatus.ERROR;b.sendEvent(a.events.ERROR)};e.onreadystatechange=function(){if(e.readyState=="loaded"||e.readyState=="complete"){d=a.utils.loaderstatus.COMPLETE;b.sendEvent(a.events.COMPLETE)}};document.getElementsByTagName("head")[0].appendChild(e);e.src=c}};this.getStatus=function(){return d}}})(jwplayer);(function(a){a.utils.selectors=function(b,d){if(d===undefined){d=document}b=a.utils.strings.trim(b);var c=b.charAt(0);if(c=="#"){return d.getElementById(b.substr(1))}else{if(c=="."){if(d.getElementsByClassName){return d.getElementsByClassName(b.substr(1))}else{return a.utils.selectors.getElementsByTagAndClass("*",b.substr(1))}}else{if(b.indexOf(".")>0){selectors=b.split(".");return a.utils.selectors.getElementsByTagAndClass(selectors[0],selectors[1])}else{return d.getElementsByTagName(b)}}}return null};a.utils.selectors.getElementsByTagAndClass=function(e,h,g){elements=[];if(g===undefined){g=document}var f=g.getElementsByTagName(e);for(var d=0;d5||b.length==0){return b}else{return Number(b)}}}}};a.utils.strings.seconds=function(d){d=d.replace(",",".");var b=d.split(":");var c=0;if(d.substr(-1)=="s"){c=Number(d.substr(0,d.length-1))}else{if(d.substr(-1)=="m"){c=Number(d.substr(0,d.length-1))*60}else{if(d.substr(-1)=="h"){c=Number(d.substr(0,d.length-1))*3600}else{if(b.length>1){c=Number(b[b.length-1]);c+=Number(b[b.length-2])*60;if(b.length==3){c+=Number(b[b.length-3])*3600}}else{c=Number(d)}}}}return c};a.utils.strings.xmlAttribute=function(b,c){for(var d in b.attributes){if(b.attributes[d].name&&b.attributes[d].name.toLowerCase()==c.toLowerCase()){return b.attributes[d].value.toString()}}return""}})(jwplayer);(function(c){var d=new RegExp(/^(#|0x)[0-9a-fA-F]{3,6}/);c.utils.typechecker=function(g,f){f=f===null?b(g):f;return e(g,f)};function b(f){var g=["true","false","t","f"];if(g.toString().indexOf(f.toLowerCase().replace(" ",""))>=0){return"boolean"}else{if(d.test(f)){return"color"}else{if(!isNaN(parseInt(f,10))&&parseInt(f,10).toString().length==f.length){return"integer"}else{if(!isNaN(parseFloat(f))&&parseFloat(f).toString().length==f.length){return"float"}}}}return"string"}function e(g,f){if(f===null){return g}switch(f){case"color":if(g.length>0){return a(g)}return null;case"integer":return parseInt(g,10);case"float":return parseFloat(g);case"boolean":if(g.toLowerCase()=="true"){return true}else{if(g=="1"){return true}}return false}return g}function a(f){switch(f.toLowerCase()){case"blue":return parseInt("0000FF",16);case"green":return parseInt("00FF00",16);case"red":return parseInt("FF0000",16);case"cyan":return parseInt("00FFFF",16);case"magenta":return parseInt("FF00FF",16);case"yellow":return parseInt("FFFF00",16);case"black":return parseInt("000000",16);case"white":return parseInt("FFFFFF",16);default:f=f.replace(/(#|0x)?([0-9A-F]{3,6})$/gi,"$2");if(f.length==3){f=f.charAt(0)+f.charAt(0)+f.charAt(1)+f.charAt(1)+f.charAt(2)+f.charAt(2)}return parseInt(f,16)}return parseInt("000000",16)}})(jwplayer);(function(a){var c={};var b={};a.plugins=function(){};a.plugins.loadPlugins=function(e,d){b[e]=new a.plugins.pluginloader(new a.plugins.model(c),d);return b[e]};a.plugins.registerPlugin=function(g,e,d){if(c[g]){c[g].registerPlugin(g,e,d)}else{a.utils.log("A plugin ("+g+") was registered with the player that was not loaded. Please check your configuration.");for(var f in b){b[f].pluginFailed()}}}})(jwplayer);(function(a){a.plugins.model=function(b){this.addPlugin=function(c){var d=a.utils.getPluginName(c);if(!b[d]){b[d]=new a.plugins.plugin(c)}return b[d]}}})(jwplayer);(function(a){a.plugins.pluginmodes={FLASH:"FLASH",JAVASCRIPT:"JAVASCRIPT",HYBRID:"HYBRID"};a.plugins.plugin=function(b){var d="http://plugins.longtailvideo.com";var i=a.utils.loaderstatus.NEW;var j;var h;var k;var c=new a.events.eventdispatcher();a.utils.extend(this,c);function e(){switch(a.utils.getPluginPathType(b)){case a.utils.pluginPathType.ABSOLUTE:return b;case a.utils.pluginPathType.RELATIVE:return a.utils.getAbsolutePath(b,window.location.href);case a.utils.pluginPathType.CDN:var l=a.utils.getPluginName(b);return d+"/"+a.version.split(".")[0]+"/"+l+"/"+l+".js"}}function g(l){k=setTimeout(function(){i=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)},1000)}function f(l){i=a.utils.loaderstatus.ERROR;c.sendEvent(a.events.ERROR)}this.load=function(){if(i==a.utils.loaderstatus.NEW){if(b.lastIndexOf(".swf")>0){j=b;i=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE);return}i=a.utils.loaderstatus.LOADING;var l=new a.utils.scriptloader(e());l.addEventListener(a.events.COMPLETE,g);l.addEventListener(a.events.ERROR,f);l.load()}};this.registerPlugin=function(n,m,l){if(k){clearTimeout(k);k=undefined}if(m&&l){j=l;h=m}else{if(typeof m=="string"){j=m}else{if(typeof m=="function"){h=m}else{if(!m&&!l){j=n}}}}i=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)};this.getStatus=function(){return i};this.getPluginName=function(){return a.utils.getPluginName(b)};this.getFlashPath=function(){if(j){switch(a.utils.getPluginPathType(j)){case a.utils.pluginPathType.ABSOLUTE:return j;case a.utils.pluginPathType.RELATIVE:if(b.lastIndexOf(".swf")>0){return a.utils.getAbsolutePath(j,window.location.href)}return a.utils.getAbsolutePath(j,e());case a.utils.pluginPathType.CDN:if(j.indexOf("-")>-1){return j+"h"}return j+"-h"}}return null};this.getJS=function(){return h};this.getPluginmode=function(){if(typeof j!="undefined"&&typeof h!="undefined"){return a.plugins.pluginmodes.HYBRID}else{if(typeof j!="undefined"){return a.plugins.pluginmodes.FLASH}else{if(typeof h!="undefined"){return a.plugins.pluginmodes.JAVASCRIPT}}}};this.getNewInstance=function(m,l,n){return new h(m,l,n)};this.getURL=function(){return b}}})(jwplayer);(function(a){a.plugins.pluginloader=function(h,e){var g={};var j=a.utils.loaderstatus.NEW;var d=false;var b=false;var c=new a.events.eventdispatcher();a.utils.extend(this,c);function f(){if(!b){b=true;j=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)}}function i(){if(!b){var k=0;for(plugin in g){if(g[plugin].getStatus()==a.utils.loaderstatus.LOADING){k++}}if(k==0){f()}}}this.setupPlugins=function(m,k,r){var l={length:0,plugins:{}};var o={length:0,plugins:{}};for(var n in g){var p=g[n].getPluginName();if(g[n].getFlashPath()){l.plugins[g[n].getFlashPath()]=k.plugins[n];l.plugins[g[n].getFlashPath()].pluginmode=g[n].getPluginmode();l.length++}if(g[n].getJS()){var q=document.createElement("div");q.id=m.id+"_"+p;q.style.position="absolute";q.style.zIndex=o.length+10;o.plugins[p]=g[n].getNewInstance(m,k.plugins[n],q);o.length++;if(typeof o.plugins[p].resize!="undefined"){m.onReady(r(o.plugins[p],q,true));m.onResize(r(o.plugins[p],q))}}}m.plugins=o.plugins;return l};this.load=function(){j=a.utils.loaderstatus.LOADING;d=true;for(var k in e){g[k]=h.addPlugin(k);g[k].addEventListener(a.events.COMPLETE,i);g[k].addEventListener(a.events.ERROR,i);g[k].load()}d=false;i()};this.pluginFailed=function(){f()};this.getStatus=function(){return j}}})(jwplayer);(function(b){var a=[];b.api=function(d){this.container=d;this.id=d.id;var l={};var q={};var c=[];var h=undefined;var k=false;var i=[];var o=b.utils.getOuterHTML(d);var p={};var m=0;var j={};this.getBuffer=function(){return this.callInternal("jwGetBuffer")};this.getContainer=function(){return this.container};function e(r){return function(w,s,t,u){var v;if(s){j[w]=s;v="jwplayer('"+r+"').callback('"+w+"')"}else{if(!s&&j[w]){delete j[w]}}h.jwDockSetButton(w,v,t,u)}}this.getPlugin=function(s){var r=this.callInternal;if(s=="dock"){return{setButton:e(this.id)}}return this.plugins[s]};this.callback=function(r){if(j[r]){return j[r]()}};this.getDuration=function(){return this.callInternal("jwGetDuration")};this.getFullscreen=function(){return this.callInternal("jwGetFullscreen")};this.getHeight=function(){return this.callInternal("jwGetHeight")};this.getLockState=function(){return this.callInternal("jwGetLockState")};this.getMeta=function(){return this.getItemMeta()};this.getMute=function(){return this.callInternal("jwGetMute")};this.getPlaylist=function(){var s=this.callInternal("jwGetPlaylist");for(var r=0;r0){var s=i.shift();this.callInternal(s.method,s.parameters)}};this.getItemMeta=function(){return p};this.getCurrentItem=function(){return m};function n(t,v,u){var r=[];if(!v){v=0}if(!u){u=t.length-1}for(var s=v;s<=u;s++){r.push(t[s])}return r}return this};b.api.selectPlayer=function(d){var c;if(d===undefined){d=0}if(d.nodeType){c=d}else{if(typeof d=="string"){c=document.getElementById(d)}}if(c){var e=b.api.playerById(c.id);if(e){return e}else{return b.api.addPlayer(new b.api(c))}}else{if(typeof d=="number"){return b.getPlayers()[d]}}return null};b.api.events={API_READY:"jwplayerAPIReady",JWPLAYER_READY:"jwplayerReady",JWPLAYER_FULLSCREEN:"jwplayerFullscreen",JWPLAYER_RESIZE:"jwplayerResize",JWPLAYER_ERROR:"jwplayerError",JWPLAYER_MEDIA_BUFFER:"jwplayerMediaBuffer",JWPLAYER_MEDIA_BUFFER_FULL:"jwplayerMediaBufferFull",JWPLAYER_MEDIA_ERROR:"jwplayerMediaError",JWPLAYER_MEDIA_LOADED:"jwplayerMediaLoaded",JWPLAYER_MEDIA_COMPLETE:"jwplayerMediaComplete",JWPLAYER_MEDIA_TIME:"jwplayerMediaTime",JWPLAYER_MEDIA_VOLUME:"jwplayerMediaVolume",JWPLAYER_MEDIA_META:"jwplayerMediaMeta",JWPLAYER_MEDIA_MUTE:"jwplayerMediaMute",JWPLAYER_PLAYER_STATE:"jwplayerPlayerState",JWPLAYER_PLAYLIST_LOADED:"jwplayerPlaylistLoaded",JWPLAYER_PLAYLIST_ITEM:"jwplayerPlaylistItem"};b.api.events.state={BUFFERING:"BUFFERING",IDLE:"IDLE",PAUSED:"PAUSED",PLAYING:"PLAYING"};b.api.playerById=function(d){for(var c=0;c=0){var c=document.getElementById(a[f].id);if(document.getElementById(a[f].id+"_wrapper")){c=document.getElementById(a[f].id+"_wrapper")}if(c){if(d){b.utils.setOuterHTML(c,d)}else{var h=document.createElement("div");var e=c.id;if(c.id.indexOf("_wrapper")==c.id.length-8){newID=c.id.substring(0,c.id.length-8)}h.setAttribute("id",e);c.parentNode.replaceChild(h,c)}}a.splice(f,1)}return null};b.getPlayers=function(){return a.slice(0)}})(jwplayer);var _userPlayerReady=(typeof playerReady=="function")?playerReady:undefined;playerReady=function(b){var a=jwplayer.api.playerById(b.id);if(a){a.playerReady(b)}if(_userPlayerReady){_userPlayerReady.call(this,b)}};(function(a){a.embed=function(g){var i={width:400,height:300,components:{controlbar:{position:"over"}}};var f=a.utils.mediaparser.parseMedia(g.container);var e=new a.embed.config(a.utils.extend(i,f,g.config),this);var h=a.plugins.loadPlugins(g.id,e.plugins);function c(l,k){for(var j in k){if(typeof l[j]=="function"){(l[j]).call(l,k[j])}}}function d(){if(h.getStatus()==a.utils.loaderstatus.COMPLETE){for(var l=0;l-1){var q=i.split(".");var r=o;for(var e=0;e-1)){return true}if(!k||(k&&k=="video")){var l=a.utils.extension(i);if(l&&a.utils.extensionmap[l]){return true}}return false}}})(jwplayer);(function(a){a.embed.flash=function(g,h,l,f,j){function m(o,n,p){var q=document.createElement("param");q.setAttribute("name",n);q.setAttribute("value",p);o.appendChild(q)}function k(o,p,n){return function(q){if(n){document.getElementById(j.id+"_wrapper").appendChild(p)}var s=document.getElementById(j.id).getPluginConfig("display");o.resize(s.width,s.height);var r={left:s.x,top:s.y};a.utils.css(p,r)}}function e(p){if(!p){return{}}var r={};for(var o in p){var n=p[o];for(var q in n){r[o+"."+q]=n[q]}}return r}function i(q,p){if(q[p]){var s=q[p];for(var o in s){var n=s[o];if(typeof n=="string"){if(!q[o]){q[o]=n}}else{for(var r in n){if(!q[o+"."+r]){q[o+"."+r]=n[r]}}}}delete q[p]}}function c(q){if(!q){return{}}var t={},s=[];for(var n in q){var p=a.utils.getPluginName(n);var o=q[n];s.push(n);for(var r in o){t[p+"."+r]=o[r]}}t.plugins=s.join(",");return t}function d(p){var n=p.netstreambasepath?"":"netstreambasepath="+encodeURIComponent(window.location.href)+"&";for(var o in p){n+=o+"="+encodeURIComponent(p[o])+"&"}return n.substring(0,n.length-1)}function b(n){return function(p){if(n.playlist){this.load(n.playlist)}else{if(n.levels){var o=this.getPlaylistItem(0);if(!o){o=n}if(!o.image){o.image=n.image}if(!o.levels){o.levels=n.levels}this.load(o)}}}}this.embed=function(){if(l.levels||l.playlist){j.onReady(b(l))}l.id=j.id;var y;if(g.id+"_wrapper"==g.parentNode.id){y=document.getElementById(g.id+"_wrapper")}else{y=document.createElement("div");y.id=g.id+"_wrapper";a.utils.wrap(g,y);y.style.position="relative"}var q=a.utils.extend({},l);var o=f.setupPlugins(j,q,k);if(o.length>0){a.utils.extend(q,c(o.plugins))}else{delete q.plugins}var n=q.width;var w=q.height;var r=["height","width","levels","playlist","modes","events"];for(var u=0;u';v+='';v+='';v+='';v+='';v+='';v+='';v+="";a.utils.setOuterHTML(g,v);t=document.getElementById(g.id)}else{var s=document.createElement("object");s.setAttribute("type","application/x-shockwave-flash");s.setAttribute("data",h.src);s.setAttribute("width",n);s.setAttribute("height",w);s.setAttribute("bgcolor","#000000");s.setAttribute("id",g.id);s.setAttribute("name",g.id);m(s,"allowfullscreen","true");m(s,"allowscriptaccess","always");m(s,"seamlesstabbing","true");m(s,"wmode",p);m(s,"flashvars",d(q));g.parentNode.replaceChild(s,g);t=s}j.container=t;j.setPlayer(t,"flash")};this.supportsConfig=function(){if(a.utils.hasFlash()){if(l){var o=a.utils.getFirstPlaylistItemFromConfig(l);if(typeof o.file=="undefined"&&typeof o.levels=="undefined"){return true}else{if(o.file){return flashCanPlay(o.file,o.provider)}else{if(o.levels&&o.levels.length){for(var n=0;n0){j.skin=j.skin.replace(/\.zip/i,".xml")}var l=new (a.html5(c)).setup(j);f.container=document.getElementById(f.id);f.setPlayer(l,"html5")}else{return null}};this.supportsConfig=function(){var h=document.createElement("video");if(!!h.canPlayType){if(b){var k=a.utils.getFirstPlaylistItemFromConfig(b);if(typeof k.file=="undefined"&&typeof k.levels=="undefined"){return true}else{if(k.file){return html5CanPlay(h,k.file,k.provider,k.playlistfile)}else{if(k.levels&&k.levels.length){for(var j=0;j-1){return B}else{return parseInt(B.replace("px",""),10)}}}return B}this.setup=function(B){l=B;x();j();s.jwAddEventListener(b.api.events.JWPLAYER_MEDIA_LOADED,t);s.jwAddEventListener(b.api.events.JWPLAYER_MEDIA_META,function(){w()});var C;if(window.onresize!==null){C=window.onresize}window.onresize=function(D){if(C!==undefined){try{C(D)}catch(F){}}if(s.jwGetFullscreen()){var E=document.body.getBoundingClientRect();v.width=Math.abs(E.left)+Math.abs(E.right);v.height=window.innerHeight}i(v.width,v.height)}};function g(B){switch(B.keyCode){case 27:if(s.jwGetFullscreen()){s.jwSetFullscreen(false)}break;case 32:if(s.jwGetState()!=b.api.events.state.IDLE&&s.jwGetState()!=b.api.events.state.PAUSED){s.jwPause()}else{s.jwPlay()}break}}function i(E,B){if(u.style.display=="none"){return}var D=[].concat(v.plugins.order);D.reverse();A=D.length+2;if(!v.fullscreen){v.width=E;v.height=B;f=E;z=B;c(q,{top:0,bottom:0,left:0,right:0,width:E,height:B});c(u,{height:z,width:f});var C=m(r,D);if(C.length>0){A+=C.length;m(k,C,true)}}else{if(navigator.vendor.indexOf("Apple")!==0){m(y,D,true)}}w()}function m(G,D,E){var C=[];for(var B=0;B-1){percentage=parseFloat(v.width.substring(0,v.width.lastIndexOf("%")))/100;B=Math.round(window.innerWidth*percentage)}if(typeof v.height=="string"&&v.height.lastIndexOf("%")>-1){percentage=parseFloat(v.height.substring(0,v.height.lastIndexOf("%")))/100;C=Math.round(window.innerHeight*percentage)}return{position:"absolute",width:(B-h(q.style.left)-h(q.style.right)),height:(C-h(q.style.top)-h(q.style.bottom)),zIndex:E}}function y(B,C){return{position:"fixed",width:v.width,height:v.height,zIndex:C}}function w(){q.style.position="absolute";v.getMedia().getDisplayElement().style.position="absolute";if(v.getMedia().getDisplayElement().videoWidth==0||v.getMedia().getDisplayElement().videoHeight==0){return}var B,D;if(q.style.width.toString().lastIndexOf("%")>-1||q.style.width.toString().lastIndexOf("%")>-1){var C=q.getBoundingClientRect();B=Math.abs(C.left)+Math.abs(C.right);D=Math.abs(C.top)+Math.abs(C.bottom)}else{B=h(q.style.width);D=h(q.style.height)}b.utils.stretch(s.jwGetStretching(),v.getMedia().getDisplayElement(),B,D,v.getMedia().getDisplayElement().videoWidth,v.getMedia().getDisplayElement().videoHeight)}function d(C){var D={position:"absolute",margin:0,padding:0,top:null};var B=v.plugins.config[C].currentPosition.toLowerCase();switch(B.toUpperCase()){case b.html5.view.positions.TOP:D.top=h(q.style.top);D.left=h(q.style.left);D.width=f-h(q.style.left)-h(q.style.right);D.height=v.plugins.object[C].height;q.style[B]=h(q.style[B])+v.plugins.object[C].height+"px";q.style.height=h(q.style.height)-D.height+"px";break;case b.html5.view.positions.RIGHT:D.top=h(q.style.top);D.right=h(q.style.right);D.width=D.width=v.plugins.object[C].width;D.height=z-h(q.style.top)-h(q.style.bottom);q.style[B]=h(q.style[B])+v.plugins.object[C].width+"px";q.style.width=h(q.style.width)-D.width+"px";break;case b.html5.view.positions.BOTTOM:D.bottom=h(q.style.bottom);D.left=h(q.style.left);D.width=f-h(q.style.left)-h(q.style.right);D.height=v.plugins.object[C].height;q.style[B]=h(q.style[B])+v.plugins.object[C].height+"px";q.style.height=h(q.style.height)-D.height+"px";break;case b.html5.view.positions.LEFT:D.top=h(q.style.top);D.left=h(q.style.left);D.width=v.plugins.object[C].width;D.height=z-h(q.style.top)-h(q.style.bottom);q.style[B]=h(q.style[B])+v.plugins.object[C].width+"px";q.style.width=h(q.style.width)-D.width+"px";break;default:break}return D}this.resize=i;this.fullscreen=function(E){if(navigator.vendor.indexOf("Apple")===0){if(v.getMedia().getDisplayElement().webkitSupportsFullscreen){if(E){try{v.getMedia().getDisplayElement().webkitEnterFullscreen()}catch(D){}}else{try{v.getMedia().getDisplayElement().webkitExitFullscreen()}catch(D){}}}}else{if(E){document.onkeydown=g;clearInterval(n);var C=document.body.getBoundingClientRect();v.width=Math.abs(C.left)+Math.abs(C.right);v.height=window.innerHeight;var B={position:"fixed",width:"100%",height:"100%",top:0,left:0,zIndex:2147483000};c(u,B);B.zIndex=1;c(v.getMedia().getDisplayElement(),B);B.zIndex=2;c(q,B)}else{document.onkeydown="";v.width=f;v.height=z;c(u,{position:"relative",height:v.height,width:v.width,zIndex:0})}i(v.width,v.height)}}};function a(d){return([b.html5.view.positions.TOP,b.html5.view.positions.RIGHT,b.html5.view.positions.BOTTOM,b.html5.view.positions.LEFT].toString().indexOf(d.toUpperCase())>-1)}b.html5.view.positions={TOP:"TOP",RIGHT:"RIGHT",BOTTOM:"BOTTOM",LEFT:"LEFT",OVER:"OVER",NONE:"NONE"}})(jwplayer);(function(a){var b={backgroundcolor:"",margin:10,font:"Arial,sans-serif",fontsize:10,fontcolor:parseInt("000000",16),fontstyle:"normal",fontweight:"bold",buttoncolor:parseInt("ffffff",16),position:a.html5.view.positions.BOTTOM,idlehide:false,layout:{left:{position:"left",elements:[{name:"play",type:"button"},{name:"divider",type:"divider"},{name:"prev",type:"button"},{name:"divider",type:"divider"},{name:"next",type:"button"},{name:"divider",type:"divider"},{name:"elapsed",type:"text"}]},center:{position:"center",elements:[{name:"time",type:"slider"}]},right:{position:"right",elements:[{name:"duration",type:"text"},{name:"blank",type:"button"},{name:"divider",type:"divider"},{name:"mute",type:"button"},{name:"volume",type:"slider"},{name:"divider",type:"divider"},{name:"fullscreen",type:"button"}]}}};_css=a.utils.css;_hide=function(c){_css(c,{display:"none"})};_show=function(c){_css(c,{display:"block"})};a.html5.controlbar=function(j,L){var i=j;var A=a.utils.extend({},b,i.skin.getComponentSettings("controlbar"),L);if(A.position==a.html5.view.positions.NONE||typeof a.html5.view.positions[A.position]=="undefined"){return}if(a.utils.mapLength(i.skin.getComponentLayout("controlbar"))>0){A.layout=i.skin.getComponentLayout("controlbar")}var P;var I;var O;var B;var t="none";var f;var h;var Q;var e;var d;var w;var s;var J={};var n=false;var c={};function H(){O=0;B=0;I=0;if(!n){var V={height:i.skin.getSkinElement("controlbar","background").height,backgroundColor:A.backgroundcolor};P=document.createElement("div");P.id=i.id+"_jwplayer_controlbar";_css(P,V)}v("capLeft","left",false,P);var W={position:"absolute",height:i.skin.getSkinElement("controlbar","background").height,left:i.skin.getSkinElement("controlbar","capLeft").width,zIndex:0};N("background",P,W,"img");if(i.skin.getSkinElement("controlbar","background")){J.background.src=i.skin.getSkinElement("controlbar","background").src}W.zIndex=1;N("elements",P,W);v("capRight","right",false,P)}this.getDisplayElement=function(){return P};this.resize=function(X,V){a.utils.cancelAnimation(P);document.getElementById(i.id).onmousemove=x;d=X;w=V;x();var W=u();D({id:i.id,duration:Q,position:h});r({id:i.id,bufferPercent:e});return W};function o(){var W=["timeSlider","volumeSlider","timeSliderRail","volumeSliderRail"];for(var X in W){var V=W[X];if(typeof J[V]!="undefined"){c[V]=J[V].getBoundingClientRect()}}}function x(){a.utils.cancelAnimation(P);if(g()){a.utils.fadeTo(P,1,0,1,0)}else{a.utils.fadeTo(P,0,0.1,1,2)}}function g(){if(i.jwGetState()==a.api.events.state.IDLE||i.jwGetState()==a.api.events.state.PAUSED){if(A.idlehide){return false}return true}if(i.jwGetFullscreen()){return false}if(A.position==a.html5.view.positions.OVER){return false}return true}function N(Z,Y,X,V){var W;if(!n){if(!V){V="div"}W=document.createElement(V);J[Z]=W;W.id=P.id+"_"+Z;Y.appendChild(W)}else{W=document.getElementById(P.id+"_"+Z)}if(X!==undefined){_css(W,X)}return W}function G(){U(A.layout.left);U(A.layout.right,-1);U(A.layout.center)}function U(Y,V){var Z=Y.position=="right"?"right":"left";var X=a.utils.extend([],Y.elements);if(V!==undefined){X.reverse()}for(var W=0;W0||X.indexOf("divider")===0)&&!(X.indexOf("divider")===0&&s.indexOf("divider")===0)){s=X;var Z={height:i.skin.getSkinElement("controlbar","background").height,position:"absolute",display:"block",top:0};if((X.indexOf("next")===0||X.indexOf("prev")===0)&&i.jwGetPlaylist().length<2){W=false;Z.display="none"}var ad;if(X.indexOf("Text")>0){X.innerhtml="00:00";Z.font=A.fontsize+"px/"+(i.skin.getSkinElement("controlbar","background").height+1)+"px "+A.font;Z.color=A.fontcolor;Z.textAlign="center";Z.fontWeight=A.fontweight;Z.fontStyle=A.fontstyle;Z.cursor="default";ad=14+3*A.fontsize}else{if(X.indexOf("divider")===0){if(V){if(!isNaN(parseInt(V))){ad=parseInt(V)}}else{Z.background="url("+i.skin.getSkinElement("controlbar","divider").src+") repeat-x center left";ad=i.skin.getSkinElement("controlbar","divider").width}}else{Z.background="url("+i.skin.getSkinElement("controlbar",X).src+") repeat-x center left";ad=i.skin.getSkinElement("controlbar",X).width}}if(aa=="left"){Z.left=isNaN(Y)?O:Y;if(W){O+=ad}}else{if(aa=="right"){Z.right=isNaN(Y)?B:Y;if(W){B+=ad}}}if(a.utils.typeOf(ac)=="undefined"){ac=J.elements}Z.width=ad;if(n){_css(J[X],Z)}else{var ab=N(X,ac,Z);if(i.skin.getSkinElement("controlbar",X+"Over")!==undefined){ab.onmouseover=function(ae){ab.style.backgroundImage=["url(",i.skin.getSkinElement("controlbar",X+"Over").src,")"].join("")};ab.onmouseout=function(ae){ab.style.backgroundImage=["url(",i.skin.getSkinElement("controlbar",X).src,")"].join("")}}}}}function C(){i.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,y);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_BUFFER,r);i.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,p);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_TIME,D);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,T);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_VOLUME,k);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_COMPLETE,F)}function y(){H();G();u();R()}function R(){D({id:i.id,duration:i.jwGetDuration(),position:0});r({id:i.id,bufferProgress:0});T({id:i.id,mute:i.jwGetMute()});p({id:i.id,newstate:a.api.events.state.IDLE});k({id:i.id,volume:i.jwGetVolume()})}function K(X,Y,W){if(n){return}if(i.skin.getSkinElement("controlbar",X)!==undefined){var V=J[X];if(V!==null){_css(V,{cursor:"pointer"});if(Y=="fullscreen"){V.onmouseup=function(Z){Z.stopPropagation();i.jwSetFullscreen(!i.jwGetFullscreen())}}else{V.onmouseup=function(Z){Z.stopPropagation();if(W!==null){i[Y](W)}else{i[Y]()}}}}}}function M(V){if(n){return}var W=J[V+"Slider"];_css(J.elements,{cursor:"pointer"});_css(W,{cursor:"pointer"});W.onmousedown=function(X){t=V};W.onmouseup=function(X){X.stopPropagation();S(X.pageX)};W.onmousemove=function(X){if(t=="time"){f=true;var Y=X.pageX-c[V+"Slider"].left-window.pageXOffset;_css(J.timeSliderThumb,{left:Y})}}}function S(W){f=false;var V;if(t=="time"){V=W-c.timeSliderRail.left+window.pageXOffset;var Y=V/c.timeSliderRail.width*Q;if(Y<0){Y=0}else{if(Y>Q){Y=Q-3}}i.jwSeek(Y);if(i.jwGetState()!=a.api.events.state.PLAYING){i.jwPlay()}}else{if(t=="volume"){V=W-c.volumeSliderRail.left-window.pageXOffset;var X=Math.round(V/c.volumeSliderRail.width*100);if(X<0){X=0}else{if(X>100){X=100}}if(i.jwGetMute()){i.jwSetMute(false)}i.jwSetVolume(X)}}t="none"}function r(W){if(W.bufferPercent!==null){e=W.bufferPercent}var X=c.timeSliderRail.width;var V=isNaN(Math.round(X*e/100))?0:Math.round(X*e/100);_css(J.timeSliderBuffer,{width:V})}function T(V){if(V.mute){_hide(J.muteButton);_show(J.unmuteButton);_hide(J.volumeSliderProgress)}else{_show(J.muteButton);_hide(J.unmuteButton);_show(J.volumeSliderProgress)}}function p(V){if(V.newstate==a.api.events.state.BUFFERING||V.newstate==a.api.events.state.PLAYING){_show(J.pauseButton);_hide(J.playButton)}else{_hide(J.pauseButton);_show(J.playButton)}x();if(V.newstate==a.api.events.state.IDLE){_hide(J.timeSliderBuffer);_hide(J.timeSliderProgress);_hide(J.timeSliderThumb);D({id:i.id,duration:i.jwGetDuration(),position:0})}else{_show(J.timeSliderBuffer);if(V.newstate!=a.api.events.state.BUFFERING){_show(J.timeSliderProgress);_show(J.timeSliderThumb)}}}function F(V){r({bufferPercent:0});D(a.utils.extend(V,{position:0,duration:Q}))}function D(Y){if(Y.position!==null){h=Y.position}if(Y.duration!==null){Q=Y.duration}var W=(h===Q===0)?0:h/Q;var V=isNaN(Math.round(c.timeSliderRail.width*W))?0:Math.round(c.timeSliderRail.width*W);var X=V;J.timeSliderProgress.style.width=V+"px";if(!f){if(J.timeSliderThumb){J.timeSliderThumb.style.left=X+"px"}}if(J.durationText){J.durationText.innerHTML=m(Q)}if(J.elapsedText){J.elapsedText.innerHTML=m(h)}}function m(V){str="00:00";if(V>0){str=Math.floor(V/60)<10?"0"+Math.floor(V/60)+":":Math.floor(V/60)+":";str+=Math.floor(V%60)<10?"0"+Math.floor(V%60):Math.floor(V%60)}return str}function l(){var Y,W;var X=document.getElementById(P.id+"_elements").childNodes;for(var V in document.getElementById(P.id+"_elements").childNodes){if(isNaN(parseInt(V,10))){continue}if(X[V].id.indexOf(P.id+"_divider")===0&&W.id.indexOf(P.id+"_divider")===0){X[V].style.display="none"}else{if(X[V].id.indexOf(P.id+"_divider")===0&&Y.style.display!="none"){X[V].style.display="block"}}if(X[V].style.display!="none"){W=X[V]}Y=X[V]}}function u(){l();if(i.jwGetFullscreen()){_show(J.normalscreenButton);_hide(J.fullscreenButton)}else{_hide(J.normalscreenButton);_show(J.fullscreenButton)}var W={width:d};var V={};if(A.position==a.html5.view.positions.OVER||i.jwGetFullscreen()){W.left=A.margin;W.width-=2*A.margin;W.top=w-i.skin.getSkinElement("controlbar","background").height-A.margin;W.height=i.skin.getSkinElement("controlbar","background").height}else{W.left=0}V.left=i.skin.getSkinElement("controlbar","capLeft").width;V.width=W.width-i.skin.getSkinElement("controlbar","capLeft").width-i.skin.getSkinElement("controlbar","capRight").width;var X=i.skin.getSkinElement("controlbar","timeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","timeSliderCapLeft").width;_css(J.timeSliderRail,{width:(V.width-O-B),left:X});if(J.timeSliderCapRight!==undefined){_css(J.timeSliderCapRight,{left:X+(V.width-O-B)})}_css(P,W);_css(J.elements,V);_css(J.background,V);o();return W}function k(Z){if(J.volumeSliderRail!==undefined){var X=isNaN(Z.volume/100)?1:Z.volume/100;var Y=parseInt(J.volumeSliderRail.style.width.replace("px",""),10);var V=isNaN(Math.round(Y*X))?0:Math.round(Y*X);var aa=parseInt(J.volumeSliderRail.style.right.replace("px",""),10);var W=i.skin.getSkinElement("controlbar","volumeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","volumeSliderCapLeft").width;_css(J.volumeSliderProgress,{width:V,left:W});if(J.volumeSliderCapLeft!==undefined){_css(J.volumeSliderCapLeft,{left:0})}}}function q(){H();G();o();n=true;C();R();P.style.opacity=A.idlehide?0:1}q();return this}})(jwplayer);(function(b){var a=["width","height","state","playlist","item","position","buffer","duration","volume","mute","fullscreen"];b.html5.controller=function(t,r,e,q){var w=t;var y=e;var d=q;var k=r;var A=true;var c=-1;var u=(y.config.debug!==undefined)&&(y.config.debug.toString().toLowerCase()=="console");var i=new b.html5.eventdispatcher(k.id,u);b.utils.extend(this,i);function m(D){i.sendEvent(D.type,D)}y.addGlobalListener(m);function p(){try{if(y.playlist[y.item].levels[0].file.length>0){if(A||y.state==b.api.events.state.IDLE){y.addEventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,function(){y.getMedia().play()});y.addEventListener(b.api.events.JWPLAYER_MEDIA_TIME,function(E){if(E.position>=y.playlist[y.item].start&&c>=0){y.playlist[y.item].start=c;c=-1}});if(y.config.repeat){y.addEventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,function(E){setTimeout(n,25)})}y.getMedia().load(y.playlist[y.item]);A=false}else{if(y.state==b.api.events.state.PAUSED){y.getMedia().play()}}}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function B(){try{if(y.playlist[y.item].levels[0].file.length>0){switch(y.state){case b.api.events.state.PLAYING:case b.api.events.state.BUFFERING:y.getMedia().pause();break}}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function x(D){try{if(y.playlist[y.item].levels[0].file.length>0){if(typeof D!="number"){D=parseFloat(D)}switch(y.state){case b.api.events.state.IDLE:if(c<0){c=y.playlist[y.item].start;y.playlist[y.item].start=D}p();break;case b.api.events.state.PLAYING:case b.api.events.state.PAUSED:case b.api.events.state.BUFFERING:y.getMedia().seek(D);break}}return true}catch(E){i.sendEvent(b.api.events.JWPLAYER_ERROR,E)}return false}function j(){try{if(y.playlist[y.item].levels[0].file.length>0&&y.state!=b.api.events.state.IDLE){y.getMedia().stop()}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function g(){try{if(y.playlist[y.item].levels[0].file.length>0){if(y.config.shuffle){o(s())}else{if(y.item+1==y.playlist.length){o(0)}else{o(y.item+1)}}}if(y.state!=b.api.events.state.PLAYING&&y.state!=b.api.events.state.BUFFERING){p()}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function f(){try{if(y.playlist[y.item].levels[0].file.length>0){if(y.config.shuffle){o(s())}else{if(y.item===0){o(y.playlist.length-1)}else{o(y.item-1)}}}if(y.state!=b.api.events.state.PLAYING&&y.state!=b.api.events.state.BUFFERING){p()}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function s(){var D=null;if(y.playlist.length>1){while(D===null){D=Math.floor(Math.random()*y.playlist.length);if(D==y.item){D=null}}}else{D=0}return D}function o(E){y.resetEventListeners();y.addGlobalListener(m);try{if(y.playlist[E].levels[0].file.length>0){var F=y.state;if(F!==b.api.events.state.IDLE){j()}y.item=E;A=true;y.setActiveMediaProvider(y.playlist[y.item]);i.sendEvent(b.api.events.JWPLAYER_PLAYLIST_ITEM,{index:E});if(F==b.api.events.state.PLAYING||F==b.api.events.state.BUFFERING||y.config.chromeless||e.config.autostart===true){p()}}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function z(E){try{switch(typeof(E)){case"number":y.getMedia().volume(E);break;case"string":y.getMedia().volume(parseInt(E,10));break}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function l(E){try{if(typeof E=="undefined"){y.getMedia().mute(!y.mute)}else{if(E.toString().toLowerCase()=="true"){y.getMedia().mute(true)}else{y.getMedia().mute(false)}}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function h(E,D){try{y.width=E;y.height=D;d.resize(E,D);i.sendEvent(b.api.events.JWPLAYER_RESIZE,{width:y.width,height:y.height});return true}catch(F){i.sendEvent(b.api.events.JWPLAYER_ERROR,F)}return false}function v(E){try{if(typeof E=="undefined"){y.fullscreen=!y.fullscreen;d.fullscreen(!y.fullscreen)}else{if(E.toString().toLowerCase()=="true"){y.fullscreen=true;d.fullscreen(true)}else{y.fullscreen=false;d.fullscreen(false)}}i.sendEvent(b.api.events.JWPLAYER_RESIZE,{width:y.width,height:y.height});i.sendEvent(b.api.events.JWPLAYER_FULLSCREEN,{fullscreen:E});return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function C(D){try{j();y.loadPlaylist(D);o(y.item);return true}catch(E){i.sendEvent(b.api.events.JWPLAYER_ERROR,E)}return false}b.html5.controller.repeatoptions={LIST:"LIST",ALWAYS:"ALWAYS",SINGLE:"SINGLE",NONE:"NONE"};function n(){y.resetEventListeners();y.addGlobalListener(m);switch(y.config.repeat.toUpperCase()){case b.html5.controller.repeatoptions.SINGLE:p();break;case b.html5.controller.repeatoptions.ALWAYS:if(y.item==y.playlist.length-1&&!y.config.shuffle){o(0);p()}else{g()}break;case b.html5.controller.repeatoptions.LIST:if(y.item==y.playlist.length-1&&!y.config.shuffle){o(0)}else{g()}break}}this.play=p;this.pause=B;this.seek=x;this.stop=j;this.next=g;this.prev=f;this.item=o;this.setVolume=z;this.setMute=l;this.resize=h;this.setFullscreen=v;this.load=C}})(jwplayer);(function(a){a.html5.defaultSkin=function(){this.text='';this.xml=null;if(window.DOMParser){parser=new DOMParser();this.xml=parser.parseFromString(this.text,"text/xml")}else{this.xml=new ActiveXObject("Microsoft.XMLDOM");this.xml.async="false";this.xml.loadXML(this.text)}return this}})(jwplayer);(function(a){_css=a.utils.css;_hide=function(b){_css(b,{display:"none"})};_show=function(b){_css(b,{display:"block"})};a.html5.display=function(o,z){var r={icons:true};var j=a.utils.extend({},r,z);var w=o;var d={};var f;var A;var k;var x;var y;var p;var i;var n=w.skin.getComponentSettings("display").bufferrotation===undefined?15:parseInt(w.skin.getComponentSettings("display").bufferrotation,10);var e=w.skin.getComponentSettings("display").bufferinterval===undefined?100:parseInt(w.skin.getComponentSettings("display").bufferinterval,10);var c={display:{style:{cursor:"pointer",top:0,left:0,overflow:"hidden"},click:u},display_icon:{style:{cursor:"pointer",position:"absolute",top:((w.skin.getSkinElement("display","background").height-w.skin.getSkinElement("display","playIcon").height)/2),left:((w.skin.getSkinElement("display","background").width-w.skin.getSkinElement("display","playIcon").width)/2),border:0,margin:0,padding:0,zIndex:3}},display_iconBackground:{style:{cursor:"pointer",position:"absolute",top:((A-w.skin.getSkinElement("display","background").height)/2),left:((f-w.skin.getSkinElement("display","background").width)/2),border:0,backgroundImage:(["url(",w.skin.getSkinElement("display","background").src,")"]).join(""),width:w.skin.getSkinElement("display","background").width,height:w.skin.getSkinElement("display","background").height,margin:0,padding:0,zIndex:2}},display_image:{style:{display:"none",width:f,height:A,position:"absolute",cursor:"pointer",left:0,top:0,margin:0,padding:0,textDecoration:"none",zIndex:1}},display_text:{style:{zIndex:4,position:"relative",opacity:0.8,backgroundColor:parseInt("000000",16),color:parseInt("ffffff",16),textAlign:"center",fontFamily:"Arial,sans-serif",padding:"0 5px",fontSize:14}}};w.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,l);w.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,l);w.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM,l);w.jwAddEventListener(a.api.events.JWPLAYER_ERROR,t);B();function B(){d.display=s("div","display");d.display_text=s("div","display_text");d.display.appendChild(d.display_text);d.display_image=s("img","display_image");d.display_image.onerror=function(C){_hide(d.display_image)};d.display_image.onload=m;d.display_icon=s("div","display_icon");d.display_iconBackground=s("div","display_iconBackground");d.display.appendChild(d.display_image);d.display_iconBackground.appendChild(d.display_icon);d.display.appendChild(d.display_iconBackground);b()}this.getDisplayElement=function(){return d.display};this.resize=function(D,C){f=D;A=C;_css(d.display,{width:D,height:C});_css(d.display_text,{width:(D-10),top:((A-d.display_text.getBoundingClientRect().height)/2)});_css(d.display_iconBackground,{top:((A-w.skin.getSkinElement("display","background").height)/2),left:((f-w.skin.getSkinElement("display","background").width)/2)});h();l({})};function m(C){k=d.display_image.naturalWidth;x=d.display_image.naturalHeight;h()}function h(){a.utils.stretch(w.jwGetStretching(),d.display_image,f,A,k,x)}function s(C,E){var D=document.createElement(C);D.id=w.id+"_jwplayer_"+E;_css(D,c[E].style);return D}function b(){for(var C in d){if(c[C].click!==undefined){d[C].onclick=c[C].click}}}function u(C){if(typeof C.preventDefault!="undefined"){C.preventDefault()}else{C.returnValue=false}if(w.jwGetState()!=a.api.events.state.PLAYING){w.jwPlay()}else{w.jwPause()}}function g(C){if(i||!j.icons){q();return}_show(d.display_iconBackground);d.display_icon.style.backgroundImage=(["url(",w.skin.getSkinElement("display",C).src,")"]).join("");_css(d.display_icon,{display:"block",width:w.skin.getSkinElement("display",C).width,height:w.skin.getSkinElement("display",C).height,top:(w.skin.getSkinElement("display","background").height-w.skin.getSkinElement("display",C).height)/2,left:(w.skin.getSkinElement("display","background").width-w.skin.getSkinElement("display",C).width)/2});if(w.skin.getSkinElement("display",C+"Over")!==undefined){d.display_icon.onmouseover=function(D){d.display_icon.style.backgroundImage=["url(",w.skin.getSkinElement("display",C+"Over").src,")"].join("")};d.display_icon.onmouseout=function(D){d.display_icon.style.backgroundImage=["url(",w.skin.getSkinElement("display",C).src,")"].join("")}}else{d.display_icon.onmouseover=null;d.display_icon.onmouseout=null}}function q(){_hide(d.display_icon);_hide(d.display_iconBackground)}function t(C){i=true;q();d.display_text.innerHTML=C.error;_show(d.display_text);d.display_text.style.top=((A-d.display_text.getBoundingClientRect().height)/2)+"px"}function v(){var C=d.display_image;d.display_image=s("img","display_image");d.display_image.onerror=function(D){_hide(d.display_image)};d.display_image.onload=m;d.display.replaceChild(d.display_image,C)}function l(C){if((C.type==a.api.events.JWPLAYER_PLAYER_STATE||C.type==a.api.events.JWPLAYER_PLAYLIST_ITEM)&&i){i=false;_hide(d.display_text)}if(p!==undefined){clearInterval(p);p=null;a.utils.animations.rotate(d.display_icon,0)}switch(w.jwGetState()){case a.api.events.state.BUFFERING:g("bufferIcon");y=0;p=setInterval(function(){y+=n;a.utils.animations.rotate(d.display_icon,y%360)},e);g("bufferIcon");break;case a.api.events.state.PAUSED:_css(d.display_image,{background:"transparent no-repeat center center"});g("playIcon");break;case a.api.events.state.IDLE:if(w.jwGetPlaylist()[w.jwGetItem()].image){_css(d.display_image,{display:"block"});d.display_image.src=a.utils.getAbsolutePath(w.jwGetPlaylist()[w.jwGetItem()].image)}else{v()}g("playIcon");break;default:if(w.jwGetMute()){v();g("muteIcon")}else{v();_hide(d.display_iconBackground);_hide(d.display_icon)}break}}return this}})(jwplayer);(function(a){a.html5.dock=function(g,c){function f(){return{align:a.html5.view.positions.RIGHT}}var k=a.utils.extend({},f(),c);if(k.align=="FALSE"){return}var h={};var b=[];var d;var e;var j=document.createElement("div");j.id=g.id+"_jwplayer_dock";this.getDisplayElement=function(){return j};this.setButton=function(o,l,m,n){if(!l&&h[o]){a.utils.arrays.remove(b,o);j.removeChild(h[o].div);delete h[o]}else{if(l){if(!h[o]){h[o]={}}h[o].handler=l;h[o].outGraphic=m;h[o].overGraphic=n;if(!h[o].div){b.push(o);h[o].div=document.createElement("div");h[o].div.style.position="relative";j.appendChild(h[o].div);h[o].div.appendChild(document.createElement("img"));h[o].div.childNodes[0].style.position="absolute";h[o].div.childNodes[0].style.left=0;h[o].div.childNodes[0].style.top=0;h[o].div.childNodes[0].style.zIndex=10;h[o].div.childNodes[0].style.cursor="pointer";h[o].div.appendChild(document.createElement("img"));h[o].div.childNodes[1].style.position="absolute";h[o].div.childNodes[1].style.left=0;h[o].div.childNodes[1].style.top=0;if(g.skin.getSkinElement("dock","button")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","button").src}h[o].div.childNodes[1].style.zIndex=9;h[o].div.childNodes[1].style.cursor="pointer";h[o].div.onmouseover=function(){if(h[o].overGraphic){h[o].div.childNodes[0].src=h[o].overGraphic}if(g.skin.getSkinElement("dock","buttonOver")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","buttonOver").src}};h[o].div.onmouseout=function(){if(h[o].outGraphic){h[o].div.childNodes[0].src=h[o].outGraphic}if(g.skin.getSkinElement("dock","button")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","button").src}};if(h[o].overGraphic){h[o].div.childNodes[0].src=h[o].overGraphic}if(h[o].outGraphic){h[o].div.childNodes[0].src=h[o].outGraphic}if(g.skin.getSkinElement("dock","button")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","button").src}}if(l){h[o].div.onclick=function(p){p.preventDefault();a(g.id).callback(o);if(h[o].overGraphic){h[o].div.childNodes[0].src=h[o].overGraphic}if(g.skin.getSkinElement("dock","button")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","button").src}}}}}i(d,e)};function i(n,l){d=n;e=l;if(b.length>0){var p=10;var r=n-g.skin.getSkinElement("dock","button").width-p;var o=p;var q=-1;if(k.align==a.html5.view.positions.LEFT){q=1;r=p}for(var m=0;m((s+1)*l)){o=((s+1)*l)+p;s=Math.floor(o/l)}h[b[m]].div.style.top=(o%l)+"px";h[b[m]].div.style.left=(r+(g.skin.getSkinElement("dock","button").width+p)*s*q)+"px";o+=g.skin.getSkinElement("dock","button").height+p}}}this.resize=i;return this}})(jwplayer);(function(a){a.html5.eventdispatcher=function(d,b){var c=new a.events.eventdispatcher(b);a.utils.extend(this,c);this.sendEvent=function(e,f){if(f===undefined){f={}}a.utils.extend(f,{id:d,version:a.version,type:e});c.sendEvent(e,f)}}})(jwplayer);(function(a){var b={prefix:"http://l.longtailvideo.com/html5/",file:"logo.png",link:"http://www.longtailvideo.com/players/jw-flv-player/",margin:8,out:0.5,over:1,timeout:3,hide:true,position:"bottom-left"};_css=a.utils.css;a.html5.logo=function(l,m){var r=l;var n;var i;var c;j();function j(){p();d();f()}function p(){if(b.prefix){var t=l.version.split(/\W/).splice(0,2).join("/");if(b.prefix.indexOf(t)<0){b.prefix+=t+"/"}}if(m.position==a.html5.view.positions.OVER){m.position=b.position}i=a.utils.extend({},b)}function d(){c=document.createElement("img");c.id=r.id+"_jwplayer_logo";c.style.display="none";c.onload=function(t){_css(c,q());r.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,s);e()};if(!i.file){return}if(i.file.indexOf("http://")===0){c.src=i.file}else{c.src=i.prefix+i.file}}if(!i.file){return}this.resize=function(u,t){};this.getDisplayElement=function(){return c};function f(){if(i.link){c.onmouseover=h;c.onmouseout=e;c.onclick=o}else{this.mouseEnabled=false}}function o(t){if(typeof t!="undefined"){t.stopPropagation()}r.jwPause();r.jwSetFullscreen(false);if(i.link){window.open(i.link,"_blank")}return}function e(t){if(i.link){c.style.opacity=i.out}return}function h(t){if(i.hide){c.style.opacity=i.over}return}function q(){var v={textDecoration:"none",position:"absolute",cursor:"pointer"};v.display=i.hide?"none":"block";var u=i.position.toLowerCase().split("-");for(var t in u){v[u[t]]=i.margin}return v}function k(){if(i.hide){c.style.display="block";c.style.opacity=0;a.utils.fadeTo(c,i.out,0.1,parseFloat(c.style.opacity));n=setTimeout(function(){g()},i.timeout*1000)}}function g(){if(i.hide){a.utils.fadeTo(c,0,0.1,parseFloat(c.style.opacity))}}function s(t){if(t.newstate==a.api.events.state.BUFFERING){clearTimeout(n);k()}}return this}})(jwplayer);(function(a){var c={ended:a.api.events.state.IDLE,playing:a.api.events.state.PLAYING,pause:a.api.events.state.PAUSED,buffering:a.api.events.state.BUFFERING};var b=a.utils.css;a.html5.mediavideo=function(f,D){var H={abort:t,canplay:m,canplaythrough:m,durationchange:q,emptied:t,ended:m,error:l,loadeddata:q,loadedmetadata:q,loadstart:m,pause:m,play:K,playing:m,progress:A,ratechange:t,seeked:m,seeking:m,stalled:m,suspend:m,timeupdate:K,volumechange:t,waiting:m,canshowcurrentframe:t,dataunavailable:t,empty:t,load:e,loadedfirstframe:t};var I=new a.html5.eventdispatcher();a.utils.extend(this,I);var h=f;var x=D;var E;var G;var d=a.api.events.state.IDLE;var B=null;var n;var g=0;var z=false;var r=false;var M;var L;var i=[];var N;var C=false;function v(){return d}function e(O){}function t(O){}function m(O){if(c[O.type]){s(c[O.type])}}function s(O){if(C){return}if(n){O=a.api.events.state.IDLE}if(O==a.api.events.state.PAUSED&&d==a.api.events.state.IDLE){return}if(O==a.api.events.state.PLAYING&&d==a.api.events.state.IDLE){s(a.api.events.state.BUFFERING);I.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:h.buffer});y();return}if(d!=O){var P=d;h.state=O;d=O;var Q=false;if(O==a.api.events.state.IDLE){p();if(h.position>=h.duration&&(h.position||h.duration)){Q=true}if(x.style.display!="none"&&!h.config.chromeless){x.style.display="none"}}I.sendEvent(a.api.events.JWPLAYER_PLAYER_STATE,{oldstate:P,newstate:O});if(Q){I.sendEvent(a.api.events.JWPLAYER_MEDIA_COMPLETE)}}n=false}function q(O){var P={height:O.target.videoHeight,width:O.target.videoWidth,duration:Math.round(O.target.duration*10)/10};if(h.duration===0||isNaN(h.duration)){h.duration=Math.round(O.target.duration*10)/10}h.playlist[h.item]=a.utils.extend(h.playlist[h.item],P);I.sendEvent(a.api.events.JWPLAYER_MEDIA_META,{metadata:P})}function K(P){if(n){return}if(P!==undefined&&P.target!==undefined){if(h.duration===0||isNaN(h.duration)){h.duration=Math.round(P.target.duration*10)/10}if(!z&&x.readyState>0){s(a.api.events.state.PLAYING)}if(d==a.api.events.state.PLAYING){if(!z&&x.readyState>0){z=true;try{x.currentTime=h.playlist[h.item].start}catch(O){}x.volume=h.volume/100;x.muted=h.mute}h.position=Math.round(P.target.currentTime*10)/10;I.sendEvent(a.api.events.JWPLAYER_MEDIA_TIME,{position:P.target.currentTime,duration:P.target.duration})}}A(P)}function y(){if(E===false&&d==a.api.events.state.BUFFERING){I.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER_FULL);E=true}}function F(){var O=(i[i.length-1]-i[0])/i.length;N=setTimeout(function(){if(!G){A({lengthComputable:true,loaded:1,total:1})}},O*10)}function A(Q){var P,O;if(Q!==undefined&&Q.lengthComputable&&Q.total){o();P=Q.loaded/Q.total*100;O=P/100*(h.duration-x.currentTime);if(500)){maxBufferIndex=0;if(maxBufferIndex>=0){P=x.buffered.end(maxBufferIndex)/x.duration*100;O=x.buffered.end(maxBufferIndex)-x.currentTime}}}y();if(!G){if(P==100&&G===false){G=true}if(P!==null&&(P>h.buffer)){h.buffer=Math.round(P);I.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:Math.round(P)})}}}function w(){if(B===null){B=setInterval(function(){K()},100)}}function p(){clearInterval(B);B=null}function l(Q){var P="There was an error: ";if((Q.target.error&&Q.target.tagName.toLowerCase()=="video")||Q.target.parentNode.error&&Q.target.parentNode.tagName.toLowerCase()=="video"){var O=Q.target.error===undefined?Q.target.parentNode.error:Q.target.error;switch(O.code){case O.MEDIA_ERR_ABORTED:P="You aborted the video playback: ";break;case O.MEDIA_ERR_NETWORK:P="A network error caused the video download to fail part-way: ";break;case O.MEDIA_ERR_DECODE:P="The video playback was aborted due to a corruption problem or because the video used features your browser did not support: ";break;case O.MEDIA_ERR_SRC_NOT_SUPPORTED:P="The video could not be loaded, either because the server or network failed or because the format is not supported: ";break;default:P="An unknown error occurred: ";break}}else{if(Q.target.tagName.toLowerCase()=="source"){L--;if(L>0){return}P="The video could not be loaded, either because the server or network failed or because the format is not supported: "}else{a.utils.log("Erroneous error received. Continuing...");return}}u();P+=j();C=true;I.sendEvent(a.api.events.JWPLAYER_ERROR,{error:P});return}function j(){var Q="";for(var P in M.levels){var O=M.levels[P];var R=x.ownerDocument.createElement("source");Q+=a.utils.getAbsolutePath(O.file);if(P<(M.levels.length-1)){Q+=", "}}return Q}this.getDisplayElement=function(){return x};this.play=function(){if(d!=a.api.events.state.PLAYING){if(x.style.display!="block"){x.style.display="block"}x.play();w();if(E){s(a.api.events.state.PLAYING)}}};this.pause=function(){x.pause();s(a.api.events.state.PAUSED)};this.seek=function(O){if(!(h.duration===0||isNaN(h.duration))&&!(h.position===0||isNaN(h.position))){x.currentTime=O;x.play()}};function u(){x.pause();p();h.position=0;n=true;s(a.api.events.state.IDLE)}this.stop=u;this.volume=function(O){x.volume=O/100;h.volume=O;I.sendEvent(a.api.events.JWPLAYER_MEDIA_VOLUME,{volume:Math.round(O)})};this.mute=function(O){x.muted=O;h.mute=O;I.sendEvent(a.api.events.JWPLAYER_MEDIA_MUTE,{mute:O})};this.resize=function(P,O){if(false){b(x,{width:P,height:O})}I.sendEvent(a.api.events.JWPLAYER_MEDIA_RESIZE,{fullscreen:h.fullscreen,width:P,hieght:O})};this.fullscreen=function(O){if(O===true){this.resize("100%","100%")}else{this.resize(h.config.width,h.config.height)}};this.load=function(O){J(O);I.sendEvent(a.api.events.JWPLAYER_MEDIA_LOADED);E=false;G=false;z=false;if(!h.config.chromeless&&!r){i=[];o();s(a.api.events.state.BUFFERING);setTimeout(function(){K()},25)}};function o(){var O=new Date().getTime();i.push(O)}this.hasChrome=function(){return r};function J(V){h.duration=V.duration;r=false;M=V;var Q=document.createElement("video");Q.preload="none";C=false;L=0;for(var P=0;P=_model.playlist.length){_model.config.item=_model.playlist.length-1}else{if(_model.config.item<0){_model.config.item=0}}_model.item=_model.config.item}if(!ready){_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED,{playlist:_model.playlist})}_model.setActiveMediaProvider(_model.playlist[_model.item])};function _getShuffleItem(){var result=null;if(_model.playlist.length>1){while(result===null){result=Math.floor(Math.random()*_model.playlist.length);if(result==_model.item){result=null}}}else{result=0}return result}function forward(evt){if(evt.type==jwplayer.api.events.JWPLAYER_MEDIA_LOADED){_container=_media.getDisplayElement()}_eventDispatcher.sendEvent(evt.type,evt)}_model.setActiveMediaProvider=function(playlistItem){if(_media!==undefined){_media.resetEventListeners()}_media=new jwplayer.html5.mediavideo(_model,_container);_media.addGlobalListener(forward);if(_model.config.chromeless){_media.load(playlistItem)}return true};_model.getMedia=function(){return _media};_model.setupPlugins=function(){for(var plugin in _model.plugins.order){try{var pluginName=_model.plugins.order[plugin];if(jwplayer.html5[pluginName]!==undefined){_model.plugins.object[pluginName]=new jwplayer.html5[pluginName](_api,_model.plugins.config[pluginName])}else{_model.plugins.order.splice(plugin,plugin+1)}}catch(err){jwplayer.utils.log("Could not setup "+pluginName)}}};return _model}})(jwplayer);(function(a){a.html5.playlist=function(b){var d=[];if(b.playlist&&b.playlist instanceof Array&&b.playlist.length>0){for(var c in b.playlist){if(!isNaN(parseInt(c))){d.push(new a.html5.playlistitem(b.playlist[c]))}}}else{d.push(new a.html5.playlistitem(b))}return d}})(jwplayer);(function(a){a.html5.playlistitem=function(c){var b={author:"",date:"",description:"",image:"",link:"",mediaid:"",tags:"",title:"",provider:"",file:"",streamer:"",duration:-1,start:0,currentLevel:-1,levels:[]};for(var d in b){if(c[d]!==undefined){b[d]=c[d]}}if(b.levels.length===0){b.levels[0]=new a.html5.playlistitemlevel(b)}return b}})(jwplayer);(function(a){a.html5.playlistitemlevel=function(b){var d={file:"",streamer:"",bitrate:0,width:0};for(var c in d){if(b[c]!==undefined){d[c]=b[c]}}return d}})(jwplayer);(function(a){a.html5.skin=function(){var b={};var c=false;this.load=function(d,e){new a.html5.skinloader(d,function(f){c=true;b=f;e()},function(){new a.html5.skinloader("",function(f){c=true;b=f;e()})})};this.getSkinElement=function(d,e){if(c){try{return b[d].elements[e]}catch(f){a.utils.log("No such skin component / element: ",[d,e])}}return null};this.getComponentSettings=function(d){if(c){return b[d].settings}return null};this.getComponentLayout=function(d){if(c){return b[d].layout}return null}}})(jwplayer);(function(a){a.html5.skinloader=function(f,n,i){var m={};var c=n;var j=i;var e=true;var h;var l=f;var q=false;function k(){if(typeof l!="string"||l===""){d(a.html5.defaultSkin().xml)}else{a.utils.ajax(a.utils.getAbsolutePath(l),function(r){try{if(r.responseXML!==null){d(r.responseXML);return}}catch(s){}d(a.html5.defaultSkin().xml)},function(r){d(a.html5.defaultSkin().xml)})}}function d(w){var C=w.getElementsByTagName("component");if(C.length===0){return}for(var F=0;F0){var I=x.getElementsByTagName("setting");for(var N=0;N0){var K=J.getElementsByTagName("group");for(var u=0;u Date: Wed, 16 Apr 2014 16:15:04 +0200 Subject: embed flash stream on our stream page. --- web/stream.gathering.org/index.tmpl | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'web') diff --git a/web/stream.gathering.org/index.tmpl b/web/stream.gathering.org/index.tmpl index 853577b..131d474 100644 --- a/web/stream.gathering.org/index.tmpl +++ b/web/stream.gathering.org/index.tmpl @@ -2,11 +2,18 @@ The Gathering <TMPL_VAR NAME=TG_FULL> Streams +

The Gathering Streams

+ +

 

-- cgit v1.2.3 From 4cd076ec9982c9dc02f248def4ef3aef59a1c2b0 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 16 Apr 2014 16:17:00 +0200 Subject: removed unused files --- web/stream.gathering.org/index-bak.pl | 67 --------------------------------- web/stream.gathering.org/index-bak.tmpl | 31 --------------- 2 files changed, 98 deletions(-) delete mode 100755 web/stream.gathering.org/index-bak.pl delete mode 100644 web/stream.gathering.org/index-bak.tmpl (limited to 'web') diff --git a/web/stream.gathering.org/index-bak.pl b/web/stream.gathering.org/index-bak.pl deleted file mode 100755 index 3e31107..0000000 --- a/web/stream.gathering.org/index-bak.pl +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/perl -I /srv/streamlib -use warnings; -use strict; -use CGI; -use Geo::IP; -use NetAddr::IP; -use Net::IP; -# apt-get install libnet-ip-perl libnetaddr-ip-perl -use HTML::Template; -use stream; -use stream::config; - -my $client = CGI->new; - -my $v4net = $stream::config::v4net; -my $v6net = $stream::config::v6net; -my $tg = $stream::config::tg; -my $tg_full = $stream::config::tg_full; -my %streams = %stream::config::streams; - -my $force_unicast = $client->param('forceunicast'); - -my $location = undef; - -print $client->header(); - -my $clip = $client->remote_addr(); -my $template = HTML::Template->new(filename => 'index.tmpl'); -my $is_local = &is_ip_local($clip, $v4net, $v6net); - -my @streams = &html_local_test(); -$template->param(TG => $tg); -$template->param(TG_FULL => $tg_full); -$template->param(STREAMS => \@streams); -print $template->output(); - - -sub html_local_test() { - my @s = (); - foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { - my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; - my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; - $multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); - - if ($streams{$name}->{external}) { - $title_link = $streams{$name}->{url}; - } else { - $title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); - } - my %hash = ( - 'title_link' => $title_link, - 'title' => $streams{$name}->{title}, - 'source' => $streams{$name}->{source}, - 'delivery' => $multicast_link - ); - if ($multicast_link eq "multicast") { - $hash{'is_multicast'} .= 1; - my $unicast_link = $title_link; - $unicast_link=~s/multicast/unicast/g; - $hash{'unicast_link'} .= $unicast_link; - } - $hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); - push(@s, \%hash); - - } - return @s; -} diff --git a/web/stream.gathering.org/index-bak.tmpl b/web/stream.gathering.org/index-bak.tmpl deleted file mode 100644 index c0aa95d..0000000 --- a/web/stream.gathering.org/index-bak.tmpl +++ /dev/null @@ -1,31 +0,0 @@ - - - The Gathering <TMPL_VAR NAME=TG_FULL> - - - - -
-
-

The Gathering

- -
- - - - - -- cgit v1.2.3