Misc/Fixup

* make time formatting js compatible
 * add auto-discovery for rss feeds
 * fix typos
 * define more magic numbers
This commit is contained in:
Sarjuuk
2025-07-27 03:42:23 +02:00
parent b35ab67360
commit 40b5c992e2
18 changed files with 70 additions and 65 deletions

View File

@@ -55,10 +55,10 @@ class AjaxData extends AjaxHandler
$result .= $this->loadProfilerData($set); $result .= $this->loadProfilerData($set);
break; break;
case 'companions': case 'companions':
$result .= $this->loadProfilerData($set, '778'); $result .= $this->loadProfilerData($set, SKILL_COMPANIONS);
break; break;
case 'mounts': case 'mounts':
$result .= $this->loadProfilerData($set, '777'); $result .= $this->loadProfilerData($set, SKILL_MOUNTS);
break; break;
case 'quests': case 'quests':
$catg = isset($this->_get['catg']) ? $this->_get['catg'] : 'null'; $catg = isset($this->_get['catg']) ? $this->_get['catg'] : 'null';
@@ -81,7 +81,7 @@ class AjaxData extends AjaxHandler
$result .= "\n\$WowheadProfiler.loadOnDemand('recipes', null);\n"; $result .= "\n\$WowheadProfiler.loadOnDemand('recipes', null);\n";
break; break;
// locale independant // locale independent
case 'quick-excludes': case 'quick-excludes':
case 'weight-presets': case 'weight-presets':
case 'item-scaling': case 'item-scaling':

View File

@@ -846,16 +846,16 @@ define('ITEM_CLASS_CONTAINER', 1);
define('ITEM_CLASS_WEAPON', 2); define('ITEM_CLASS_WEAPON', 2);
define('ITEM_CLASS_GEM', 3); define('ITEM_CLASS_GEM', 3);
define('ITEM_CLASS_ARMOR', 4); define('ITEM_CLASS_ARMOR', 4);
define('ITEM_CLASS_REAGENT', 5); define('ITEM_CLASS_REAGENT', 5); // OBSOLETE (reagents are in Class:Misc; SubClass:Reagent)
define('ITEM_CLASS_AMMUNITION', 6); define('ITEM_CLASS_AMMUNITION', 6);
define('ITEM_CLASS_TRADEGOOD', 7); define('ITEM_CLASS_TRADEGOOD', 7);
define('ITEM_CLASS_GENERIC', 8); define('ITEM_CLASS_GENERIC', 8); // OBSOLETE
define('ITEM_CLASS_RECIPE', 9); define('ITEM_CLASS_RECIPE', 9);
define('ITEM_CLASS_MONEY', 10); define('ITEM_CLASS_MONEY', 10);
define('ITEM_CLASS_QUIVER', 11); define('ITEM_CLASS_QUIVER', 11);
define('ITEM_CLASS_QUEST', 12); define('ITEM_CLASS_QUEST', 12);
define('ITEM_CLASS_KEY', 13); define('ITEM_CLASS_KEY', 13);
define('ITEM_CLASS_PERMANENT', 14); define('ITEM_CLASS_PERMANENT', 14); // OBSOLETE
define('ITEM_CLASS_MISC', 15); define('ITEM_CLASS_MISC', 15);
define('ITEM_CLASS_GLYPH', 16); define('ITEM_CLASS_GLYPH', 16);
@@ -918,7 +918,7 @@ define('ITEM_SUBCLASS_PRISMATIC_GEM', 8);
// ItemSubClass - Armor (4) // ItemSubClass - Armor (4)
define('ITEM_SUBCLASS_MISC_ARMOR', 0); define('ITEM_SUBCLASS_MISC_ARMOR', 0);
define('ITEM_SUBCLASS_CLOTH_ARMOR', 1); define('ITEM_SUBCLASS_CLOTH_ARMOR', 1);
define('ITEM_SUBCLASS_LETHER_ARMOR', 2); define('ITEM_SUBCLASS_LEATHER_ARMOR', 2);
define('ITEM_SUBCLASS_MAIL_ARMOR', 3); define('ITEM_SUBCLASS_MAIL_ARMOR', 3);
define('ITEM_SUBCLASS_PLATE_ARMOR', 4); define('ITEM_SUBCLASS_PLATE_ARMOR', 4);
define('ITEM_SUBCLASS_BUCKLER', 5); define('ITEM_SUBCLASS_BUCKLER', 5);
@@ -1735,6 +1735,8 @@ define('SKILL_LOCKPICKING', 633);
define('SKILL_JEWELCRAFTING', 755); define('SKILL_JEWELCRAFTING', 755);
define('SKILL_RIDING', 762); define('SKILL_RIDING', 762);
define('SKILL_INSCRIPTION', 773); define('SKILL_INSCRIPTION', 773);
define('SKILL_MOUNTS', 777);
define('SKILL_COMPANIONS', 778);
define('SKILLS_TRADE_PRIMARY', [SKILL_BLACKSMITHING, SKILL_LEATHERWORKING, SKILL_ALCHEMY, SKILL_HERBALISM, SKILL_MINING, SKILL_TAILORING, SKILL_ENGINEERING, SKILL_ENCHANTING, SKILL_SKINNING, SKILL_JEWELCRAFTING, SKILL_INSCRIPTION]); define('SKILLS_TRADE_PRIMARY', [SKILL_BLACKSMITHING, SKILL_LEATHERWORKING, SKILL_ALCHEMY, SKILL_HERBALISM, SKILL_MINING, SKILL_TAILORING, SKILL_ENGINEERING, SKILL_ENCHANTING, SKILL_SKINNING, SKILL_JEWELCRAFTING, SKILL_INSCRIPTION]);
define('SKILLS_TRADE_SECONDARY', [SKILL_FIRST_AID, SKILL_COOKING, SKILL_FISHING, SKILL_RIDING]); define('SKILLS_TRADE_SECONDARY', [SKILL_FIRST_AID, SKILL_COOKING, SKILL_FISHING, SKILL_RIDING]);

