Quellcode durchsuchen

Initial commit

undefined
spaghetti vor 8 Jahren
committed by Tomochin
Ursprung
Commit
69e477b726
20 geänderte Dateien mit 2243 neuen und 0 gelöschten Zeilen
  1. +75
    -0
      design/privatefooter.php
  2. +613
    -0
      design/privateheader.php
  3. +9
    -0
      design/publicfooter.php
  4. +37
    -0
      design/publicheader.php
  5. +159
    -0
      design/views/generic/reply/quickreply.php
  6. +27
    -0
      design/views/generic/reply/staffpm.php
  7. +3
    -0
      design/views/generic/textarea/buttons.phtml
  8. +4
    -0
      design/views/generic/textarea/preview.phtml
  9. +1
    -0
      design/views/generic/textarea/script.phtml
  10. +4
    -0
      design/views/generic/textarea/script_factory.phtml
  11. +4
    -0
      design/views/generic/textarea/textarea.phtml
  12. +850
    -0
      static/styles/global.css
  13. +47
    -0
      static/styles/log.css
  14. +28
    -0
      static/styles/tooltipster/custom.css
  15. +44
    -0
      static/styles/tooltipster/reset.css
  16. +290
    -0
      static/styles/tooltipster/style.css
  17. +12
    -0
      static/styles/tooltipster/themes/tooltipster-light.css
  18. +12
    -0
      static/styles/tooltipster/themes/tooltipster-noir.css
  19. +12
    -0
      static/styles/tooltipster/themes/tooltipster-punk.css
  20. +12
    -0
      static/styles/tooltipster/themes/tooltipster-shadow.css

+ 75
- 0
design/privatefooter.php Datei anzeigen

@@ -0,0 +1,75 @@
</div>
<?php TEXTAREA_PREVIEW::JavaScript(); ?>
<div id="footer">
<? if (!empty($Options['disclaimer'])) { ?>
<br /><br />
<div id="disclaimer_container" class="thin" style="text-align: center; margin-bottom: 20px;">
None of the files shown here are actually hosted on this server. The links are provided solely by this site's users. These BitTorrent files are meant for the distribution of backup files. By downloading the BitTorrent file, you are claiming that you own the original file. The administrator of this site (<?=site_url()?>) holds NO RESPONSIBILITY if these files are misused in any way and cannot be held responsible for what its users post, or any other actions of it.
</div>
<div class='thin'><a href='/canary.php'>Warrant Canary</a></div>
<?
}
if (count($UserSessions) > 1) {
foreach ($UserSessions as $ThisSessionID => $Session) {
if ($ThisSessionID != $SessionID) {
$LastActive = $Session;
break;
}
}
}

$Load = sys_getloadavg();
?>
<p>Site and design &copy; <?=date('Y')?> <?=SITE_NAME?></p>
<? if (!empty($LastActive)) { ?>
<p>
<a href="user.php?action=sessions">
<span class="tooltip" title="Manage sessions">Last activity: </span><?=time_diff($LastActive['LastUpdate'])?><span class="tooltip" title="Manage sessions"> from <?=(apc_exists('DBKEY')?(DBCrypt::decrypt($LastActive['IP'])):'[Encrypted]') ?></span>
</a>
</p>
<? } ?>
<p>
<strong>Time:</strong> <span><?=number_format(((microtime(true) - $ScriptStartTime) * 1000), 5)?> ms</span>
<strong>Used:</strong> <span><?=Format::get_size(memory_get_usage(true))?></span>
<strong>Load:</strong> <span><?=number_format($Load[0], 2).' '.number_format($Load[1], 2).' '.number_format($Load[2], 2)?></span>
<strong>Date:</strong> <span id="site_date"><?=date('M d Y')?></span>, <span id="site_time"><?=date('H:i')?></span>

</p>
</div>
<? if (DEBUG_MODE || check_perms('site_debug')) { ?>
<!-- Begin Debugging -->
<div id="site_debug">
<?
$Debug->perf_table();
$Debug->flag_table();
$Debug->error_table();
$Debug->sphinx_table();
$Debug->query_table();
$Debug->cache_table();
$Debug->vars_table();
$Debug->ocelot_table();
?>
</div>
<!-- End Debugging -->
<? } ?>

</div>
<div id="lightbox" class="lightbox hidden"></div>
<div id="curtain" class="curtain hidden"></div>
<?
global $NotificationSpans;
if (!empty($NotificationSpans)) {
foreach ($NotificationSpans as $Notification) {
echo "$Notification\n";
}
}
?>
<!-- Extra divs, for stylesheet developers to add imagery -->
<div id="extra1"><span></span></div>
<div id="extra2"><span></span></div>
<div id="extra3"><span></span></div>
<div id="extra4"><span></span></div>
<div id="extra5"><span></span></div>
<div id="extra6"><span></span></div>
</body>
</html>

+ 613
- 0
design/privateheader.php Datei anzeigen

@@ -0,0 +1,613 @@
<?

define('FOOTER_FILE', SERVER_ROOT.'/design/privatefooter.php');
$HTTPS = ($_SERVER['SERVER_PORT'] == 443) ? 'ssl_' : '';
$UseTooltipster = !isset(G::$LoggedUser['Tooltipster']) || G::$LoggedUser['Tooltipster'];

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title><?=display_str($PageTitle)?></title>
<meta charset="utf-8" />
<link rel="shortcut icon" href="favicon.ico?v=<?=md5_file('favicon.ico');?>" />
<link rel="search" type="application/opensearchdescription+xml" title="<?=SITE_NAME?>" href="/static/opensearch.xml">
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=feed_news&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - News" />
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=feed_blog&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - Blog" />
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=feed_changelog&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - Gazelle Change Log" />
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=torrents_notify_<?=G::$LoggedUser['torrent_pass']?>&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - P.T.N." />
<?
if (isset(G::$LoggedUser['Notify'])) {
foreach (G::$LoggedUser['Notify'] as $Filter) {
list($FilterID, $FilterName) = $Filter;
?>
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=torrents_notify_<?=$FilterID?>_<?=G::$LoggedUser['torrent_pass']?>&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>&amp;name=<?=urlencode($FilterName)?>"
title="<?=SITE_NAME?> - <?=display_str($FilterName)?>" />
<?
}
}
?>
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=torrents_all&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - All Torrents" />
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=torrents_movies&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - Movie Torrents" />
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=torrents_anime&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - Anime Torrents" />
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=torrents_manga&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - Manga Torrents" />
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=torrents_games&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - Games Torrents" />
<link rel="alternate" type="application/rss+xml"
href="feeds.php?feed=torrents_other&amp;user=<?=G::$LoggedUser['ID']?>&amp;auth=<?=G::$LoggedUser['RSS_Auth']?>&amp;passkey=<?=G::$LoggedUser['torrent_pass']?>&amp;authkey=<?=G::$LoggedUser['AuthKey']?>"
title="<?=SITE_NAME?> - Other Torrents" />
<link rel="stylesheet" type="text/css"
href="<?=STATIC_SERVER?>styles/global.css?v=<?=filemtime(SERVER_ROOT.'/static/styles/global.css')?>" />
<?
if ($UseTooltipster) { ?>
<link rel="stylesheet" href="<?=STATIC_SERVER?>styles/tooltipster/style.css?v=<?=filemtime(SERVER_ROOT.'/static/styles/tooltipster/style.css')?>" type="text/css" media="screen" />
<?
}
if ($Mobile) { ?>
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0, user-scalable=no;" />
<link rel="stylesheet" type="text/css" href="<?=STATIC_SERVER ?>styles/mobile/style.css" />
<?
} else {
if (empty(G::$LoggedUser['StyleURL'])) {
?>
<link rel="stylesheet" type="text/css" title="<?=G::$LoggedUser['StyleName']?>" media="screen"
href="<?=STATIC_SERVER?>styles/<?=G::$LoggedUser['StyleName']?>/style.css?v=<?=filemtime(SERVER_ROOT.'/static/styles/'.G::$LoggedUser['StyleName'].'/style.css')?>" />
<?
} else {
$StyleURLInfo = parse_url(G::$LoggedUser['StyleURL']);
if (substr(G::$LoggedUser['StyleURL'], -4) == '.css'
&& empty($StyleURLInfo['query']) && empty($StyleURLInfo['fragment'])
&& in_array($StyleURLInfo['host'], array(NONSSL_SITE_URL, SSL_SITE_URL))
&& file_exists(SERVER_ROOT.$StyleURLInfo['path'])) {
$StyleURL = G::$LoggedUser['StyleURL'].'?v='.filemtime(SERVER_ROOT.$StyleURLInfo['path']);
} else {
$StyleURL = G::$LoggedUser['StyleURL'];
}
?>
<link rel="stylesheet" type="text/css" media="screen" href="<?=$StyleURL?>" title="External CSS" />
<?
}
}
$ExtraCSS = explode(',', $CSSIncludes);
foreach ($ExtraCSS as $CSS) {
if (trim($CSS) == '') {
continue;
}
?>
<link rel="stylesheet" type="text/css" media="screen" href="<?=STATIC_SERVER."styles/$CSS/style.css?v=".filemtime(SERVER_ROOT."/static/styles/$CSS/style.css")?>" />
<?
}
?>
<script type="text/javascript">
var authkey = "<?=G::$LoggedUser['AuthKey']?>";
var userid = <?=G::$LoggedUser['ID']?>;
</script>
<?