View File

@@ -28,7 +28,7 @@ enum Locale : int
return match ($this) return match ($this)
{ {
self::EN => 'en', self::EN => 'en',
self::KR => 'kt', self::KR => 'ko',
self::FR => 'fr', self::FR => 'fr',
self::DE => 'de', self::DE => 'de',
self::CN => 'cn', self::CN => 'cn',

View File

@@ -205,7 +205,7 @@ abstract class CLI
$path .= ($path ? DIRECTORY_SEPARATOR : '').trim($fileOrPath); $path .= ($path ? DIRECTORY_SEPARATOR : '').trim($fileOrPath);
// remove double quotes (from erronous user input), single quotes are // remove double quotes (from erroneous user input), single quotes are
// valid chars for filenames and removing those mutilates several wow icons // valid chars for filenames and removing those mutilates several wow icons
$path = str_replace('"', '', $path); $path = str_replace('"', '', $path);

View File

@@ -50,7 +50,7 @@ abstract class BaseType
* ['flags2', 0xF, '&'], * ['flags2', 0xF, '&'],
* ] * ]
* [['mask', 0x3, '&'], 0], * [['mask', 0x3, '&'], 0],
* ['joinedTbl.field', NULL] // NULL must be explicitly specified "['joinedTbl.field']" would be skipped as erronous definition (only really usefull when left-joining) * ['joinedTbl.field', NULL] // NULL must be explicitly specified "['joinedTbl.field']" would be skipped as erroneous definition (only really usefull when left-joining)
* 'OR', * 'OR',
* 5 * 5
* ) * )
@@ -1002,7 +1002,7 @@ abstract class Filter
protected const ENUM_RACE = array( null, 1, 2, 3, 4, 5, 6, 7, 8, null, 10, 11, true, false); protected const ENUM_RACE = array( null, 1, 2, 3, 4, 5, 6, 7, 8, null, 10, 11, true, false);
protected const ENUM_PROFESSION = array( null, 171, 164, 185, 333, 202, 129, 755, 165, 186, 197, true, false, 356, 182, 773); protected const ENUM_PROFESSION = array( null, 171, 164, 185, 333, 202, 129, 755, 165, 186, 197, true, false, 356, 182, 773);
public $error = false; // erronous search fields public $error = false; // erroneous search fields
private $cndSet = []; private $cndSet = [];

View File