$Scripts = array_merge(array('jquery', 'script_start', 'ajax.class', 'global', 'jquery.autocomplete', 'autocomplete'), explode(',', $JSIncludes));
if ($UseTooltipster) {
$Scripts[] = 'tooltipster';
$Scripts[] = 'tooltipster_settings';
}
foreach ($Scripts as $Script) {
if (trim($Script) == '') {
continue;
}
?>
<script
src="<?=STATIC_SERVER?>functions/<?=$Script?>.js?v=<?=filemtime(SERVER_ROOT.'/static/functions/'.$Script.'.js')?>"
type="text/javascript"></script>
<?
}
if ($Mobile) { ?>
<script src="<?=STATIC_SERVER?>styles/mobile/style.js" type="text/javascript"></script>
<?
}

global $ClassLevels;
// Get notifications early to change menu items if needed
global $NotificationSpans;
$NotificationsManager = new NotificationsManager(G::$LoggedUser['ID']);
$Notifications = $NotificationsManager->get_notifications();
$UseNoty = $NotificationsManager->use_noty();
$NewSubscriptions = false;
$NotificationSpans = array();
foreach ($Notifications as $Type => $Notification) {
if ($Type === NotificationsManager::SUBSCRIPTIONS) {
$NewSubscriptions = true;
}
if ($UseNoty) {
$NotificationSpans[] = "<span class=\"noty-notification\" style=\"display: none;\" data-noty-type=\"$Type\" data-noty-id=\"$Notification[id]\" data-noty-importance=\"$Notification[importance]\" data-noty-url=\"$Notification[url]\">$Notification[message]</span>";
}
}
if ($UseNoty && !empty($NotificationSpans)) {
NotificationsManagerView::load_js();
}
if ($NotificationsManager->is_skipped(NotificationsManager::SUBSCRIPTIONS)) {
$NewSubscriptions = Subscriptions::has_new_subscriptions();
}
?>
</head>
<body id="<?=$Document == 'collages' ? 'collage' : $Document?>" onclick="hide_header_links()">
<div id="wrapper">
<h1 class="hidden"><?=SITE_NAME?></h1>
<div id="header">
<div id="logo">
<a href="index.php"></a>
</div>
<?
if (isset(G::$LoggedUser['SearchType']) && G::$LoggedUser['SearchType']) { // Advanced search
$UseAdvancedSearch = true;
} else {
$UseAdvancedSearch = false;
}
?>
<div id="searchbars">
<ul>
<li id="searchbar_torrents">
<span class="hidden">Torrents: </span>
<form class="search_form" name="torrents" action="torrents.php" method="get">
<? if ($UseAdvancedSearch) { ?>
<input type="hidden" name="action" value="advanced" />
<? } ?>
<input id="torrentssearch" accesskey="t" spellcheck="false"
onfocus="if (this.value == 'Torrents') { this.value = ''; }"
onblur="if (this.value == '') { this.value = 'Torrents'; }"
value="Torrents" placeholder="Torrents" type="text" name="<?=$UseAdvancedSearch ? 'groupname' : 'searchstr' ?>" size="17" />
</form>
</li>
<li id="searchbar_artists">
<span class="hidden">Artist: </span>
<form class="search_form" name="artists" action="artist.php" method="get">
<input id="artistsearch"<?=Users::has_autocomplete_enabled('search');
?> accesskey="a"
spellcheck="false" autocomplete="off"
onfocus="if (this.value == 'Artists') { this.value = ''; }"
onblur="if (this.value == '') { this.value = 'Artists'; }"
value="Artists" placeholder="Artists" type="text" name="artistname" size="17" />
</form>
</li>
<li id="searchbar_requests">
<span class="hidden">Requests: </span>
<form class="search_form" name="requests" action="requests.php" method="get">
<input id="requestssearch" spellcheck="false"
onfocus="if (this.value == 'Requests') { this.value = ''; }"
onblur="if (this.value == '') { this.value = 'Requests'; }"
value="Requests" placeholder="Requests" type="text" name="search" size="17" />
</form>
</li>
<li id="searchbar_forums">
<span class="hidden">Forums: </span>
<form class="search_form" name="forums" action="forums.php" method="get">
<input value="search" type="hidden" name="action" />
<input id="forumssearch"
onfocus="if (this.value == 'Forums') { this.value = ''; }"
onblur="if (this.value == '') { this.value = 'Forums'; }"
value="Forums" placeholder="Forums" type="text" name="search" size="17" />
</form>
</li>
<!--
<li id="searchbar_wiki">
<span class="hidden">Wiki: </span>
<form class="search_form" name="wiki" action="wiki.php" method="get">
<input type="hidden" name="action" value="search" />
<input
onfocus="if (this.value == 'Wiki') { this.value = ''; }"
onblur="if (this.value == '') { this.value = 'Wiki'; }"
value="Wiki" placeholder="Wiki" type="text" name="search" size="17" />
</form>
</li>
-->
<li id="searchbar_log">
<span class="hidden">Log: </span>
<form class="search_form" name="log" action="log.php" method="get">
<input id="logsearch"
onfocus="if (this.value == 'Log') { this.value = ''; }"
onblur="if (this.value == '') { this.value = 'Log'; }"
value="Log" placeholder="Log" type="text" name="search" size="17" />
</form>
</li>
<li id="searchbar_users">
<span class="hidden">Users: </span>
<form class="search_form" name="users" action="user.php" method="get">
<input type="hidden" name="action" value="search" />
<input
id="userssearch"
onfocus="if (this.value == 'Users') { this.value = ''; }"
onblur="if (this.value == '') { this.value = 'Users'; }"
value="Users" placeholder="Users" type="text" name="search" size="20" />
</form>
</li>
</ul>
</div>
<div id="menu">
<h4 class="hidden">Site Menu</h4>
<ul>
<li id="nav_index"<?=
Format::add_class($PageID, array('index'), 'active', true)?>>
<a href="index.php">Home</a>
</li>
<li id="nav_torrents"<?=
Format::add_class($PageID, array('torrents', false, false), 'active', true)?>>
<a href="torrents.php">Torrents</a>
</li>
<li id="nav_collages"<?=
Format::add_class($PageID, array('collages'), 'active', true)?>>
<a href="collages.php">Collections</a>
</li>
<li id="nav_requests"<?=
Format::add_class($PageID, array('requests'), 'active', true)?>>
<a href="requests.php">Requests</a>
</li>
<li id="nav_forums"<?=
Format::add_class($PageID, array('forums'), 'active', true)?>>
<a href="forums.php">Forums</a>
</li>
<li id="nav_irc"<?=
Format::add_class($PageID, array('chat'), 'active', true)?>>
<a href="chat.php">IRC</a>
</li>
<li id="nav_top10"<?=
Format::add_class($PageID, array('top10'), 'active', true)?>>
<a href="top10.php">Top 10</a>
</li>
<li id="nav_rules"<?=
Format::add_class($PageID, array('rules'), 'active', true)?>>
<a href="rules.php">Rules</a>
</li>
<li id="nav_wiki"<?=
Format::add_class($PageID, array('wiki'), 'active', true)?>>
<a href="wiki.php">Wiki</a>
</li>
<li id="nav_staff"<?=
Format::add_class($PageID, array('staff'), 'active', true)?>>
<a href="staff.php">Staff</a>
</li>
</ul>
</div>
<div id="userinfo">
<ul id="userinfo_username">
<li id="nav_userinfo" <?=Format::add_class($PageID, array('user', false, false), 'active', true, 'id')?>>
<a href="user.php?id=<?=G::$LoggedUser['ID']?>" class="username"><?=G::$LoggedUser['Username']?></a>
</li>
<li id="nav_userclass">
<span class="hidden userclass"><?=$ClassLevels[G::$LoggedUser['Class']]['Name']?></span>
</li>
<li id="nav_useredit" class="brackets<?=Format::add_class($PageID, array('user','edit'), 'active', false)?>">
<a href="user.php?action=edit&amp;userid=<?=G::$LoggedUser['ID']?>">Edit</a>
</li>
<li id="nav_logout" class="brackets">
<a href="logout.php?auth=<?=G::$LoggedUser['AuthKey']?>">Logout</a>
</li>
</ul>
<ul id="userinfo_major">
<li id="nav_upload" class="brackets<?=Format::add_class($PageID, array('upload'), 'active', false)?>">
<a href="upload.php">Upload</a>
</li>
<?
if (check_perms('site_send_unlimited_invites')) {
$Invites = ' (∞)';
} elseif (G::$LoggedUser['Invites'] > 0) {
$Invites = ' ('.G::$LoggedUser['Invites'].')';
} else {
$Invites = '';
}
?>
<li id="nav_invite" class="brackets<?=Format::add_class($PageID, array('user','invite'), 'active', false)?>">
<a href="user.php?action=invite">Invite<?=$Invites?></a>
</li>
<li id="nav_donate" class="brackets<?=Format::add_class($PageID, array('donate'), 'active', false)?>">
<a href="donate.php">Donate</a>
</li>
</ul>
<ul id="userinfo_stats">
<li id="stats_seeding">
<a href="torrents.php?type=seeding&amp;userid=<?=G::$LoggedUser['ID']?>">Up</a>:
<span class="stat tooltip" title="<?=Format::get_size(G::$LoggedUser['BytesUploaded'], 5)?>"><?=Format::get_size(G::$LoggedUser['BytesUploaded'])?></span>
</li>
<li id="stats_leeching">
<a href="torrents.php?type=leeching&amp;userid=<?=G::$LoggedUser['ID']?>">Down</a>:
<span class="stat tooltip" title="<?=Format::get_size(G::$LoggedUser['BytesDownloaded'], 5)?>"><?=Format::get_size(G::$LoggedUser['BytesDownloaded'])?></span>
</li>
<li id="stats_ratio">
Ratio: <span class="stat"><?=Format::get_ratio_html(G::$LoggedUser['BytesUploaded'], G::$LoggedUser['BytesDownloaded'])?></span>
</li>
<? if (!empty(G::$LoggedUser['RequiredRatio']) && G::$LoggedUser['RequiredRatio'] > 0) { ?>
<li id="stats_required">
<a href="rules.php?p=ratio">Required</a>:
<span class="stat tooltip" title="<?=number_format(G::$LoggedUser['RequiredRatio'], 5)?>"><?=number_format(G::$LoggedUser['RequiredRatio'], 2)?></span>
</li>
<? }

if (G::$LoggedUser['FLTokens'] > 0) { ?>
<li id="fl_tokens">
<a href="wiki.php?action=article&amp;id=7">Tokens</a>:
<span class="stat">
<a href="userhistory.php?action=token_history&amp;userid=<?=G::$LoggedUser['ID']?>"><?=G::$LoggedUser['FLTokens']?></a>
</span>
</li>
<? }
?>
<li id="bonus_points">
<a href="wiki.php?action=article&amp;id=8">Nips</a>:
<span class="stat">
<a href="store.php"><?=number_format(G::$LoggedUser['BonusPoints'])?></a>
</span>
</li>
<? if (G::$LoggedUser['HnR'] > 0) { ?>
<li id="hnr">
<a href="snatchlist.php">HnRs</a>:
<span class="stat">
<a><?=G::$LoggedUser['HnR']?></a>
</span>
</li>
<? }
?>
</ul>
<ul id="userinfo_minor"<?=$NewSubscriptions ? ' class="highlite"' : ''?>>
<li>
<span class="brackets" onclick="toggle_header_links(event)">Links ▾</span>
<ul>
<li id="nav_inbox"<?=
Format::add_class($PageID, array('inbox'), 'active', true)?>>
<a href="<?=Inbox::get_inbox_link(); ?>">Inbox</a>
</li>
<li id="nav_staffinbox"<?=
Format::add_class($PageID, array('staffpm'), 'active', true)?>>
<a href="staffpm.php">Staff Inbox</a>
</li>
<li id="nav_uploaded"<?=
Format::add_class($PageID, array('torrents', false, 'uploaded'), 'active', true, 'userid')?>>
<a href="torrents.php?type=uploaded&amp;userid=<?=G::$LoggedUser['ID']?>">Uploads</a>
</li>
<li id="nav_bookmarks"<?=
Format::add_class($PageID, array('bookmarks'), 'active', true)?>>
<a href="bookmarks.php?type=torrents">Bookmarks</a>
</li>
<? if (check_perms('site_torrents_notify')) { ?>
<li id="nav_notifications"<?=
Format::add_class($PageID, array(array('torrents', 'notify'), array('user', 'notify')), 'active', true, 'userid')?>>
<a href="user.php?action=notify">Notifications</a>
</li>
<? }
$ClassNames = $NewSubscriptions ? 'new-subscriptions' : '';
$ClassNames = trim($ClassNames.Format::add_class($PageID, array('userhistory', 'subscriptions'), 'active', false));
?>
<li id="nav_subscriptions"<?=$ClassNames ? " class=\"$ClassNames\"" : ''?>>
<a href="userhistory.php?action=subscriptions">Subscriptions</a>
</li>
<li id="nav_comments"<?=
Format::add_class($PageID, array('comments'), 'active', true, 'userid')?>>
<a href="comments.php">Comments</a></li>
<li id="nav_friends"<?=
Format::add_class($PageID, array('friends'), 'active', true)?>>
<a href="friends.php">Friends</a></li>
</ul>
</li>
</ul>
</div>
</div>
<?
//Start handling alert bars
$Alerts = array();
$ModBar = array();