@@ -60,7 +60,7 @@ class EnchantmentList extends BaseType
// issue with scaling stats enchantments // issue with scaling stats enchantments
// stats are stored as NOT NULL to be usable by the search filters and such become indistinguishable from scaling enchantments that _actually_ use the value 0 // stats are stored as NOT NULL to be usable by the search filters and such become indistinguishable from scaling enchantments that _actually_ use the value 0
// so filter the stats container and if it is empty, rebuild from self. .. there are no mixed scaling/static enchantments, right!? // so filter the stats container and if it is empty, rebuild from self. .. there are no mixed scaling/static enchantments, right!?
$this->jsonStats[$this->id] = (new StatsContainer)->fromJson($curTpl, true)->filter(); $this->jsonStats[$this->id] = (new StatsContainer())->fromJson($curTpl, true)->filter();
if (!count($this->jsonStats[$this->id])) if (!count($this->jsonStats[$this->id]))
$this->jsonStats[$this->id]->fromEnchantment($curTpl); $this->jsonStats[$this->id]->fromEnchantment($curTpl);
} }

View File

@@ -2673,7 +2673,7 @@ class ItemListFilter extends Filter
return in_array($v, $sl); return in_array($v, $sl);
// armor - any; any armor // armor - any; any armor
else if ($c[0] == ITEM_CLASS_ARMOR && (!isset($c[1]) || in_array($c[1], [ITEM_SUBCLASS_CLOTH_ARMOR, ITEM_SUBCLASS_LETHER_ARMOR, ITEM_SUBCLASS_MAIL_ARMOR, ITEM_SUBCLASS_PLATE_ARMOR]))) else if ($c[0] == ITEM_CLASS_ARMOR && (!isset($c[1]) || in_array($c[1], [ITEM_SUBCLASS_CLOTH_ARMOR, ITEM_SUBCLASS_LEATHER_ARMOR, ITEM_SUBCLASS_MAIL_ARMOR, ITEM_SUBCLASS_PLATE_ARMOR])))
return in_array($v, $sl); return in_array($v, $sl);
return false; return false;

View File