// Staff blog
if (check_perms('users_mod')) {
global $SBlogReadTime, $LatestSBlogTime;
if (!$SBlogReadTime && ($SBlogReadTime = G::$Cache->get_value('staff_blog_read_'.G::$LoggedUser['ID'])) === false) {
G::$DB->query("
SELECT Time
FROM staff_blog_visits
WHERE UserID = ".G::$LoggedUser['ID']);
if (list($SBlogReadTime) = G::$DB->next_record()) {
$SBlogReadTime = strtotime($SBlogReadTime);
} else {
$SBlogReadTime = 0;
}
G::$Cache->cache_value('staff_blog_read_'.G::$LoggedUser['ID'], $SBlogReadTime, 1209600);
}
if (!$LatestSBlogTime && ($LatestSBlogTime = G::$Cache->get_value('staff_blog_latest_time')) === false) {
G::$DB->query("
SELECT MAX(Time)
FROM staff_blog");
list($LatestSBlogTime) = G::$DB->next_record();
if ($LatestSBlogTime) {
$LatestSBlogTime = strtotime($LatestSBlogTime);
} else {
$LatestSBlogTime = 0;
}
G::$Cache->cache_value('staff_blog_latest_time', $LatestSBlogTime, 1209600);
}
if ($SBlogReadTime < $LatestSBlogTime) {
$Alerts[] = '<a href="staffblog.php">New staff blog post!</a>';
}
}

// Inbox
if ($NotificationsManager->is_traditional(NotificationsManager::INBOX)) {
$NotificationsManager->load_inbox();
$NewMessages = $NotificationsManager->get_notifications();
if (isset($NewMessages[NotificationsManager::INBOX])) {
$Alerts[] = NotificationsManagerView::format_traditional($NewMessages[NotificationsManager::INBOX]);
}
$NotificationsManager->clear_notifications_array();
}

if (G::$LoggedUser['RatioWatch']) {
$Alerts[] = '<a href="rules.php?p=ratio">Ratio Watch</a>: You have '.time_diff(G::$LoggedUser['RatioWatchEnds'], 3).' to get your ratio over your required ratio or your leeching abilities will be disabled.';
} elseif (G::$LoggedUser['CanLeech'] != 1) {
$Alerts[] = '<a href="rules.php?p=ratio">Ratio Watch</a>: Your downloading privileges are disabled until you meet your required ratio.';
}

// Torrents
if ($NotificationsManager->is_traditional(NotificationsManager::TORRENTS)) {
$NotificationsManager->load_torrent_notifications();
$NewTorrents = $NotificationsManager->get_notifications();
if (isset($NewTorrents[NotificationsManager::TORRENTS])) {
$Alerts[] = NotificationsManagerView::format_traditional($NewTorrents[NotificationsManager::TORRENTS]);
}
$NotificationsManager->clear_notifications_array();
}

if (check_perms('users_mod')) {
$ModBar[] = '<a href="tools.php">Toolbox</a>';
}
if (check_perms('users_mod')) {
$NumStaffPMs = G::$Cache->get_value('num_staff_pms_'.G::$LoggedUser['ID']);
if ($NumStaffPMs === false) {
if (check_perms('users_mod')) {

$LevelCap = 1000;

G::$DB->query("
SELECT COUNT(ID)
FROM staff_pm_conversations
WHERE Status = 'Unanswered'
AND (AssignedToUser = ".G::$LoggedUser['ID']."
OR (LEAST('$LevelCap', Level) <= '".G::$LoggedUser['EffectiveClass']."'
AND Level <= ".G::$LoggedUser['Class']."))");
}
if (G::$LoggedUser['PermissionID'] == FORUM_MOD) {
G::$DB->query("
SELECT COUNT(ID)
FROM staff_pm_conversations
WHERE Status='Unanswered'
AND (AssignedToUser = ".G::$LoggedUser['ID']."
OR Level = '". $Classes[FORUM_MOD]['Level'] . "')");
}
list($NumStaffPMs) = G::$DB->next_record();
G::$Cache->cache_value('num_staff_pms_'.G::$LoggedUser['ID'], $NumStaffPMs , 1000);
}

if ($NumStaffPMs > 0) {
$ModBar[] = '<a href="staffpm.php">'.$NumStaffPMs.' Staff PMs</a>';
}
}
if (check_perms('admin_reports')) {
// Torrent reports code
$NumTorrentReports = G::$Cache->get_value('num_torrent_reportsv2');
if ($NumTorrentReports === false) {
G::$DB->query("
SELECT COUNT(ID)
FROM reportsv2
WHERE Status = 'New'");
list($NumTorrentReports) = G::$DB->next_record();
G::$Cache->cache_value('num_torrent_reportsv2', $NumTorrentReports, 0);
}

$ModBar[] = '<a href="reportsv2.php">'.$NumTorrentReports.(($NumTorrentReports == 1) ? ' Report' : ' Reports').'</a>';

// Other reports code
$NumOtherReports = G::$Cache->get_value('num_other_reports');
if ($NumOtherReports === false) {
G::$DB->query("
SELECT COUNT(ID)
FROM reports
WHERE Status = 'New'");
list($NumOtherReports) = G::$DB->next_record();
G::$Cache->cache_value('num_other_reports', $NumOtherReports, 0);
}

if ($NumOtherReports > 0) {
$ModBar[] = '<a href="reports.php">'.$NumOtherReports.(($NumTorrentReports == 1) ? ' Other report' : ' Other reports').'</a>';
}
} elseif (check_perms('project_team')) {
$NumUpdateReports = G::$Cache->get_value('num_update_reports');
if ($NumUpdateReports === false) {
G::$DB->query("
SELECT COUNT(ID)
FROM reports
WHERE Status = 'New'
AND Type = 'request_update'");
list($NumUpdateReports) = G::$DB->next_record();
G::$Cache->cache_value('num_update_reports', $NumUpdateReports, 0);
}

if ($NumUpdateReports > 0) {
$ModBar[] = '<a href="reports.php">Request update reports</a>';
}
} elseif (check_perms('site_moderate_forums')) {
$NumForumReports = G::$Cache->get_value('num_forum_reports');
if ($NumForumReports === false) {
G::$DB->query("
SELECT COUNT(ID)
FROM reports
WHERE Status = 'New'
AND Type IN('artist_comment', 'collages_comment', 'post', 'requests_comment', 'thread', 'torrents_comment')");
list($NumForumReports) = G::$DB->next_record();
G::$Cache->cache_value('num_forum_reports', $NumForumReports, 0);
}

if ($NumForumReports > 0) {
$ModBar[] = '<a href="reports.php">'.$NumForumReports.(($NumForumReports == 1) ? ' Forum report' : ' Forum reports').'</a>';
}
}

if (check_perms('users_mod')) {
$NumEmailDeleteRequests = G::$Cache->get_value('num_email_delete_requests');
if ($NumEmailDeleteRequests === false) {
G::$DB->query("SELECT COUNT(*) FROM email_delete_requests");
list($NumEmailDeleteRequests) = G::$DB->next_record();
G::$Cache->cache_value('num_email_delete_request', $NumEmailDeleteRequests);
}
if ($NumEmailDeleteRequests > 0) {
$ModBar[] = '<a href="tools.php?action=delete_email">' . $NumEmailDeleteRequests . " Email deletion request(s)</a>";
}
}

if (check_perms('users_mod') && FEATURE_EMAIL_REENABLE) {
$NumEnableRequests = G::$Cache->get_value(AutoEnable::CACHE_KEY_NAME);
if ($NumEnableRequests === false) {
G::$DB->query("SELECT COUNT(1) FROM users_enable_requests WHERE Outcome IS NULL");
list($NumEnableRequests) = G::$DB->next_record();
G::$Cache->cache_value(AutoEnable::CACHE_KEY_NAME, $NumEnableRequests);
}

if ($NumEnableRequests > 0) {
$ModBar[] = '<a href="tools.php?action=enable_requests">' . $NumEnableRequests . " Enable requests</a>";
}
}

if (!empty($Alerts) || !empty($ModBar)) { ?>
<div id="alerts">
<? foreach ($Alerts as $Alert) { ?>
<div class="alertbar"><?=$Alert?></div>
<?
}
if (!empty($ModBar)) { ?>
<div class="alertbar blend">
<?=implode(' | ', $ModBar); echo "\n"?>
</div>
<? }
if (check_perms('site_debug') && !apc_exists('DBKEY')) { ?>
<div class="alertbar" style="color: white; background: #B53939;">
Warning: <a href="tools.php?action=database_key">no DB key</a>
</div>
<? } ?>
</div>
<?
}
//Done handling alertbars
?>

<div id="content">

+ 9
- 0
design/publicfooter.php Datei anzeigen

@@ -0,0 +1,9 @@
</td>
</tr>
</table>
</div>
<div id="foot">
<span><a href="#"><?=SITE_NAME?></a> | <a href="https://what.cd/gazelle/">Project Gazelle</a></span>
</div>
</body>
</html>

+ 37
- 0
design/publicheader.php Datei anzeigen

@@ -0,0 +1,37 @@
<?
global $LoggedUser, $SSL;
define('FOOTER_FILE',SERVER_ROOT.'/design/publicfooter.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title><?=display_str($PageTitle)?></title>
<meta http-equiv="X-UA-Compatible" content="chrome=1; IE=edge" />
<link rel="shortcut icon" href="favicon.ico?v=<?=md5_file('favicon.ico');?>" />
<link href="<?=STATIC_SERVER ?>styles/public/style.css?v=<?=filemtime(SERVER_ROOT.'/static/styles/public/style.css')?>" rel="stylesheet" type="text/css" />
<script src="<?=STATIC_SERVER?>functions/jquery.js" type="text/javascript"></script>
<script src="<?=STATIC_SERVER?>functions/script_start.js?v=<?=filemtime(SERVER_ROOT.'/static/functions/script_start.js')?>" type="text/javascript"></script>
<script src="<?=STATIC_SERVER?>functions/ajax.class.js?v=<?=filemtime(SERVER_ROOT.'/static/functions/ajax.class.js')?>" type="text/javascript"></script>
<script src="<?=STATIC_SERVER?>functions/cookie.class.js?v=<?=filemtime(SERVER_ROOT.'/static/functions/cookie.class.js')?>" type="text/javascript"></script>
<script src="<?=STATIC_SERVER?>functions/storage.class.js?v=<?=filemtime(SERVER_ROOT.'/static/functions/storage.class.js')?>" type="text/javascript"></script>
<script src="<?=STATIC_SERVER?>functions/global.js?v=<?=filemtime(SERVER_ROOT.'/static/functions/global.js')?>" type="text/javascript"></script>
<? $img = array_diff(scandir(SERVER_ROOT.'/misc/bg', 1), array('.', '..')); ?>
<style> #content { background-image: url(<? echo("'/misc/bg/" . $img[rand(0,count($img)-1)] . "'"); ?>); }</style>
</head>
<body>
<div id="head">
</div>
<div id="content">
<table class="layout" id="maincontent">
<tr>
<td align="center" valign="middle">
<div id="logo">
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="login.php">Log in</a></li>
<? if (OPEN_REGISTRATION) { ?>
<li><a href="register.php">Register</a></li>
<? } ?>
</ul>
</div>
<?

+ 159
- 0
design/views/generic/reply/quickreply.php Datei anzeigen

@@ -0,0 +1,159 @@
<?php
/**
* This version of #quickpostform is used in all subsections
* Instead of modifying multiple places, just modify this one.
*
* To include it in a section use this example.

View::parse('generic/reply/quickreply.php', array(
'InputTitle' => 'Post reply',
'InputName' => 'thread',
'InputID' => $ThreadID,
'ForumID' => $ForumID,
'TextareaCols' => 90
));

* Note that InputName and InputID are the only required variables
* They're used to construct the $_POST.
*
* Eg
* <input name="thread" value="123" />
* <input name="groupid" value="321" />
*
* Globals are required as this template is included within a
* function scope.
*
* To add a "Subscribe" box for non-forum pages (like artist/collage/...
* comments), add a key 'SubscribeBox' to the array passed to View::parse.
* Example:

View::parse('generic/reply/quickreply.php', array(
'InputTitle' => 'Post comment',
'InputName' => 'groupid',
'InputID' => $GroupID,
'TextareaCols' => 65,
'SubscribeBox' => true
));
*/
global $HeavyInfo, $UserSubscriptions, $ThreadInfo, $ForumsDoublePost, $Document;

if (G::$LoggedUser['DisablePosting']) {
return;
}
if (!isset($TextareaCols)) {
$TextareaCols = 70;
}
if (!isset($TextareaRows)) {
$TextareaRows = 8;
}
if (!isset($InputAction)) {
$InputAction = 'reply';
}
if (!isset($InputTitle)) {
$InputTitle = 'Post comment';
}
if (!isset($Action)) {
$Action = '';
}

// TODO: Remove inline styles

// Old to do?
// TODO: Preview, come up with a standard, make it look like post or just a
// block of formatted BBcode, but decide and write some proper XHTML


$ReplyText = new TEXTAREA_PREVIEW('body', 'quickpost', '',
$TextareaCols, $TextareaRows, false, false, true, array(
'tabindex="1"',
'onkeyup="resize(\'quickpost\')"'
));
?>

<br />
<div id="reply_box">
<h3><?=$InputTitle?></h3>
<div class="box pad">
<table class="forum_post box vertical_margin hidden preview_wrap" id="preview_wrap_<?=$ReplyText->getID()?>">
<colgroup>
<? if (Users::has_avatars_enabled()) { ?>
<col class="col_avatar" />
<? } ?>
<col class="col_post_body" />
</colgroup>
<tr class="colhead_dark">
<td colspan="<?=(Users::has_avatars_enabled() ? 2 : 1)?>">
<div style="float: left;"><a href="#quickreplypreview">#XXXXXX</a>
by <strong><?=Users::format_username(G::$LoggedUser['ID'], true, true, true, true)?></strong> Just now
</div>
<div style="float: right;">
<a href="#quickreplypreview" class="brackets">Report</a>
&nbsp;
<a href="#">&uarr;</a>
</div>
</td>
</tr>
<tr>
<? if (Users::has_avatars_enabled()) { ?>
<td class="avatar" valign="top">
<?=Users::show_avatar(G::$LoggedUser['Avatar'], G::$LoggedUser['ID'], G::$LoggedUser['Username'], (!isset($HeavyInfo['DisableAvatars']) || $HeavyInfo['DisableAvatars']))?>
</td>
<? } ?>
<td class="body" valign="top">
<div id="contentpreview" style="text-align: left;">
<div id="preview_<?=$ReplyText->getID()?>"></div>
</div>
</td>
</tr>
</table>
<form class="send_form center" name="reply" id="quickpostform" action="<?=$Action?>" method="post"<? if (!check_perms('users_mod')) { ?> onsubmit="quickpostform.submit_button.disabled = true;"<? } ?>>
<input type="hidden" name="action" value="<?=$InputAction?>" />
<input type="hidden" name="auth" value="<?=G::$LoggedUser['AuthKey']?>" />
<input type="hidden" name="<?=$InputName?>" value="<?=$InputID?>" />
<div id="quickreplytext">
<?
echo $ReplyText->getBuffer();
?>
<br />
</div>
<div class="preview_submit">
<?
if (isset($SubscribeBox) && !isset($ForumID) && Subscriptions::has_subscribed_comments($Document, $InputID) === false) {
?>
<input id="subscribebox" type="checkbox" name="subscribe"<?=!empty($HeavyInfo['AutoSubscribe']) ? ' checked="checked"' : ''?> tabindex="2" />
<label for="subscribebox">Subscribe</label>
<?
}
// Forum thread logic
// This might use some more abstraction
if (isset($ForumID)) {
if (!Subscriptions::has_subscribed($InputID)) {
?>
<input id="subscribebox" type="checkbox" name="subscribe"<?=!empty($HeavyInfo['AutoSubscribe']) ? ' checked="checked"' : ''?> tabindex="2" />
<label for="subscribebox">Subscribe</label>
<?
}
if ($ThreadInfo['LastPostAuthorID'] == G::$LoggedUser['ID']
&& (check_perms('site_forums_double_post')
|| in_array($ForumID, $ForumsDoublePost))
) {
?>
<input id="mergebox" type="checkbox" name="merge" tabindex="2" />
<label for="mergebox">Merge</label>
<?
}
if (!G::$LoggedUser['DisableAutoSave']) {
?>
<script type="application/javascript">
var storedTempTextarea = new StoreText('quickpost', 'quickpostform', <?=$InputID?>);
</script>
<?
}
}
?>
<input type="button" value="Preview" class="hidden button_preview_<?=$ReplyText->getID()?>" tabindex="1" />
<input type="submit" value="Post reply" id="submit_button" tabindex="1" />
</div>
</form>
</div>
</div>

+ 27
- 0
design/views/generic/reply/staffpm.php Datei anzeigen

@@ -0,0 +1,27 @@
<div id="compose" class="<?=($Hidden ? 'hidden' : '')?>">
<form class="send_form" name="staff_message" action="staffpm.php" method="post">
<input type="hidden" name="action" value="takepost" />
<h3><label for="subject">Subject</label></h3>
<input size="95" type="text" name="subject" id="subject" />
<br />

<h3><label for="message">Message</label></h3>
<?
$TextPrev = new TEXTAREA_PREVIEW('message', 'message', '', 95, 10, true, false);
?>
<br />

<strong>Send to: </strong>
<select name="level">
<? if (!isset(G::$LoggedUser['LockedAccount'])) { ?>
<option value="0" selected="selected">First Line Support</option>
<option value="800">Forum Moderators</option>
<? } ?>
<option value="1000">Staff</option>
</select>

<input type="button" value="Preview" class="hidden button_preview_<?=$TextPrev->getID()?>" />
<input type="submit" value="Send message" />
<input type="button" value="Hide" onclick="$('#compose').gtoggle(); return false;" />
</form>
</div>

+ 3
- 0
design/views/generic/textarea/buttons.phtml Datei anzeigen

@@ -0,0 +1,3 @@
<div class="submit_div preview_submit">
<input type="button" value="Preview" class="hidden button_preview_<?=$ID?>" />
</div>

+ 4
- 0
design/views/generic/textarea/preview.phtml Datei anzeigen

@@ -0,0 +1,4 @@

<div class="box vertical_space body hidden preview_wrap" id="preview_wrap_<?=$ID?>">
<div id="preview_<?=$ID?>"></div>
</div>

+ 1
- 0
design/views/generic/textarea/script.phtml Datei anzeigen

@@ -0,0 +1 @@
<script type="text/javascript" src="static/functions/textareapreview.class.js?v=<?=filemtime(SERVER_ROOT.'/static/functions/textareapreview.class.js')?>"></script>

+ 4
- 0
design/views/generic/textarea/script_factory.phtml Datei anzeigen

@@ -0,0 +1,4 @@

<script type="text/javascript" class="preview_code">
$(document).ready(function () { TextareaPreview.factory([<?=$script?>]); });
</script>

+ 4
- 0
design/views/generic/textarea/textarea.phtml Datei anzeigen

@@ -0,0 +1,4 @@

<div id="textarea_wrap_<?=$NID?>" class="field_div textarea_wrap">
<textarea name="<?=$Name?>" id="<?=$ID?>" cols="<?=$Cols?>" rows="<?=$Rows?>" <?=$Attributes?>><?=$Value?></textarea>
</div>

+ 850
- 0
static/styles/global.css Datei anzeigen

@@ -0,0 +1,850 @@
.box h3 {
font-size: 140%;
}
.box h4 {
font-size: 130%;
}
.box h5 {
font-size: 120%;
}
.box h6 {
font-size: 110%;
}

.box_addartists .add_form {
display: flex;
}
.box_addartists .add_form #AddArtists {
flex-grow: 1;
}
.box_addartists .add_form #AddArtists #artist{
box-sizing: border-box;
width: 100%;
}

h2 .group_cat {
height: 16px;
width: 16px;
margin: 0 8px;
display: inline-block;
background-size: 16px 16px;
}

pre br {
line-height: 0px;
display: none;
}

.center {
text-align: center;
}

.collage_images {
padding: 0px;
width: 100%;
border-collapse: collapse;
font-size: 0;
}

.collage_images {
display: table;
}

ul.collage_images li {
border: none;
float: left;
margin: 0;
/* width: 118px;
height: 118px;
width: 146px; */
width: 146px;
list-style: none;
list-style-type: none;
}

ul.collage_images li a {
display: block;
/* height: 118px; */
width: 100%;
overflow: hidden;
}

ul.collage_images img {
/* height: 118px;
width: 118px; */
}

div.collage_image {
width: 20%;
}

.selected a {
font-weight: bold;
text-decoration: underline;
}

.invisible {
visibility: hidden;
}

.collage td {
padding: 0px;
border: none;
}

.line_new {
color: green;
}

.line_deleted {
color: red;
}

.line_moved {
color: blue;
}

.line_unchanged {

}

.log1 {

}

.log2 {
color: yellow;
}

.log3 {
color: #0E88C6;
}

.log4 {
font-weight: bold;
}

.log5 {
text-decoration: underline;
}

.good {
font-weight: bold;
color: green;
}

.bad {
font-weight: bold;
color: red;
}

.goodish {
font-weight: bold;
color: #35BF00;
}

.badish {
font-weight: bold;
color: #E5B244;
}

pre {
overflow: auto;
}

.hidden {
display: none;
}

.disable_grouping {
display: none;
}

form textarea, form input {
max-width: 100%;
}

textarea {
width: 100%;
box-sizing: border-box;
}

a.beta {
font-weight: bold;
color: #ff0000;
}

strong.important_text {
color: red;
font-weight: bold;
}

strong.important_text_alt {
color: green;
font-weight: bold;
}

.invalid, .warning, .error, .new {
color: #ff0000;
}

/* Make [+] on add multiple artists stay at the bottom (on torrent details page) */
div#AddArtists {
position: relative;
display: inline-block;
}

div#AddArtists a {
position: absolute;
right: 0pt;
bottom: 0pt;
}

.clear:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}

.new-subscriptions {
font-weight: bold;
}

#forums #quickpost {
width: 95%
}

.rippywrap {
z-index: 25;
display: block;
position: fixed;
color: black;
text-align: center;
width: 190px;
height: 180px;
bottom: 0px;
right: 0px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}

.rippywrap div.rippy {
z-index: 25;
height: 111px;
width: 190px;
position: fixed;
bottom: 0px;
right: 0px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}


td.label {
vertical-align: top;
}

span.rbt {
display: block;
padding: 8px 0 0;
background: url('../rippy/rippy_top.gif') no-repeat top;
}

span.rbm {
display: block;
background: url('../rippy/rippy_middle.gif') repeat bottom;
padding: 0 5px;
}

span.rbb {
display: block;
padding: 4px 0px 18px;
margin-bottom: 5px;
background: url('../rippy/rippy_bottom.gif') no-repeat bottom;
}

span.secondary_class {
font-size: 85%;
font-weight: bold;
}

.breadcrumbs {
font-weight: bold;
text-align: right;
}

.paranoia_override {
font-style: italic;
}

#manage_collage_table.ui-sortable .drag {
cursor: n-resize;
}

#manage_collage_table.ui-sortable .ui-sortable-helper.drag {
cursor: grabbing;
cursor: -moz-grabbing;
cursor: -webkit-grabbing;
}

#manage_collage_table .ui-sortable-helper td, #manage_collage_table .ui-sortable-placeholder {
border: 0;
}

.drag_drop_save {
padding: 6px 0;
overflow: hidden;
}

.headerSort {
cursor: pointer;
}

.headerSort span {
background: url("../common/table-order.png") no-repeat scroll right -38px transparent;
padding: 0px 20px 0 0;
}

.headerSortDown span {
background: url("../common/table-order.png") no-repeat scroll right 4px transparent;
}

.headerSortUp span {
background: url("../common/table-order.png") no-repeat scroll right -79px transparent;
}

.headerSort.sorter-false,
.headerSort.sorter-false span {
background-image: none;
cursor: default;
}

.album_votes {
text-align: center;
}

.favoritecount {
font-size: 150%;
font-weight: bold;
}

.favoritecount_small {
font-size: 110%;
font-weight: bold;
}

ul.votedalbums li {
list-style: none;
list-style-type: none;
margin: 0;
}

tr.torrent .bookmark>a:before {
text-decoration: none;
font-weight: normal;
}

tr.torrent .bookmark>a:after {
text-decoration: none;
font-weight: normal;
}

#sortable {
list-style-type: none;
margin: 0;
padding: 0;
width: 50%;
}

#sortable li {
padding: 0px;
font-size: 1.2em;
height: 1.5em;
}


.ui-state-highlight {
background: #007DC6 /*{bgColorHighlight}*/;
opacity: 0.15;
width: 50%;

}