@@ -288,45 +288,46 @@ abstract class Util
public static function formatTime(int $msec, bool $short = false) : string public static function formatTime(int $msec, bool $short = false) : string
{ {
[$ms, $s, $m, $h, $d] = self::parseTime(abs($msec)); [$ms, $s, $m, $h, $d] = self::parseTime(abs($msec));
// \u00A0 is &nbsp, but also usable by js
if ($short) if ($short)
{ {
if ($_ = round($d / 364)) if ($_ = round($d / 365))
return $_." ".Lang::timeUnits('ab', 0); return $_."\u{00A0}".Lang::timeUnits('ab', 0);
if ($_ = round($d / 30)) if ($_ = round($d / 30))
return $_." ".Lang::timeUnits('ab', 1); return $_."\u{00A0}".Lang::timeUnits('ab', 1);
if ($_ = round($d / 7)) if ($_ = round($d / 7))
return $_." ".Lang::timeUnits('ab', 2); return $_."\u{00A0}".Lang::timeUnits('ab', 2);
if ($_ = round($d)) if ($_ = round($d))
return $_." ".Lang::timeUnits('ab', 3); return $_."\u{00A0}".Lang::timeUnits('ab', 3);
if ($_ = round($h)) if ($_ = round($h))
return $_." ".Lang::timeUnits('ab', 4); return $_."\u{00A0}".Lang::timeUnits('ab', 4);
if ($_ = round($m)) if ($_ = round($m))
return $_." ".Lang::timeUnits('ab', 5); return $_."\u{00A0}".Lang::timeUnits('ab', 5);
if ($_ = round($s + $ms / 1000, 2)) if ($_ = round($s + $ms / 1000, 2))
return $_." ".Lang::timeUnits('ab', 6); return $_."\u{00A0}".Lang::timeUnits('ab', 6);
if ($ms) if ($ms)
return $ms." ".Lang::timeUnits('ab', 7); return $ms."\u{00A0}".Lang::timeUnits('ab', 7);
return '0 '.Lang::timeUnits('ab', 6); return '0 '.Lang::timeUnits('ab', 6);
} }
else else
{ {
$_ = $d + $h / 24; $_ = $d + $h / 24;
if ($_ > 1 && !($_ % 364)) // whole years if ($_ > 1 && !($_ % 365)) // whole years
return round(($d + $h / 24) / 364, 2)." ".Lang::timeUnits($d / 364 == 1 && !$h ? 'sg' : 'pl', 0); return round(($d + $h / 24) / 364, 2)."\u{00A0}".Lang::timeUnits($d / 364 == 1 && !$h ? 'sg' : 'pl', 0);
if ($_ > 1 && !($_ % 30)) // whole month if ($_ > 1 && !($_ % 30)) // whole month
return round(($d + $h / 24) / 30, 2)." ".Lang::timeUnits($d / 30 == 1 && !$h ? 'sg' : 'pl', 1); return round(($d + $h / 24) / 30, 2)."\u{00A0}".Lang::timeUnits($d / 30 == 1 && !$h ? 'sg' : 'pl', 1);
if ($_ > 1 && !($_ % 7)) // whole weeks if ($_ > 1 && !($_ % 7)) // whole weeks
return round(($d + $h / 24) / 7, 2)." ".Lang::timeUnits($d / 7 == 1 && !$h ? 'sg' : 'pl', 2); return round(($d + $h / 24) / 7, 2)."\u{00A0}".Lang::timeUnits($d / 7 == 1 && !$h ? 'sg' : 'pl', 2);
if ($d) if ($d)
return round($d + $h / 24, 2)." ".Lang::timeUnits($d == 1 && !$h ? 'sg' : 'pl', 3); return round($d + $h / 24, 2)."\u{00A0}".Lang::timeUnits($d == 1 && !$h ? 'sg' : 'pl', 3);
if ($h) if ($h)
return round($h + $m / 60, 2)." ".Lang::timeUnits($h == 1 && !$m ? 'sg' : 'pl', 4); return round($h + $m / 60, 2)."\u{00A0}".Lang::timeUnits($h == 1 && !$m ? 'sg' : 'pl', 4);
if ($m) if ($m)
return round($m + $s / 60, 2)." ".Lang::timeUnits($m == 1 && !$s ? 'sg' : 'pl', 5); return round($m + $s / 60, 2)."\u{00A0}".Lang::timeUnits($m == 1 && !$s ? 'sg' : 'pl', 5);
if ($s) if ($s)
return round($s + $ms / 1000, 2)." ".Lang::timeUnits($s == 1 && !$ms ? 'sg' : 'pl', 6); return round($s + $ms / 1000, 2)."\u{00A0}".Lang::timeUnits($s == 1 && !$ms ? 'sg' : 'pl', 6);
if ($ms) if ($ms)
return $ms." ".Lang::timeUnits($ms == 1 ? 'sg' : 'pl', 7); return $ms." ".Lang::timeUnits($ms == 1 ? 'sg' : 'pl', 7);

View File

@@ -625,9 +625,9 @@ class Lang
{ {
case -1: // default Lang::vspf case case -1: // default Lang::vspf case
case self::FMT_HTML: case self::FMT_HTML:
return sprintf('<span style="color: #%1s%2s;">%3s</span>', $rgb, $a, $text); return sprintf('<span style="color: #%1$s%2$s;">%3$s</span>', $rgb, $a, $text);
case self::FMT_MARKUP: case self::FMT_MARKUP:
return sprintf('[span color=#%1s]%3s[/span]', $rgb, $text); // doesn't support alpha return sprintf('[span color=#%1$s]%3$s[/span]', $rgb, $a, $text); // doesn't support alpha
case self::FMT_RAW: case self::FMT_RAW:
default: default:
return $text; return $text;

View File

@@ -53,7 +53,7 @@ $lang = array(
'or' => " или ", 'or' => " или ",
'back' => "Назад", 'back' => "Назад",
'reputationTip' => "Очки репутации", 'reputationTip' => "Очки репутации",
'byUser' => 'От <a href="HOST_URL/?user=%1$s"%2$s>%1s</a> ', 'byUser' => 'От <a href="HOST_URL/?user=%1$s"%2$s>%1$s</a> ',
'help' => "Справка", 'help' => "Справка",
'status' => "Статус", 'status' => "Статус",
'yes' => "Да", 'yes' => "Да",

View File

@@ -17,7 +17,7 @@ class AdminPage extends GenericPage
protected $extraHTML = ''; protected $extraHTML = '';
protected $tpl = null; // depends on the subject protected $tpl = null; // depends on the subject
protected $reqUGroup = U_GROUP_NONE; // actual group dependant on the subPage protected $reqUGroup = U_GROUP_NONE; // actual group dependent on the subPage
protected $reqAuth = true; protected $reqAuth = true;
protected $path = [4]; protected $path = [4];
protected $tabId = 4; protected $tabId = 4;

View File

@@ -258,7 +258,7 @@ class NpcPage extends GenericPage
// > Stats // > Stats
$stats = []; $stats = [];
$modes = []; // get difficulty versions if set $modes = []; // get difficulty versions if set
$hint = '[tooltip name=%3$s][table cellspacing=10][tr]%1s[/tr][/table][/tooltip][span class=tip tooltip=%3$s]%2s[/span]'; $hint = '[tooltip name=%3$s][table cellspacing=10][tr]%1$s[/tr][/table][/tooltip][span class=tip tooltip=%3$s]%2$s[/span]';
$modeRow = '[tr][td]%s&nbsp;&nbsp;[/td][td]%s[/td][/tr]'; $modeRow = '[tr][td]%s&nbsp;&nbsp;[/td][td]%s[/td][/tr]';
// Health // Health
$health = $this->subject->getBaseStats('health'); $health = $this->subject->getBaseStats('health');
@@ -438,7 +438,7 @@ class NpcPage extends GenericPage
if ($auras = DB::World()->selectCell('SELECT auras FROM creature_template_addon WHERE entry = ?d', $this->typeId)) if ($auras = DB::World()->selectCell('SELECT auras FROM creature_template_addon WHERE entry = ?d', $this->typeId))
{ {
$auras = preg_replace('/[^\d ]/', ' ', $auras); // remove erronous chars from string $auras = preg_replace('/[^\d ]/', ' ', $auras); // remove erroneous chars from string
$genSpells = array_merge($genSpells, array_filter(explode(' ', $auras))); $genSpells = array_merge($genSpells, array_filter(explode(' ', $auras)));
} }

View File

@@ -119,7 +119,7 @@ class ProfilePage extends GenericPage
if ($char['guildGUID']) if ($char['guildGUID'])
{ {
// create empty guild if nessecary to satisfy foreign keys // create empty guild if necessary to satisfy foreign keys
$char['guild'] = DB::Aowow()->selectCell('SELECT id FROM ?_profiler_guild WHERE realm = ?d AND realmGUID = ?d', $this->realmId, $char['guildGUID']); $char['guild'] = DB::Aowow()->selectCell('SELECT id FROM ?_profiler_guild WHERE realm = ?d AND realmGUID = ?d', $this->realmId, $char['guildGUID']);
if (!$char['guild']) if (!$char['guild'])
$char['guild'] = DB::Aowow()->query('INSERT INTO ?_profiler_guild (realm, realmGUID, cuFlags, name) VALUES (?d, ?d, ?d, ?)', $this->realmId, $char['guildGUID'], PROFILER_CU_NEEDS_RESYNC, $char['guildName']); $char['guild'] = DB::Aowow()->query('INSERT INTO ?_profiler_guild (realm, realmGUID, cuFlags, name) VALUES (?d, ?d, ?d, ?)', $this->realmId, $char['guildGUID'], PROFILER_CU_NEEDS_RESYNC, $char['guildName']);

View File

@@ -59,35 +59,35 @@ class SpellsPage extends GenericPage
9 => [355, 354, 593], 9 => [355, 354, 593],
11 => [574, 134, 573] 11 => [574, 134, 573]
), ),
9 => [129, 185, 356, 762], // Secondary Skills 9 => SKILLS_TRADE_SECONDARY, // Secondary Skills
11 => array( // Professions: Skill => Spell 11 => array( // Professions: Skill => Spell
171 => true, SKILL_ALCHEMY => true,
164 => [9788, 9787, 17041, 17040, 17039], SKILL_BLACKSMITHING => [9788, 9787, 17041, 17040, 17039],
333 => true, SKILL_ENCHANTING => true,
202 => [20219, 20222], SKILL_ENGINEERING => [20219, 20222],
182 => true, SKILL_HERBALISM => true,
773 => true, SKILL_INSCRIPTION => true,
755 => true, SKILL_JEWELCRAFTING => true,
165 => [10656, 10658, 10660], SKILL_LEATHERWORKING => [10656, 10658, 10660],
186 => true, SKILL_MINING => true,
393 => true, SKILL_SKINNING => true,
197 => [26798, 26801, 26797], SKILL_TAILORING => [26798, 26801, 26797],
) )
); );
private $shortFilter = array( private $shortFilter = array(
129 => [ 6, 7], // First Aid SKILL_FIRST_AID => [ 6, 7],
164 => [ 2, 4], // Blacksmithing SKILL_BLACKSMITHING => [ 2, 4],
165 => [ 8, 1], // Leatherworking SKILL_LEATHERWORKING => [ 8, 1],
171 => [ 1, 6], // Alchemy SKILL_ALCHEMY => [ 1, 6],
185 => [ 3, 5], // Cooking SKILL_COOKING => [ 3, 5],
186 => [ 9, 0], // Mining SKILL_MINING => [ 9, 0],
197 => [10, 2], // Tailoring SKILL_TAILORING => [10, 2],
202 => [ 5, 3], // Engineering SKILL_ENGINEERING => [ 5, 3],
333 => [ 4, 8], // Enchanting SKILL_ENCHANTING => [ 4, 8],
356 => [ 0, 9], // Fishing SKILL_FISHING => [ 0, 9],
755 => [ 7, 10], // Jewelcrafting SKILL_JEWELCRAFTING => [ 7, 10],
773 => [15, 0], // Inscription SKILL_INSCRIPTION => [15, 0],
); );

View File

@@ -89,7 +89,7 @@ CLISetup::registerSetup("build", new class extends SetupScript
$_spells[] = $set['spell'.$i]; $_spells[] = $set['spell'.$i];
} }
// costy and locale-independant -> cache // costy and locale-independent -> cache
if ($_spells) if ($_spells)
$jsonBonus += (new SpellList(array(['s.id', $_spells])))->getStatGain(); $jsonBonus += (new SpellList(array(['s.id', $_spells])))->getStatGain();

View File

@@ -406,7 +406,7 @@ abstract class SetupScript
protected $worldDependency = []; // query when this table changed (--sync command) protected $worldDependency = []; // query when this table changed (--sync command)
protected $info = []; // arr: 0 => self, n => genSteps cmd => [[arr<str>:optionalArgs], int:argFlags, str:description] protected $info = []; // arr: 0 => self, n => genSteps cmd => [[arr<str>:optionalArgs], int:argFlags, str:description]
protected $setupAfter = [[], []]; // [[sqlgen], [filegen]] used to sort scripts that rely on each other being executed in the right order (script names are not nessecarily the same as their table names) protected $setupAfter = [[], []]; // [[sqlgen], [filegen]] used to sort scripts that rely on each other being executed in the right order (script names are not necessarily the same as their table names)
protected $success = true; protected $success = true;
protected $localized = false; // push locale directories onto $requiredDirs? protected $localized = false; // push locale directories onto $requiredDirs?

View File

@@ -592,7 +592,7 @@ var PageTemplate = new function()
{ {
className: (character.pinned ? 'icon-star-right ' : '') + 'c' + character.classs, className: (character.pinned ? 'icon-star-right ' : '') + 'c' + character.classs,
// tinyIcon: $WH.g_getProfileIcon(character.race, character.classs, character.gender, character.level, character.id, 'tiny') // tinyIcon: $WH.g_getProfileIcon(character.race, character.classs, character.gender, character.level, character.id, 'tiny')
// aowow: profileId should not be nessecary here // aowow: profileId should not be necessary here
tinyIcon: $WH.g_getProfileIcon(character.race, character.classs, character.gender, character.level, 0, 'tiny') tinyIcon: $WH.g_getProfileIcon(character.race, character.classs, character.gender, character.level, 0, 'tiny')
}]; }];

View File

@@ -5,7 +5,9 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="SHORTCUT ICON" href="<?=Cfg::get('STATIC_URL'); ?>/images/logos/favicon.ico" /> <link rel="SHORTCUT ICON" href="<?=Cfg::get('STATIC_URL'); ?>/images/logos/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="<?=Cfg::get('STATIC_URL'); ?>/download/searchplugins/aowow.xml" title="Aowow" /> <link rel="search" type="application/opensearchdescription+xml" href="<?=Cfg::get('STATIC_URL'); ?>/download/searchplugins/aowow.xml" title="Aowow" />
<?php <?php if (isset($this->rss)): ?>
<link rel="alternate" type="application/rss+xml" title="<?=Util::htmlEscape(implode(' - ', $this->title)); ?>" href="<?=$this->rss; ?>"/>
<?php endif;
foreach ($this->css as [$type, $css]): foreach ($this->css as [$type, $css]):
if ($type == SC_CSS_FILE): if ($type == SC_CSS_FILE):
echo ' <link rel="stylesheet" type="text/css" href="'.$css."\" />\n"; echo ' <link rel="stylesheet" type="text/css" href="'.$css."\" />\n";