.navigation_list, .navigation_list ol {
list-style-position: inside;
margin-top: 10px;
margin-bottom: 20px;
}

.navigation_list > li {
list-style-type: upper-roman !important;
}

.navigation_list li li {
list-style-type: decimal;
}

.navigation_list li li li {
list-style-type: lower-roman;
}

.navigation_list li li li li {
list-style-type: lower-alpha;
}

.voted_type {
font-weight: bold;
}

.torrent_table .group .votes_info_td strong {
font-size: inherit;
}

.invite_table td {
min-width: 55px;
}

.preview_wrap {
text-align: left;
}

.text_preview {
min-height: 100px
}

.brackets {
text-indent: 0px;
white-space: nowrap;
cursor: pointer;
}

.votespan.brackets:before {
content: "( ";
}

.votespan.brackets:after {
content: " )";
}

.brackets:before {
content: "[";
}

.brackets:after {
content: "]";
}

#userinfo .brackets:before, #userinfo .brackets:after {
content: "";
}
.group_image {
overflow: hidden;
}
.float_left {
float: left;
}
.float_right {
float: right;
}
.float_clear {
clear: both;
}
.group_image + .group_info {
margin-left: 100px;
}

.group_image img {
cursor: pointer;
}

.user_title {
font-weight: normal;
}

/*
* Fix long filename tables overflowing (Chrome only).
* Stop various release page containers from overflowing with long input.
* !! Be sure to test all major browsers before changing this section. !!
* Fix report information tables overflowing long reports (all browsers).
* Fix long release descriptions overflowing containers (all browsers).
* Fix flowing issues in the report resolving pages.
*/
.wrap_overflow, .filelist_table td, .reportinfo_table, .torrentdetails blockquote {
word-break: normal;
-ms-word-wrap: break-word;
word-wrap: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;
/* Note that IE will have different behavior on word-break,
* but this is required to keep the layout from breaking. */
-ms-word-break: break-all;
}
/* Non-web-standard for webkit */
.torrentdetails blockquote {
word-break: break-word;
}
/* Fix long filename tables overflowing (Chrome only). */
.filelist_table td:first-child {
word-break: break-all;
}
/* Fix long overflow for Opera (doesn't support word-break). */
.reportinfo_table {
table-layout: fixed;
}
/* Wrap release info for consistent DOM and to limit table expansion. */
.no_overflow {
width: 100%;
overflow: hidden;
}
/* Stylesheet gallery in user profile editing */
#css_gallery {
display: none;
overflow: hidden;
margin-top: 10px;
}
.preview_wrapper {
position: relative;
display: inline-block;
width: 29%;
height: 120px;
margin: 0 10px;
}
.preview_image {
display: block;
height: 80px;
cursor: pointer;
overflow: hidden;
}
.preview_image img {
width: 100%;
}
.preview_name {
text-align: center;
margin-top: 5px;
}

.option_group {
margin-bottom: 10px;
}
.option_group:last-child {
margin-bottom: 0px;
}

.autocomplete-suggestions {
color: #000;
margin-top: 5px;
border: 1px solid #999;
background: #FFF;
overflow: auto;
}
.autocomplete-suggestion {
padding: 2px 5px;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
}
.autocomplete-selected {
background: #F0F0F0;
}
.autocomplete-suggestions strong {
font-weight: normal;
color: #3399FF;
}

.process_info {
table-layout: fixed;
width: 100%;
}
.process_info_pid {
width: 70px;
}
.process_info_data {
overflow: auto;
}

.setting_description > * {
margin: 1em 0 0 0;
}

.settings_sidebar {
min-height: 385px;
}

#settings_sections {
position: absolute;
}

#settings_sections.fixed {
position: fixed;
top: 0px;
}

#settings_sections #submit, #settings_sections #settings_search {
box-sizing: border-box;
-moz-box-sizing: border-box;
width: 100%;
}

#settings_sections h2 {
text-align: left;
}

.donor_icon {
margin-left: 2px;
margin-right: 2px;
max-width: 16px;
max-height: 16px;
position: relative;
top: 2px;
}

.badge_icon {
margin: 0px 2px;
position: relative;
top: 2px;
}

.donation_info {
padding: 10px 10px 10px 20px;
margin-left: 10px;
margin-right: 10px;
margin-bottom: 20px;
}

.donation_info_title {
display: block;
font-size: 1.75em;
-webkit-margin-before: 1em;
-webkit-margin-after: 1em;
-webkit-margin-start: 0px;
-webkit-margin-end: 0px;
font-weight: bold;
margin: 10px 0;
}

.number_column {
text-align: right;
}

.wide_input_text {
width: 95%;
}

.top_artist_list li {
margin-left: 25px;
margin-bottom: 5px;
list-style-type: decimal;
font-size: 150%;
}

.permission_subcontainer {
margin-bottom: 10px;
}

.vote_tag_up, .vote_artist_up, .vote_album_up {
font-weight: bolder;
}

.vote_tag_down, .vote_artist_down, .vote_album_down {
font-weight: bolder;
}

.noborder {
border: none;
}

.two_columns {
float: left;
width: 50%;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}

.field_div {
margin-bottom: 10px;
}

.field_div:last-of-type {
margin-bottom: 0;
}

.field_div .label,
.submit_div .label {
float: left;
padding: 0 5px;
text-align: right;
width: 150px;
}
.field_div .input,
.submit_div .input {
padding: 0 5px;
}

.small_label {
text-align: right;
width: auto;
}

.scale_image {
max-width: 500px;
}

.sidebar img {
max-width: 100%;
width: initial;
}

.forum_post td img {
max-width: 100%;
}

#collage #reply_box img,
#forums #reply_box img {
max-width: 650px;
}

#artistcomments #reply_box img,
#request_comments #reply_box img,
#torrent_comments #reply_box img {
max-width: 400px;
}

#artistcomments img,
#request_comments img,
#torrent_comments img {
max-width: 417px;
}

.blog_post img {
max-width: 825px;
}

.torrent_description blockquote img.scale_image {
max-width: 100%;
}

#artist_information img,
.box_request_desc img,
.news_post img,
.torrent_description img,
.wiki_article img {
max-width: 570px;
}

.torrentdetails img {
max-width: 100%;
}

#inbox #preview img,
#staffpm #reply_box img,
#wiki .create_form img,
#wiki .edit_form img {
max-width: 805px;
}

#inbox .body img {
max-width: 830px;
}

#userform img {
max-width: 490px;
}

video, .profileinfo img {
max-width: 100%;
}

#reportsv2 .manage_form img {
max-width: 616px;
}

.friends_table textarea {
max-width: 540px;
}

div.torrent_artists {
display: inline-block;
}

.torrent_screenshots > img {
width: 50%;
border: 1px solid transparent;
box-sizing: border-box;
}

/* Ratio Colors */
.r00 { color: #FF0000; }
.r01,.r02 { color: #FF1300; }
.r03 { color: #FF2600; }
.r04 { color: #FF4C00; }
.r05,.r06 { color: #FF5E00; }
.r07 { color: #FF7100; }
.r08 { color: #FF9700; }
.r09 { color: #FFAA00; }
.r10 { color: #74C42E; }
.r20,.r50,.r99 { color: #418B00; }

#index > #coverCont {
left: 20px;
right: initial;
}

#coverCont {
position: fixed;
right: 20px;
top: 20px;
max-width: 30%;
background-size: contain;
background-repeat: no-repeat;
z-index: 9999;
}

#coverCont img {
max-width: 100%;
}

.search_warning {
position: absolute;
}

#admincommentlinks {
max-height: 300px;
overflow-y: scroll;
}

.poll_your_answer {
font-weight: bold;
}

.net_box {
display: inline-block;
width: calc(20% - 4px);
margin: 2px;
vertical-align: top;
font-size: 10pt;
}
.net_box > .box {
min-height: 60px;
display: flex;
align-items: center;
}
.net_box > .box > span {
width: 100%;
}

input[type="search"] {
-webkit-appearance: textfield;
}

+ 47
- 0
static/styles/log.css Datei anzeigen

@@ -0,0 +1,47 @@
pre, blockquote {
color: #444;
}

.log1 {
color: purple;
}

.log2 {
color: yellow;
}

.log3 {
color: blue;
}

.log4 {
font-weight: bold;
}

.log5 {
text-decoration: underline;
}

.good {
font-weight: bold;
color: green;
}

.bad {
font-weight: bold;
color: red;
}

.goodish {
font-weight: bold;
color: #35BF00;
}

.badish {
font-weight: bold;
color: #E5B244;
}

pre {
overflow: auto;
}

+ 28
- 0
static/styles/tooltipster/custom.css Datei anzeigen

@@ -0,0 +1,28 @@
/* Main */

body {
background-color: #dcdcdc;
color: #0b0b0b;
font-size: 16px;
line-height: 22px;
}

.container, #container {
width: 978px;
margin: 10px auto;
padding: 60px;
box-shadow: 0px 0px 10px rgba(0,0,0,0.2);
background: #fff;
text-align: left;
display: block;
overflow: hidden;
}

.item {
width: 200px;
float: left;
padding: 10px;
margin: 10px;
background: #000;
color: #fff;
}

+ 44
- 0
static/styles/tooltipster/reset.css Datei anzeigen

@@ -0,0 +1,44 @@
@charset "UTF-8";

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%;
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;
}
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;
}

+ 290
- 0
static/styles/tooltipster/style.css Datei anzeigen

@@ -0,0 +1,290 @@
/* This is the default Tooltipster theme (feel free to modify or duplicate and create multiple themes!): */
.tooltipster-default {
border-radius: 5px;
border: 2px solid #808080;
background: #E0E0E0;
color: #444;
}

/* Use this next selector to style things like font-size and line-height: */
.tooltipster-default .tooltipster-content {
font-family: Arial, sans-serif;
font-size: 11px;
line-height: 14px;
padding: 4px 5px;
overflow: hidden;
}

/* This next selector defines the color of the border on the outside of the arrow. This will automatically match the color and size of the border set on the main tooltip styles. Set display: none; if you would like a border around the tooltip but no border around the arrow */
.tooltipster-default .tooltipster-arrow .tooltipster-arrow-border {
/* border-color: ... !important; */
}


/* If you're using the icon option, use this next selector to style them */
.tooltipster-icon {
cursor: help;
margin-left: 4px;
}








/* This is the base styling required to make all Tooltipsters work */
.tooltipster-base {
padding: 0;
font-size: 0;
line-height: 0;
position: absolute;
z-index: 9999999;
pointer-events: none;
width: auto;
overflow: visible;
}
.tooltipster-base .tooltipster-content {
overflow: hidden;
}


/* These next classes handle the styles for the little arrow attached to the tooltip. By default, the arrow will inherit the same colors and border as what is set on the main tooltip itself. */
.tooltipster-arrow {
display: block;
text-align: center;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: -1;
}
.tooltipster-arrow span, .tooltipster-arrow-border {
display: block;
width: 0;
height: 0;
position: absolute;
}
.tooltipster-arrow-top span, .tooltipster-arrow-top-right span, .tooltipster-arrow-top-left span {
border-left: 8px solid transparent !important;
border-right: 8px solid transparent !important;
border-top: 8px solid;
bottom: -8px;
}
.tooltipster-arrow-top .tooltipster-arrow-border, .tooltipster-arrow-top-right .tooltipster-arrow-border, .tooltipster-arrow-top-left .tooltipster-arrow-border {
border-left: 9px solid transparent !important;
border-right: 9px solid transparent !important;
border-top: 9px solid;
bottom: -8px;
}

.tooltipster-arrow-bottom span, .tooltipster-arrow-bottom-right span, .tooltipster-arrow-bottom-left span {
border-left: 8px solid transparent !important;
border-right: 8px solid transparent !important;
border-bottom: 8px solid;
top: -8px;
}
.tooltipster-arrow-bottom .tooltipster-arrow-border, .tooltipster-arrow-bottom-right .tooltipster-arrow-border, .tooltipster-arrow-bottom-left .tooltipster-arrow-border {
border-left: 9px solid transparent !important;
border-right: 9px solid transparent !important;
border-bottom: 9px solid;
top: -8px;
}
.tooltipster-arrow-top span, .tooltipster-arrow-top .tooltipster-arrow-border, .tooltipster-arrow-bottom span, .tooltipster-arrow-bottom .tooltipster-arrow-border {
left: 0;
right: 0;
margin: 0 auto;
}
.tooltipster-arrow-top-left span, .tooltipster-arrow-bottom-left span {
left: 6px;
}
.tooltipster-arrow-top-left .tooltipster-arrow-border, .tooltipster-arrow-bottom-left .tooltipster-arrow-border {
left: 5px;
}
.tooltipster-arrow-top-right span, .tooltipster-arrow-bottom-right span {
right: 6px;
}
.tooltipster-arrow-top-right .tooltipster-arrow-border, .tooltipster-arrow-bottom-right .tooltipster-arrow-border {
right: 5px;
}
.tooltipster-arrow-left span, .tooltipster-arrow-left .tooltipster-arrow-border {
border-top: 8px solid transparent !important;
border-bottom: 8px solid transparent !important;
border-left: 8px solid;
top: 50%;
margin-top: -7px;
right: -8px;
}
.tooltipster-arrow-left .tooltipster-arrow-border {
border-top: 9px solid transparent !important;
border-bottom: 9px solid transparent !important;
border-left: 9px solid;
margin-top: -8px;
}
.tooltipster-arrow-right span, .tooltipster-arrow-right .tooltipster-arrow-border {
border-top: 8px solid transparent !important;
border-bottom: 8px solid transparent !important;
border-right: 8px solid;
top: 50%;
margin-top: -7px;
left: -8px;
}
.tooltipster-arrow-right .tooltipster-arrow-border {
border-top: 9px solid transparent !important;
border-bottom: 9px solid transparent !important;
border-right: 9px solid;
margin-top: -8px;
}


/* Some CSS magic for the awesome animations - feel free to make your own custom animations and reference it in your Tooltipster settings! */

.tooltipster-fade {
opacity: 0;
-webkit-transition-property: opacity;
-moz-transition-property: opacity;
-o-transition-property: opacity;
-ms-transition-property: opacity;
transition-property: opacity;
}
.tooltipster-fade-show {
opacity: 1;
}

.tooltipster-grow {
-webkit-transform: scale(0,0);
-moz-transform: scale(0,0);
-o-transform: scale(0,0);
-ms-transform: scale(0,0);
transform: scale(0,0);
-webkit-transition-property: -webkit-transform;
-moz-transition-property: -moz-transform;
-o-transition-property: -o-transform;
-ms-transition-property: -ms-transform;
transition-property: transform;
-webkit-backface-visibility: hidden;
}
.tooltipster-grow-show {
-webkit-transform: scale(1,1);
-moz-transform: scale(1,1);
-o-transform: scale(1,1);
-ms-transform: scale(1,1);
transform: scale(1,1);
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
}

.tooltipster-swing {
opacity: 0;
-webkit-transform: rotateZ(4deg);
-moz-transform: rotateZ(4deg);
-o-transform: rotateZ(4deg);
-ms-transform: rotateZ(4deg);
transform: rotateZ(4deg);
-webkit-transition-property: -webkit-transform, opacity;
-moz-transition-property: -moz-transform;
-o-transition-property: -o-transform;
-ms-transition-property: -ms-transform;
transition-property: transform;
}
.tooltipster-swing-show {
opacity: 1;
-webkit-transform: rotateZ(0deg);
-moz-transform: rotateZ(0deg);
-o-transform: rotateZ(0deg);
-ms-transform: rotateZ(0deg);
transform: rotateZ(0deg);
-webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 1);
-webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
-moz-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
-ms-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
-o-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
}

.tooltipster-fall {
top: 0;
-webkit-transition-property: top;
-moz-transition-property: top;
-o-transition-property: top;
-ms-transition-property: top;
transition-property: top;
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
}
.tooltipster-fall-show {
}
.tooltipster-fall.tooltipster-dying {
-webkit-transition-property: all;
-moz-transition-property: all;
-o-transition-property: all;
-ms-transition-property: all;
transition-property: all;
top: 0px !important;
opacity: 0;
}

.tooltipster-slide {
left: -40px;
-webkit-transition-property: left;
-moz-transition-property: left;
-o-transition-property: left;
-ms-transition-property: left;
transition-property: left;
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
}
.tooltipster-slide.tooltipster-slide-show {
}
.tooltipster-slide.tooltipster-dying {
-webkit-transition-property: all;
-moz-transition-property: all;
-o-transition-property: all;
-ms-transition-property: all;
transition-property: all;
left: 0px !important;
opacity: 0;
}


/* CSS transition for when contenting is changing in a tooltip that is still open. The only properties that will NOT transition are: width, height, top, and left */
.tooltipster-content-changing {
opacity: 0.5;
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}


.gold_theme {
background: gold radial-gradient(lightyellow, gold);
color: #A25128;
}
.gold_theme .tooltipster-arrow>span+span {
border-top-color: rgb(255,228,81) !important;
}

/* Use this next selector to style things like font-size and line-height: */
.gold_theme .tooltipster-content {
font-family: Arial, sans-serif;
font-size: 14px;
line-height: 16px;
padding: 8px 10px;
overflow: hidden;
}

+ 12
- 0
static/styles/tooltipster/themes/tooltipster-light.css Datei anzeigen

@@ -0,0 +1,12 @@
.tooltipster-light {
border-radius: 5px;
border: 1px solid #cccccc;
background: #ededed;
color: #666666;
}
.tooltipster-light .tooltipster-content {
font-family: Arial, sans-serif;
font-size: 14px;
line-height: 16px;
padding: 8px 10px;
}

+ 12
- 0
static/styles/tooltipster/themes/tooltipster-noir.css Datei anzeigen

@@ -0,0 +1,12 @@
.tooltipster-noir {
border-radius: 0px;
border: 3px solid #2c2c2c;
background: #fff;
color: #2c2c2c;
}
.tooltipster-noir .tooltipster-content {
font-family: 'Georgia', serif;
font-size: 14px;
line-height: 16px;
padding: 8px 10px;
}

+ 12
- 0
static/styles/tooltipster/themes/tooltipster-punk.css Datei anzeigen

@@ -0,0 +1,12 @@
.tooltipster-punk {
border-radius: 5px;
border-bottom: 3px solid #f71169;
background: #2a2a2a;
color: #fff;
}
.tooltipster-punk .tooltipster-content {
font-family: 'Courier', monospace;
font-size: 14px;
line-height: 16px;
padding: 8px 10px;
}

+ 12
- 0
static/styles/tooltipster/themes/tooltipster-shadow.css Datei anzeigen

@@ -0,0 +1,12 @@
.tooltipster-shadow {
border-radius: 5px;
background: #fff;
box-shadow: 0px 0px 14px rgba(0,0,0,0.3);
color: #2c2c2c;
}
.tooltipster-shadow .tooltipster-content {
font-family: 'Arial', sans-serif;
font-size: 14px;
line-height: 16px;
padding: 8px 10px;
}

Laden…
Abbrechen
Speichern