- implemented comments (in general and as preview on account page & latest comments)

- partially implemented site reputation (required to grant privileges to comments)
- reworked 'home'-page (the news-box is now as configurable as you want)
- removed some ancient compatibility-code for IE67 (srsly, its 2014!)
- dropped associated stylesheets, reviewed the rest
- split some user-restrictions to trigger on insufficient siteRep
- added text-page: Markup-Guide
- implemented new class to handle Markup

- bugfixes [TM]

- also you will need to reapply the db-dumps (you may want do save account*, news,
reports, ..)
This commit is contained in:
Sarjuuk 2014-07-27 15:47:12 +02:00
parent 48527b0b68
commit 1dfc469d43
91 changed files with 9349 additions and 7450 deletions

View file

@ -26,13 +26,25 @@ class AjaxHandler
public function handle($what)
{
$f = 'handle'.ucFirst($what);
$f = 'handle'.ucFirst(str_replace(['-', '_'], '', $what));
if (!$what || !method_exists($this, $f))
return null;
return $this->$f();
}
/* responses
header()
*/
private function handleGotocomment()
{
if (empty($this->get['id']))
return;
if ($_ = DB::Aowow()->selectRow('SELECT c2.id as zwei, c1.id as eins, IFNULL(c2.id, c1.id) AS id, IFNULL(c2.type, c1.type) AS type, IFNULL(c2.typeId, c1.typeId) AS typeId FROM ?_comments c1 LEFT JOIN ?_comments c2 ON c1.replyTo = c2.id WHERE c1.id = ?d', $this->get['id']))
header('Location: ?'.Util::$typeStrings[$_['type']].'='.$_['typeId'].'#comments:id='.$_['id'].($_['id'] != $this->get['id'] ? ':reply='.$this->get['id'] : null));
}
/* responses
<string>
*/
@ -219,7 +231,7 @@ class AjaxHandler
if (!$desc)
return 3;
if (strlen($desc) > 500)
if (mb_strlen($desc) > 500)
return 2;
// check already reported
@ -253,26 +265,296 @@ class AjaxHandler
return 'save to db unsuccessful';
}
/* responses
- rate:
0: success
1: ratingban
3: rated too often
$: silent error
- rating:
yet to check
*/
private function handleComment()
{
// post sizes
$_minCmt = 10;
$_maxCmt = 7500 * (User::isPremium() ? 3 : 1);
$_minRpl = 15;
$_maxRpl = 600;
$result = null;
/*
note: return values must be formated as STRICT json!
*/
switch ($this->params[0])
{
case 'rating':
return '{"success":true,"error":"","up":7,"down":9}';
case 'rate':
return 3;
default:
return null;
case 'add': // i .. have problems believing, that everything uses nifty ajax while adding comments requires a brutal header(Loacation: <wherever>), yet, thats how it is
if (empty($this->get['typeid']) || empty($this->get['type']) || !isset(Util::$typeStrings[$this->get['type']]))
return; // whatever, we cant even send him back
// trim to max length
if (!User::isInGroup(U_GROUP_MODERATOR) && mb_strlen($this->post['commentbody']) > $_maxCmt)
$this->post['body'] = substr($this->post['body'], 0, $_maxCmt);
if (User::canComment() && !empty($this->post['commentbody']) && mb_strlen($this->post['commentbody']) >= $_minCmt)
{
if ($postIdx = DB::Aowow()->query('INSERT INTO ?_comments (type, typeId, userId, roles, body, date) VALUES (?d, ?d, ?d, ?d, ?, UNIX_TIMESTAMP())', $this->get['type'], $this->get['typeid'], User::$id, User::$groups, $this->post['commentbody']))
{
Util::gainSiteReputation(User::$id, SITEREP_ACTION_COMMENT, ['id' => $postIdx]);
// every comment starts with a rating of +1 and i guess the simplest thing to do is create a db-entry with the system as owner
DB::Aowow()->query('INSERT INTO ?_comments_rates (commentId, userId, value) VALUES (?d, 0, 1)', $postIdx);
}
}
header('Location: ?'.Util::$typeStrings[$this->get['type']].'='.$this->get['typeid'].'#comments');
break;
case 'edit':
if ((!User::canComment() && !User::isInGroup(U_GROUP_MODERATOR)) || empty($this->get['id']) || empty($this->post['body']))
break;
if (mb_strlen($this->post['body']) < $_minCmt)
break;
// trim to max length
if (!User::isInGroup(U_GROUP_MODERATOR) && mb_strlen($this->post['body']) > $_maxCmt)
$this->post['body'] = substr($this->post['body'], 0, $_maxCmt);
$update = array(
'body' => $this->post['body'],
'editUserId' => User::$id,
'editDate' => time()
);
if (User::isInGroup(U_GROUP_MODERATOR))
{
$update['responseBody'] = empty($this->post['response']) ? '' : $this->post['response'];
$update['responseUserId'] = empty($this->post['response']) ? 0 : User::$id;
$update['responseRoles'] = empty($this->post['response']) ? 0 : User::$groups;
}
DB::Aowow()->query('UPDATE ?_comments SET editCount = editCount + 1, ?a WHERE id = ?d', $update, $this->get['id']);
break;
case 'delete': // user.js uses GET; global.js uses POST
if (empty($this->post['id']) && empty($this->get['id']))
break;
DB::Aowow()->query('UPDATE ?_comments SET flags = flags | 0x2, deleteUserId = ?d, deleteDate = UNIX_TIMESTAMP() WHERE id = ?d{ AND userId = ?d}',
User::$id,
empty($this->post['id']) ? $this->get['id'] : $this->post['id'],
User::isInGroup(U_GROUP_MODERATOR) ? DBSIMPLE_SKIP : User::$id
);
break;
case 'undelete': // user.js uses GET; global.js uses POST
if (empty($this->post['id']) && empty($this->get['id']))
break;
DB::Aowow()->query('UPDATE ?_comments SET flags = flags & ~0x2 WHERE id = ?d{ AND userId = deleteUserId AND deleteUserId = ?d}',
empty($this->post['id']) ? $this->get['id'] : $this->post['id'],
User::isInGroup(U_GROUP_MODERATOR) ? DBSIMPLE_SKIP : User::$id
);
break;
case 'rating': // up/down - distribution
if (empty($this->get['id']))
{
$result = ['success' => 0];
break;
}
if ($votes = DB::Aowow()->selectRow('SELECT 1 AS success, SUM(IF(value > 0, value, 0)) AS up, SUM(IF(value < 0, -value, 0)) AS down FROM ?_comments_rates WHERE commentId = ?d GROUP BY commentId', $this->get['id']))
return json_encode($votes, JSON_NUMERIC_CHECK);
$result = ['success' => 1, 'up' => 0, 'down' => 0];
break;
case 'vote': // up, down and remove
if (!User::$id || empty($this->get['id']) || empty($this->get['rating']))
{
$result = ['error' => 1, 'message' => Lang::$main['genericError']];
break;
}
$target = DB::Aowow()->selectRow('SELECT c.userId AS owner, cr.value FROM ?_comments c LEFT JOIN ?_comments_rates cr ON cr.commentId = c.id AND cr.userId = ?d WHERE c.id = ?d', User::$id, $this->get['id']);
$val = User::canSupervote() ? 2 : 1;
if ($this->get['rating'] < 0)
$val *= -1;
if (User::getCurDailyVotes() <= 0)
$result = ['error' => 1, 'message' => Lang::$main['tooManyVotes']];
else if (!$target || $val != $this->get['rating'])
$result = ['error' => 1, 'message' => Lang::$main['genericError']];
else if (($val > 0 && !User::canUpvote()) || ($val < 0 && !User::canDownvote()))
$result = ['error' => 1, 'message' => Lang::$main['bannedRating']];
if ($result)
break;
$ok = false;
// old and new have same sign; undo vote (user may have gained/lost access to superVote in the meantime)
if ($target['value'] && ($target['value'] < 0) == ($val < 0))
$ok = DB::Aowow()->query('DELETE FROM ?_comments_rates WHERE commentId = ?d AND userId = ?d', $this->get['id'], User::$id);
else // replace, because we may be overwriting an old, opposing vote
if ($ok = DB::Aowow()->query('REPLACE INTO ?_comments_rates (commentId, userId, value) VALUES (?d, ?d, ?d)', (int)$this->get['id'], User::$id, $val))
User::decrementDailyVotes(); // do not refund retracted votes!
if (!$ok)
{
$result = ['error' => 1, 'message' => Lang::$main['genericError']];
break;
}
if ($val > 0) // gain rep
Util::gainSiteReputation($target['owner'], SITEREP_ACTION_UPVOTED, ['id' => $this->get['id'], 'voterId' => User::$id]);
else if ($val < 0)
Util::gainSiteReputation($target['owner'], SITEREP_ACTION_DOWNVOTED, ['id' => $this->get['id'], 'voterId' => User::$id]);
$result = ['error' => 0];
break;
case 'sticky': // toggle flag
if (empty($this->post['id']) || !User::isInGroup(U_GROUP_MODERATOR))
break;
if (!empty($this->post['sticky']))
DB::Aowow()->query('UPDATE ?_comments SET flags = flags | 0x1 WHERE id = ?d', $this->post['id']);
else
DB::Aowow()->query('UPDATE ?_comments SET flags = flags & ~0x1 WHERE id = ?d', $this->post['id']);
break;
case 'out-of-date': // toggle flag
if (empty($this->post['id']))
{
$result = 'The comment does not exist.';
break;
}
$ok = false;
if (User::isInGroup(U_GROUP_MODERATOR)) // directly mark as outdated
{
if (empty($this->post['remove']))
$ok = DB::Aowow()->query('UPDATE ?_comments SET flags = flags | 0x4 WHERE id = ?d', $this->post['id']);
else
$ok = DB::Aowow()->query('UPDATE ?_comments SET flags = flags & ~0x4 WHERE id = ?d', $this->post['id']);
}
else if (User::$id && empty($this->post['reason']) || mb_strlen($this->post['reason']) < 15)
{
$result = 'Your message is too short.';
break;
}
else if (User::$id) // only report as outdated
{
$ok = DB::Aowow()->query(
'INSERT INTO ?_reports (userId, mode, reason, subject, ip, description, userAgent, appName) VALUES (?d, 1, 17, ?d, ?, "<automated comment report>", ?, ?)',
User::$id,
$this->post['id'],
$_SERVER['REMOTE_ADDR'],
$_SERVER['HTTP_USER_AGENT'],
get_browser(null, true)['browser']
);
}
if ($ok) // this one is very special; as in: completely retarded
return 'ok'; // the script expects the actual characters 'ok' not some string like "ok"
$result = Lang::$main['genericError'];
break;
case 'show-replies':
$result = empty($this->get['id']) ? [] : CommunityContent::getCommentReplies($this->get['id']);
break;
case 'add-reply': // also returns all replies on success
if (!User::canComment())
$result = 'You are not allowed to reply.';
else if (empty($this->post['body']) || mb_strlen($this->post['body']) < $_minRpl || mb_strlen($this->post['body']) > $_maxRpl)
$result = 'Your reply has '.mb_strlen(@$this->post['body']).' characters and must have at least '.$_minRpl.' and at most '.$_maxRpl.'.';
else if (empty($this->post['commentId']) || !DB::Aowow()->selectCell('SELECT 1 FROM ?_comments WHERE id = ?d', $this->post['commentId']))
$result = Lang::$main['genericError'];
else if (DB::Aowow()->query('INSERT INTO ?_comments (`userId`, `roles`, `body`, `date`, `replyTo`) VALUES (?d, ?d, ?, UNIX_TIMESTAMP(), ?d)', User::$id, User::$groups, $this->post['body'], $this->post['commentId']))
$result = CommunityContent::getCommentReplies($this->post['commentId']);
else
$result = Lang::$main['genericError'];
break;
case 'edit-reply': // also returns all replies on success
if (!User::canComment())
$result = 'You are not allowed to reply.';
else if (empty($this->post['replyId']) || empty($this->post['commentId']))
$result = Lang::$main['genericError'];
else if (empty($this->post['body']) || mb_strlen($this->post['body']) < $_minRpl || mb_strlen($this->post['body']) > $_maxRpl)
$result = 'Your reply has '.mb_strlen(@$this->post['body']).' characters and must have at least '.$_minRpl.' and at most '.$_maxRpl.'.';
if ($result)
break;
$ok = DB::Aowow()->query(
'UPDATE ?_comments SET body = ?, editUserId = ?d, editDate = UNIX_TIMESTAMP(), editCount = editCount + 1 WHERE id = ?d AND replyTo = ?d{ AND userId = ?d}',
$this->post['body'],
User::$id,
$this->post['replyId'],
$this->post['commentId'],
User::isInGroup(U_GROUP_MODERATOR) ? DBSIMPLE_SKIP : User::$id
);
$result = $ok ? CommunityContent::getCommentReplies($this->post['commentId']) : Lang::$main['genericError'];
break;
case 'detach-reply':
if (!User::isInGroup(U_GROUP_MODERATOR) || empty($this->post['id']))
break;
DB::Aowow()->query('UPDATE ?_comments c1, ?_comments c2 SET c1.replyTo = 0, c1.type = c2.type, c1.typeId = c2.typeId WHERE c1.replyTo = c2.id AND c1.id = ?d', $this->post['id']);
break;
case 'delete-reply':
if (!User::$id || empty($this->post['id']))
break;
if (DB::Aowow()->query('DELETE FROM ?_comments WHERE id = ?d{ AND userId = ?d}', $this->post['id'], User::isInGroup(U_GROUP_MODERATOR) ? DBSIMPLE_SKIP : User::$id))
DB::Aowow()->query('DELETE FROM ?_comments_rates WHERE commentId = ?d', $this->post['id']);
break;
case 'flag-reply':
if (!User::$id || empty($this->post['id']))
break;
DB::Aowow()->query(
'INSERT INTO ?_reports (userId, mode, reason, subject, ip, description, userAgent, appName) VALUES (?d, 1, 19, ?d, ?, "<automated commentreply report>", ?, ?)',
User::$id,
$this->post['id'],
$_SERVER['REMOTE_ADDR'],
$_SERVER['HTTP_USER_AGENT'],
get_browser(null, true)['browser']
);
break;
case 'upvote-reply':
if (empty($this->post['id']) || !User::canUpvote())
break;
$ok = DB::Aowow()->query(
'INSERT INTO ?_comments_rates (commentId, userId, value) VALUES (?d, ?d, ?d)',
$this->post['id'],
User::$id,
User::canSupervote() ? 2 : 1
);
if ($ok)
User::decrementDailyVotes();
break;
case 'downvote-reply':
if (empty($this->post['id']) || !User::canUpvote())
break;
$ok = DB::Aowow()->query(
'INSERT INTO ?_comments_rates (commentId, userId, value) VALUES (?d, ?d, ?d)',
$this->post['id'],
User::$id,
User::canSupervote() ? -2 : -1
);
if ($ok)
User::decrementDailyVotes();
}
return json_encode($result, JSON_NUMERIC_CHECK);
}
private function handleLocale() // not sure if this should be here..

View file

@ -8,99 +8,270 @@ if (!defined('AOWOW_REVISION'))
* get Community Content
************/
/* latest comments
// $comments = array();
// $rows = $DB->select('
// SELECT `id`, `type`, `typeID`, LEFT(`commentbody`, 120) as `preview`, `userID` as `user`, `post_date` as `date`, (NOW()-`post_date`) as `elapsed`
// FROM ?_comments
// WHERE 1
// ORDER BY post_date DESC
// LIMIT 300
// ');
// foreach($rows as $i => $row)
// {
// $comments[$i] = array();
// $comments[$i] = $row;
// switch($row['type'])
// {
// case 1: // NPC
// $comments[$i]['subject'] = $DB->selectCell('SELECT name FROM creature_template WHERE entry=?d LIMIT 1', $row['typeID']);
// break;
// case 2: // GO
// $comments[$i]['subject'] = $DB->selectCell('SELECT name FROM gameobject_template WHERE entry=?d LIMIT 1', $row['typeID']);
// break;
// case 3: // Item
// $comments[$i]['subject'] = $DB->selectCell('SELECT name FROM item_template WHERE entry=?d LIMIT 1', $row['typeID']);
// break;
// case 4: // Item Set
// $comments[$i]['subject'] = $DB->selectCell('SELECT name_loc'.$_SESSION['locale'].' FROM ?_itemset WHERE Id=?d LIMIT 1', $row['typeID']);
// break;
// case 5: // Quest
// $comments[$i]['subject'] = $DB->selectCell('SELECT Title FROM quest_template WHERE entry=?d LIMIT 1', $row['typeID']);
// break;
// case 6: // Spell
// $comments[$i]['subject'] = $DB->selectCell('SELECT spellname_loc'.$_SESSION['locale'].' FROM ?_spell WHERE spellID=?d LIMIT 1', $row['typeID']);
// break;
// case 7: // Zone
// // TODO
// break;
// case 8: // Faction
// $comments[$i]['subject'] = $DB->selectCell('SELECT name_loc'.$_SESSION['locale'].' FROM ?_factions WHERE factionID=?d LIMIT 1', $row['typeID']);
// break;
// default:
// $comments[$i]['subject'] = 'Unknown';
// break;;
// }
// $comments[$i]['user'] = $rDB->selectCell('SELECT CONCAT(UCASE(SUBSTRING(username, 1,1)),LOWER(SUBSTRING(username, 2))) FROM aowow_account WHERE id=?d LIMIT 1', $row['user']);
// if(empty($comments[$i]['user']))
// $comments[$i]['user'] = 'Anonymous';
// $comments[$i]['rating'] = array_sum($DB->selectCol('SELECT rate FROM ?_comments_rates WHERE commentid=?d', $row['id']));
// $comments[$i]['purged'] = ($comments[$i]['rating'] <= -50)? 1: 0;
// $comments[$i]['deleted'] = 0;
// }
// $smarty->assign('comments', $comments);
*/
/* yet another todo (aug. 2010)
extend g_users with authors
_['ArgentSun']={border:1,roles:140,joined:'2007/11/17 17:21:48',posts:5575,title:'The Ambitious',avatar:2,avatarmore:'395', sig:'[i] "Schrödinger\'s cat walks into a bar...\n... and it doesn\'t!"[/i]'};
_['Fearow']= { roles:0, joined:'2009/12/25 08:36:58',posts:3, avatar:1,avatarmore:'inv_misc_herb_17',sig:'But if your life is such a big joke, then why should I care?'};
*/
/*
{id:115,user:'Ciderhelm',date:'2010/05/10 19:14:18',caption:'TankSpot\'s Guide to the Fury Warrior (Part 1)',videoType:1,videoId:'VUvxFvVmttg',type:13,typeId:1},
{id:116,user:'Ciderhelm',date:'2010/05/10 19:14:18',caption:'TankSpot\'s Guide to the Fury Warrior (Part 2)',videoType:1,videoId:'VEfnuIcq7n8',type:13,typeId:1},
{id:117,user:'Ciderhelm',date:'2010/05/10 19:14:18',caption:'TankSpot\'s Protection Warrior Guide',videoType:1,videoId:'vF-7kmvJZXY',type:13,typeId:1,sticky:1}
*/
/* todo: administration of content */
class CommunityContent
{
/* todo: administration of content */
private static $jsGlobals = [];
private static $commentQuery = '
SELECT
c.*,
a1.displayName AS user,
a2.displayName AS editUser,
a3.displayName AS deleteUser,
a4.displayName AS responseUser,
IFNULL(SUM(cr.value), 0) AS rating,
SUM(IF (cr.userId = ?d, value, 0)) AS userRating,
SUM(IF (r.userId = ?d, 1, 0)) AS userReported
FROM
?_comments c
JOIN
?_account a1 ON c.userId = a1.id
LEFT JOIN
?_account a2 ON c.editUserId = a2.id
LEFT JOIN
?_account a3 ON c.deleteUserId = a3.id
LEFT JOIN
?_account a4 ON c.responseUserId = a4.id
LEFT JOIN
?_comments_rates cr ON c.id = cr.commentId
LEFT JOIN
?_reports r ON r.subject = c.id AND r.mode = 1 AND r.reason = 19
WHERE
c.replyTo = ?d AND c.type = ?d AND c.typeId = ?d AND
((c.flags & 0x2) = 0 OR c.userId = ?d OR ?d)
GROUP BY
c.id
ORDER BY
rating ASC
';
private static $previewQuery = '
SELECT
c.id,
c.body AS preview,
c.date,
c.replyTo AS commentid,
UNIX_TIMESTAMP() - c.date AS elapsed,
IF(c.flags & 0x2, 1, 0) AS deleted,
IF(c.type <> 0, c.type, c2.type) AS type,
IF(c.typeId <> 0, c.typeId, c2.typeId) AS typeId,
IFNULL(SUM(cr.value), 0) AS rating,
a.displayName AS user
FROM
?_comments c
JOIN
?_account a ON c.userId = a.id
LEFT JOIN
?_comments_rates cr ON cr.commentId = c.id
LEFT JOIN
?_comments c2 ON c.replyTo = c2.id
WHERE
{c.userId = ?d AND}
{c.replyTo <> ?d AND}
{c.replyTo = ?d AND}
((c.flags & 0x2) = 0 OR c.userId = ?d OR ?d)
GROUP BY
c.id
ORDER BY
date DESC
LIMIT
?d
';
public static function getCommentPreviews($params = [])
{
/*
purged:0, <- doesnt seem to be used anymore
domain:'live' <- irrelevant for our case
*/
$subjCache = [];
$comments = DB::Aowow()->select(
self::$previewQuery,
empty($params['user']) ? DBSIMPLE_SKIP : $params['user'],
empty($params['replies']) ? DBSIMPLE_SKIP : 0, // i dont know, how to switch the sign around
!empty($params['replies']) ? DBSIMPLE_SKIP : 0,
User::$id,
User::isInGroup(U_GROUP_COMMENTS_MODERATOR),
CFG_SQL_LIMIT_DEFAULT
);
foreach ($comments as $c)
$subjCache[$c['type']][$c['typeId']] = $c['typeId'];
foreach ($subjCache as $type => $ids)
{
$cnd = [CFG_SQL_LIMIT_NONE, ['id', array_unique($ids, SORT_NUMERIC)]];
switch ($type)
{
case TYPE_NPC: $obj = new CreatureList($cnd); break;
case TYPE_OBJECT: $obj = new GameobjectList($cnd); break;
case TYPE_ITEM: $obj = new ItemList($cnd); break;
case TYPE_ITEMSET: $obj = new ItemsetList($cnd); break;
case TYPE_QUEST: $obj = new QuestList($cnd); break;
case TYPE_SPELL: $obj = new SpellList($cnd); break;
case TYPE_ZONE: $obj = new ZoneList($cnd); break;
case TYPE_FACTION: $obj = new FactionList($cnd); break;
case TYPE_PET: $obj = new PetList($cnd); break;
case TYPE_ACHIEVEMENT: $obj = new AchievementList($cnd); break;
case TYPE_TITLE: $obj = new TitleList($cnd); break;
case TYPE_WORLDEVENT: $obj = new WorldEventList($cnd); break;
case TYPE_CLASS: $obj = new CharClassList($cnd); break;
case TYPE_RACE: $obj = new CharRaceList($cnd); break;
case TYPE_SKILL: $obj = new SkillList($cnd); break;
case TYPE_CURRENCY: $obj = new CurrencyList($cnd); break;
default: continue;
}
foreach ($obj->iterate() as $id => $__)
$subjCache[$type][$id] = $obj->getField('name', true);
}
foreach ($comments as $idx => &$c)
{
if ($subj = @$subjCache[$c['type']][$c['typeId']])
{
// apply subject
$c['subject'] = $subj;
// format date
$c['date'] = date(Util::$dateFormatInternal, $c['date']);
// remove commentid if not looking for replies
if (empty($params['replies']))
unset($c['commentid']);
// remove line breaks
$c['preview'] = strtr($c['preview'], ["\n" => ' ', "\r" => ' ']);
// limit whitespaces to one at a time
$c['preview'] = preg_replace('/\s+/',' ', $c['preview']);
// limit previews to 100 chars + whatever it takes to make the last word full
if (strlen($c['preview']) > 100)
{
$n = 0;
$b = [];
$parts = explode(' ', $c['preview']);
while ($n < 100 && $parts)
{
$_ = array_shift($parts);
$n += strlen($_);
$b[] = $_;
}
$c['preview'] = implode(' ', $b).'…';
}
}
else
{
Util::addNote(U_GROUP_STAFF, 'CommunityClass::getCommentPreviews - comment '.$c['id'].' belongs to nonexistant subject');
unset($comments[$idx]);
}
}
return $comments;
}
public static function getCommentReplies($commentId, $limit = 0, &$nFound = null)
{
$replies = [];
$query = $limit > 0 ? self::$commentQuery.' LIMIT '.$limit : self::$commentQuery;
// get replies
$results = DB::Aowow()->SelectPage($nFound, $query, User::$id, User::$id, $commentId, 0, 0, User::$id, User::isInGroup(U_GROUP_COMMENTS_MODERATOR));
foreach ($results as $r)
{
(new Markup($r['body']))->parseGlobalsFromText(self::$jsGlobals);
$reply = array(
'commentid' => $commentId,
'id' => $r['id'],
'body' => $r['body'],
'username' => $r['user'],
'roles' => $r['roles'],
'creationdate' => date(Util::$dateFormatInternal, $r['date']),
'lasteditdate' => date(Util::$dateFormatInternal, $r['editDate']),
'rating' => (string)$r['rating']
);
if ($r['userReported'])
$reply['reportedByUser'] = true;
if ($r['userRating'] > 0)
$reply['votedByUser'] = true;
else if ($r['userRating'] < 0)
$reply['downvotedByUser'] = true;
$replies[] = $reply;
}
return $replies;
}
private static function getComments($type, $typeId)
{
/*
number:{$co.number},
user:'{$co.user}',
body:'{$co.body|escape:"javascript"}',
date:'{$co.date|date_format:"%Y/%m/%d %H:%M:%S"}',
{if $co.roles!=0}
roles:{$co.roles},
{/if}
{if $co.indent!=0}
indent:{$co.indent},
{/if}
rating:{$co.rating},
replyTo:{$co.replyto},
purged:{$co.purged},
deleted:0,
raters:[{foreach name=foo2 key=id from=$co.raters item=rater}[{$rater.userid},{$rater.rate}]{if $smarty.foreach.foo2.last}{else},{/if}{/foreach}],
id:{$co.id}
,sticky:{$co.sticky}
,userRating:{$co.userRating}
*/
// comments
return [];
$results = DB::Aowow()->query(self::$commentQuery, User::$id, User::$id, 0, $type, $typeId, User::$id, (int)User::isInGroup(U_GROUP_COMMENTS_MODERATOR));
$comments = [];
// additional informations
$i = 0;
foreach ($results as $r)
{
(new Markup($r['body']))->parseGlobalsFromText(self::$jsGlobals);
self::$jsGlobals[TYPE_USER][$r['userId']] = $r['userId'];
$c = array(
'commentv2' => 1, // always 1.. enables some features i guess..?
'number' => $i++, // some iterator .. unsued?
'id' => $r['id'],
'date' => date(Util::$dateFormatInternal, $r['date']),
'roles' => $r['roles'],
'body' => $r['body'],
'rating' => $r['rating'],
'userRating' => $r['userRating'],
'user' => $r['user'],
);
$c['replies'] = self::getCommentReplies($r['id'], 5, $c['nreplies']);
if ($r['responseBody']) // adminResponse
{
$c['response'] = $r['responseBody'];
$c['responseroles'] = $r['responseRoles'];
$c['responseuser'] = $r['responseUser'];
(new Markup($r['responseBody']))->parseGlobalsFromText(self::$jsGlobals);
}
if ($r['editCount']) // lastEdit
$c['lastEdit'] = [date(Util::$dateFormatInternal, $r['editDate']), $r['editCount'], $r['editUser']];
if ($r['flags'] & 0x1)
$c['sticky'] = true;
if ($r['flags'] & 0x2)
{
$c['deleted'] = true;
$c['deletedInfo'] = [date(Util::$dateFormatInternal, $r['deleteDate']), $r['deleteUser']];
}
if ($r['flags'] & 0x4)
$c['outofdate'] = true;
$comments[] = $c;
}
return $comments;
}
private static function getVideos($type, $typeId)
@ -145,13 +316,17 @@ class CommunityContent
return $screenshots;
}
public static function getAll($type, $typeId)
public static function getAll($type, $typeId, &$jsg)
{
return array(
$result = array(
'vi' => self::getVideos($type, $typeId),
'sc' => self::getScreenshots($type, $typeId),
'co' => self::getComments($type, $typeId)
);
Util::mergeJsGlobals($jsg, self::$jsGlobals);
return $result;
}
}
?>

View file

@ -24,6 +24,7 @@ define('TYPE_CLASS', 13);
define('TYPE_RACE', 14);
define('TYPE_SKILL', 15);
define('TYPE_CURRENCY', 17);
define('TYPE_USER', 100); // internal use only
define('CACHETYPE_NONE', 0); // page will not be cached
define('CACHETYPE_PAGE', 1);
@ -52,9 +53,32 @@ define('ACC_STATUS_RECOVER_PASS', 3); // currently recover
define('ACC_BAN_NONE', 0x00); // all clear
define('ACC_BAN_TEMP', 0x01);
define('ACC_BAN_PERM', 0x02);
define('ACC_BAN_RATE', 0x04); // cannot rate community items
define('ACC_BAN_COMMENT', 0x08); // cannot create comments
define('ACC_BAN_UPLOAD', 0x10); // cannot upload screenshots / suggest videos
define('ACC_BAN_RATE', 0x04); // cannot rate community items (overrides site reputation)
define('ACC_BAN_COMMENT', 0x08); // cannot comment and reply
define('ACC_BAN_UPLOAD', 0x10); // cannot upload avatar / signature files
define('ACC_BAN_SCREENSHOT', 0x20); // cannot upload screenshots
define('ACC_BAN_VIDEO', 0x40); // cannot suggest videos
// define('ACC_BAN_FORUM', 0x80); // cannot use forums (not used here)
// Site Reputation/Priviledges
define('SITEREP_ACTION_REGISTER', 1); // Registered account
define('SITEREP_ACTION_DAILYVISIT', 2); // Daily visit
define('SITEREP_ACTION_COMMENT', 3); // Posted comment
define('SITEREP_ACTION_UPVOTED', 4); // Your comment was upvoted
define('SITEREP_ACTION_DOWNVOTED', 5); // Your comment was downvoted
define('SITEREP_ACTION_UPLOAD', 6); // Submitted screenshot (suggested video)
// Cast vote
// Uploaded data
define('SITEREP_ACTION_GOOD_REPORT', 9); // Report accepted
define('SITEREP_ACTION_BAD_REPORT', 10); // Report declined
// Copper Achievement
// Silver Achievement
// Gold Achievement
// Test 1
// Test 2
define('SITEREP_ACTION_ARTICLE', 16); // Guide approved (article approved)
define('SITEREP_ACTION_USER_WARNED', 17); // Moderator Warning
define('SITEREP_ACTION_USER_SUSPENDED', 18); // Moderator Suspension
// Auth Result
define('AUTH_OK', 0);
@ -93,7 +117,7 @@ define('U_GROUP_SALESAGENT', 0x0400);
define('U_GROUP_SCREENSHOT', 0x0800);
define('U_GROUP_VIDEO', 0x1000);
// define('U_GROUP_APIONLY, 0x2000); // the heck..?
// define('U_GROUP_PENDING, 0x4000);
// define('U_GROUP_PENDING, 0x4000); // would restrict some markup like urls
define('U_GROUP_STAFF', (U_GROUP_ADMIN|U_GROUP_EDITOR|U_GROUP_MOD|U_GROUP_BUREAU|U_GROUP_DEV|U_GROUP_BLOGGER|U_GROUP_LOCALIZER|U_GROUP_SALESAGENT));
define('U_GROUP_EMPLOYEE', (U_GROUP_ADMIN|U_GROUP_BUREAU|U_GROUP_DEV));
@ -539,10 +563,10 @@ define('ITEM_MOD_STRENGTH', 4);
define('ITEM_MOD_INTELLECT', 5);
define('ITEM_MOD_SPIRIT', 6);
define('ITEM_MOD_STAMINA', 7);
define('ITEM_MOD_ENERGY' , 8); // powers v
define('ITEM_MOD_RAGE' , 9);
define('ITEM_MOD_FOCUS' , 10);
define('ITEM_MOD_RUNIC_POWER' , 11);
define('ITEM_MOD_ENERGY', 8); // powers v
define('ITEM_MOD_RAGE', 9);
define('ITEM_MOD_FOCUS', 10);
define('ITEM_MOD_RUNIC_POWER', 11);
define('ITEM_MOD_DEFENSE_SKILL_RATING', 12); // ratings v
define('ITEM_MOD_DODGE_RATING', 13);
define('ITEM_MOD_PARRY_RATING', 14);

View file

@ -12,6 +12,7 @@ require 'includes/libs/DbSimple/Generic.php'; // Libraray: http://
require 'includes/utilities.php'; // misc™ data 'n func
require 'includes/ajaxHandler.class.php'; // handles ajax and jsonp requests
require 'includes/user.class.php';
require 'includes/markup.class.php'; // manipulate markup text
require 'includes/database.class.php'; // wrap DBSimple
require 'includes/community.class.php'; // handle comments, screenshots and videos
require 'includes/loot.class.php'; // build lv-tabs containing loot-information

50
includes/markup.class.php Normal file
View file

@ -0,0 +1,50 @@
<?php
if (!defined('AOWOW_REVISION'))
die('invalid access');
/*
this is just a skeleton for now
at some point i'll need to (at least rudamentary) parse
back and forth between markup and html
*/
class Markup
{
private $text = '';
private $jsGlobals = [];
public function __construct($text)
{
$this->text = $text;
}
public function parseGlobalsFromText(&$jsg = [])
{
if (preg_match_all('/(?<!\\\\)\[(npc|object|item|itemset|quest|spell|zone|faction|pet|achievement|statistic|title|event|class|race|skill|currency)=(\d+)[^\]]*\]/i', $this->text, $matches, PREG_SET_ORDER))
{
foreach ($matches as $match)
{
if ($match[1] == 'statistic')
$match[1] = 'achievement';
if ($type = array_search($match[1], Util::$typeStrings))
$this->jsGlobals[$type][$match[2]] = $match[2];
}
}
Util::mergeJsGlobals($jsg, $this->jsGlobals);
return $this->jsGlobals;
}
public function fromHtml()
{
}
public function toHtml()
{
}
}
?>

View file

@ -371,7 +371,6 @@ class ItemList extends BaseType
foreach ($this->iterate() as $id => $__)
{
if ($addMask & GLOBALINFO_SELF)
{
$data[TYPE_ITEM][$id] = array(
@ -1130,6 +1129,8 @@ class ItemList extends BaseType
foreach ($json as $k => $v)
if (!$v && !in_array($k, ['classs', 'subclass', 'quality', 'side']))
unset($this->json[$item][$k]);
Util::checkNumeric($this->json);
}
public function getOnUseStats()
@ -1375,7 +1376,7 @@ class ItemList extends BaseType
'level' => $this->curTpl['itemLevel'],
'reqlevel' => $this->curTpl['requiredLevel'],
'displayid' => $this->curTpl['displayId'],
// 'commondrop' => 'true' / null // set if the item is a loot-filler-item .. check common ref-templates..?
// 'commondrop' => 'true' / null // set if the item is a loot-filler-item .. check common ref-templates..?
'holres' => $this->curTpl['resHoly'],
'firres' => $this->curTpl['resFire'],
'natres' => $this->curTpl['resNature'],
@ -1431,6 +1432,8 @@ class ItemList extends BaseType
if (!$v && !in_array($k, ['classs', 'subclass', 'quality', 'side']))
unset($json[$k]);
Util::checkNumeric($json);
$this->json[$json['id']] = $json;
}

View file

@ -81,6 +81,10 @@ class ItemsetList extends BaseType
if ($this->pieceToSet && ($addMask & GLOBALINFO_SELF))
$data[TYPE_ITEM] = array_combine(array_keys($this->pieceToSet), array_keys($this->pieceToSet));
if ($addMask & GLOBALINFO_SELF)
foreach ($this->iterate() as $id => $__)
$data[TYPE_ITEMSET][$id] = ['name' => $this->getField('name', true)];
return $data;
}

View file

@ -35,6 +35,11 @@ class TitleList extends BaseType
$this->sources[$id][$src[0]][] = $src[1];
}
}
// shorthand for more generic access
foreach (Util::$localeStrings as $i => $str)
if ($str)
$_curTpl['name_loc'.$i] = trim(str_replace('%s', '', $_curTpl['male_loc'.$i]));
}
}

View file

@ -0,0 +1,60 @@
<?php
if (!defined('AOWOW_REVISION'))
die('illegal access');
class UserList extends BaseType
{
public static $type = TYPE_USER;
public static $brickFile = 'user';
public $sources = [];
protected $queryBase = 'SELECT *, a.id AS ARRAY_KEY FROM ?_account a';
protected $queryOpts = array(
'a' => [['r']],
'r' => ['j' => ['?_account_reputation r ON r.userId = a.id', true], 's' => ', IFNULL(SUM(r.amount), 0) AS reputation', 'g' => 'a.id']
);
public function getListviewData() { }
public function getJSGlobals($addMask = 0)
{
$data = [];
foreach ($this->iterate() as $__)
{
$data[$this->curTpl['displayName']] = array(
'border' => 0, // border around avatar (rarityColors)
'roles' => $this->curTpl['userGroups'],
'joined' => date(Util::$dateFormatInternal, $this->curTpl['joinDate']),
'posts' => 0, // forum posts
// 'gold' => 0, // achievement system
// 'silver' => 0, // achievement system
// 'copper' => 0, // achievement system
'reputation' => $this->curTpl['reputation']
);
// custom titles (only ssen on user page..?)
if ($_ = $this->curTpl['title'])
$data[$this->curTpl['displayName']]['title'] = $_;
if ($_ = $this->curTpl['avatar'])
{
$data[$this->curTpl['displayName']]['avatar'] = is_numeric($_) ? 2 : 1;
$data[$this->curTpl['displayName']]['avatarmore'] = $_;
}
// more optional data
// sig: markdown formated string (only used in forum?)
// border: seen as null|1|3 .. changes the border around the avatar (i suspect its meaning changed and got decupled from premium-status with the introduction of patron-status)
}
return [TYPE_USER => $data];
}
public function renderTooltip() { }
}
?>

View file

@ -8,12 +8,15 @@ class User
{
public static $id = 0;
public static $displayName = '';
public static $banStatus = 0x0; // &1: banedIP; &2: banUser; &4: ratingBan; &8: commentBan; &16: disableUpload
public static $banStatus = 0x0; // see ACC_BAN_* defines
public static $groups = 0x0;
public static $perms = 0;
public static $localeId = 0;
public static $localeString = 'enus';
public static $avatar = 'inv_misc_questionmark';
public static $dailyVotes = 0;
private static $reputation = 0;
private static $dataKey = '';
private static $expires = false;
private static $passHash = '';
@ -46,9 +49,10 @@ class User
return false;
$query = DB::Aowow()->SelectRow('
SELECT a.id, a.passHash, a.displayName, a.locale, a.userGroups, a.userPerms, a.allowExpire, BIT_OR(ab.typeMask) AS bans
SELECT a.id, a.passHash, a.displayName, a.locale, a.userGroups, a.userPerms, a.allowExpire, BIT_OR(ab.typeMask) AS bans, IFNULL(SUM(r.amount), 0) as reputation, a.avatar, a.dailyVotes
FROM ?_account a
LEFT JOIN ?_account_banned ab ON a.id = ab.userId AND ab.end > UNIX_TIMESTAMP()
LEFT JOIN ?_account_reputation r ON a.id = r.userId
WHERE a.id = ?d
GROUP BY a.id',
$_SESSION['user']
@ -68,15 +72,59 @@ class User
self::$displayName = $query['displayName'];
self::$passHash = $query['passHash'];
self::$expires = (bool)$query['allowExpire'];
self::$reputation = $query['reputation'];
self::$banStatus = $query['bans'];
self::$groups = $query['bans'] & (ACC_BAN_TEMP | ACC_BAN_PERM) ? 0 : intval($query['userGroups']);
self::$perms = $query['bans'] & (ACC_BAN_TEMP | ACC_BAN_PERM) ? 0 : intval($query['userPerms']);
self::$dailyVotes = $query['dailyVotes'];
if ($query['avatar'])
self::$avatar = $query['avatar'];
self::setLocale(intVal($query['locale'])); // reset, if changed
// stuff, that update on daily basis goes here (if you keep you session alive indefinitly, the signin-handler doesn't do very much)
// - conscutive visits
// - votes per day
// - reputation for daily visit
if (self::$id)
{
$lastLogin = DB::Aowow()->selectCell('SELECT curLogin FROM ?_account WHERE id = ?d', self::$id);
// either the day changed or the last visit was >24h ago
if (date('j', $lastLogin) != date('j') || (time() - $lastLogin) > 1 * DAY)
{
// daily votes (we need to reset this one)
self::$dailyVotes = self::getMaxDailyVotes();
DB::Aowow()->query('
UPDATE ?_account
SET dailyVotes = ?d, prevLogin = curLogin, curLogin = UNIX_TIMESTAMP(), prevIP = curIP, curIP = ?
WHERE id = ?d',
self::$dailyVotes,
$_SERVER['REMOTE_ADDR'],
self::$id
);
// gain rep for daily visit
if (!(self::$banStatus & (ACC_BAN_TEMP | ACC_BAN_PERM)))
Util::gainSiteReputation(self::$id, SITEREP_ACTION_DAILYVISIT);
// increment consecutive visits (next day or first of new month and not more than 48h)
// i bet my ass i forgott a corner case
if ((date('j', $lastLogin) + 1 == date('j') || (date('j') == 1 && date('n', $lastLogin) != date('n'))) && (time() - $lastLogin) < 2 * DAY)
DB::Aowow()->query('UPDATE ?_account SET consecutiveVisits = consecutiveVisits + 1 WHERE id = ?d', self::$id);
else
DB::Aowow()->query('UPDATE ?_account SET consecutiveVisits = 0 WHERE id = ?d', self::$id);
}
}
return true;
}
/****************/
/* set language */
/****************/
// set and save
public static function setLocale($set = -1)
{
@ -116,11 +164,6 @@ class User
self::$localeString = self::localeString(self::$localeId);
}
public static function isInGroup($group)
{
return (self::$groups & $group) != 0;
}
private static function localeString($loc = -1)
{
if (!isset(Util::$localeStrings[$loc]))
@ -129,6 +172,10 @@ class User
return Util::$localeStrings[$loc];
}
/*******************/
/* auth mechanisms */
/*******************/
public static function Auth($name, $pass)
{
$user = 0;
@ -279,11 +326,106 @@ class User
return self::$passHash == self::hashSHA1($pass);
}
public static function save()
{
$_SESSION['user'] = self::$id;
$_SESSION['hash'] = self::$passHash;
$_SESSION['locale'] = self::$localeId;
$_SESSION['timeout'] = self::$expires ? time() + CFG_SESSION_TIMEOUT_DELAY : 0;
// $_SESSION['dataKey'] does not depend on user login status and is set in User::init()
}
public static function destroy()
{
session_regenerate_id(true); // session itself is not destroyed; status changed => regenerate id
session_unset();
$_SESSION['locale'] = self::$localeId; // keep locale
$_SESSION['dataKey'] = self::$dataKey; // keep dataKey
self::$id = 0;
self::$displayName = '';
self::$perms = 0;
self::$groups = U_GROUP_NONE;
}
/*********************/
/* access management */
/*********************/
public static function isInGroup($group)
{
return (self::$groups & $group) != 0;
}
public static function canComment()
{
if (!self::$id || self::$banStatus & (ACC_BAN_COMMENT | ACC_BAN_PERM | ACC_BAN_TEMP))
return false;
return self::$perms || self::$reputation >= CFG_REP_REQ_COMMENT;
}
public static function canUpvote()
{
if (!self::$id || self::$banStatus & (ACC_BAN_COMMENT | ACC_BAN_PERM | ACC_BAN_TEMP))
return false;
return self::$perms || (self::$reputation >= CFG_REP_REQ_UPVOTE && self::$dailyVotes > 0);
}
public static function canDownvote()
{
if (!self::$id || self::$banStatus & (ACC_BAN_RATE | ACC_BAN_PERM | ACC_BAN_TEMP))
return false;
return self::$perms || (self::$reputation >= CFG_REP_REQ_DOWNVOTE && self::$dailyVotes > 0);
}
public static function canSupervote()
{
if (!self::$id || self::$banStatus & (ACC_BAN_RATE | ACC_BAN_PERM | ACC_BAN_TEMP))
return false;
return self::$reputation >= CFG_REP_REQ_SUPERVOTE;
}
public static function isPremium()
{
return self::isInGroup(U_GROUP_PREMIUM) || self::$reputation >= CFG_REP_REQ_PREMIUM;
}
/**************/
/* js-related */
/**************/
public static function decrementDailyVotes()
{
self::$dailyVotes--;
DB::Aowow()->query('UPDATE ?_account SET dailyVotes = ?d WHERE id = ?d', self::$dailyVotes, self::$id);
}
public static function getCurDailyVotes()
{
return self::$dailyVotes;
}
public static function getMaxDailyVotes()
{
if (!self::$id || self::$banStatus & (ACC_BAN_PERM | ACC_BAN_TEMP))
return 0;
return CFG_USER_MAX_VOTES + (self::$reputation >= CFG_REP_REQ_VOTEMORE_BASE ? 1 + intVal((self::$reputation - CFG_REP_REQ_VOTEMORE_BASE) / CFG_REP_REQ_VOTEMORE_ADD) : 0);
}
public static function getReputation()
{
return self::$reputation;
}
public static function getUserGlobals()
{
$gUser = array(
'commentban' => (bool)(self::$banStatus & ACC_BAN_COMMENT),
'ratingban' => (bool)(self::$banStatus & ACC_BAN_RATE),
'id' => self::$id,
'name' => self::$displayName,
'roles' => self::$groups,
@ -294,6 +436,14 @@ class User
if (!self::$id || self::$banStatus & (ACC_BAN_TEMP | ACC_BAN_PERM))
return $gUser;
$gUser['commentban'] = (bool)(self::$banStatus & ACC_BAN_COMMENT);
$gUser['canUpvote'] = self::canUpvote();
$gUser['canDownvote'] = self::canDownvote();
$gUser['canPostReplies'] = self::canComment();
$gUser['superCommentVotes'] = self::canSupervote();
$gUser['downvoteRep'] = CFG_REP_REQ_DOWNVOTE;
$gUser['upvoteRep'] = CFG_REP_REQ_UPVOTE;
if ($_ = self::getCharacters())
$gUser['characters'] = $_;
@ -338,7 +488,7 @@ class User
return $data;
}
public static function getCharacters($asJSON = true)
public static function getCharacters()
{
// todo: do after profiler
@include('datasets/ProfilerExampleChar');
@ -362,7 +512,7 @@ class User
return $characters;
}
public static function getProfiles($asJSON = true)
public static function getProfiles()
{
// todo => do after profiler
// chars build in profiler
@ -383,29 +533,6 @@ class User
return $data;
}
public static function save()
{
$_SESSION['user'] = self::$id;
$_SESSION['hash'] = self::$passHash;
$_SESSION['locale'] = self::$localeId;
$_SESSION['timeout'] = self::$expires ? time() + CFG_SESSION_TIMEOUT_DELAY : 0;
// $_SESSION['dataKey'] does not depend on user login status and is set in User::init()
}
public static function destroy()
{
session_regenerate_id(true); // session itself is not destroyed; status changed => regenerate id
session_unset();
$_SESSION['locale'] = self::$localeId; // keep locale
$_SESSION['dataKey'] = self::$dataKey; // keep dataKey
self::$id = 0;
self::$displayName = '';
self::$perms = 0;
self::$groups = U_GROUP_NONE;
}
}
?>

View file

@ -42,7 +42,8 @@ class Util
public static $typeStrings = array( // zero-indexed
null, 'npc', 'object', 'item', 'itemset', 'quest', 'spell', 'zone', 'faction',
'pet', 'achievement', 'title', 'event', 'class', 'race', 'skill', null, 'currency'
'pet', 'achievement', 'title', 'event', 'class', 'race', 'skill', null, 'currency',
TYPE_USER => 'user'
);
public static $combatRatingToItemMod = array( // zero-indexed idx:CR; val:Mod
@ -996,7 +997,7 @@ class Util
));
}
public static function localizedString($data, $field)
public static function localizedString($data, $field, $silent = false)
{
$sqlLocales = ['EN', 2 => 'FR', 3 => 'DE', 6 => 'ES', 8 => 'RU'];
@ -1010,17 +1011,17 @@ class Util
else if (!empty($data[$field.$sqlLocales[User::$localeId]]))
return $data[$field.$sqlLocales[User::$localeId]];
// locale not enUS; aowow-type localization available; add brackets
// locale not enUS; aowow-type localization available; add brackets if not silent
else if (User::$localeId != LOCALE_EN && isset($data[$field.'_loc0']) && !empty($data[$field.'_loc0']))
return '['.$data[$field.'_loc0'].']';
return $silent ? $data[$field.'_loc0'] : '['.$data[$field.'_loc0'].']';
// dbc-case
else if (User::$localeId != LOCALE_EN && isset($data[$field.$sqlLocales[0]]) && !empty($data[$field.$sqlLocales[0]]))
return '['.$data[$field.$sqlLocales[0]].']';
return $silent ? $data[$field.$sqlLocales[0]] : '['.$data[$field.$sqlLocales[0]].']';
// locale not enUS; TC localization; add brackets
// locale not enUS; TC localization; add brackets if not silent
else if (User::$localeId != LOCALE_EN && isset($data[$field]) && !empty($data[$field]))
return '['.$data[$field].']';
return $silent ? $data[$field] : '['.$data[$field].']';
// locale enUS; TC localization; return normal
else if (User::$localeId == LOCALE_EN && isset($data[$field]) && !empty($data[$field]))
@ -1378,6 +1379,122 @@ class Util
return $hash;
}
public static function mergeJsGlobals(&$master)
{
$args = func_get_args();
if (count($args) < 2) // insufficient args
return false;
if (!is_array($master))
$master = [];
for ($i = 1; $i < count($args); $i++) // skip first (master) entry
{
foreach ($args[$i] as $type => $data)
{
// bad data or empty
if (empty(Util::$typeStrings[$type]) || !is_array($data) || !$data)
continue;
if (!isset($master[$type]))
$master[$type] = [];
foreach ($data as $k => $d)
{
if (!isset($master[$type][$k])) // int: id, yet to look up
$master[$type][$k] = $d;
else if (is_array($d)) // array: already fetched data (overwrite old value if set)
$master[$type][$k] = $d;
// else // id overwrites data .. do not want
}
}
}
return true;
}
public static function gainSiteReputation($user, $action, $miscData = [])
{
if (!$user || !$action)
return false;
$x = [];
switch ($action)
{
case SITEREP_ACTION_REGISTER:
$x['amount'] = CFG_REP_REWARD_REGISTER;
break;
case SITEREP_ACTION_DAILYVISIT:
$x['sourceA'] = time();
$x['amount'] = CFG_REP_REWARD_DAILYVISIT;
break;
case SITEREP_ACTION_COMMENT:
if (empty($miscData['id']))
return false;
$x['sourceA'] = $miscData['id']; // commentId
$x['amount'] = CFG_REP_REWARD_COMMENT;
break;
case SITEREP_ACTION_UPVOTED:
case SITEREP_ACTION_DOWNVOTED:
if (empty($miscData['id']) || empty($miscData['voterId']))
return false;
DB::Aowow()->query( // delete old votes the user has cast
'DELETE FROM ?_account_reputation WHERE sourceA = ?d AND sourceB = ?d AND userId = ?d AND action IN (?a)',
$miscData['id'],
$miscData['voterId'],
$user,
[SITEREP_ACTION_UPVOTED, SITEREP_ACTION_DOWNVOTED]
);
$x['sourceA'] = $miscData['id']; // commentId
$x['sourceB'] = $miscData['voterId'];
$x['amount'] = $action == SITEREP_ACTION_UPVOTED ? CFG_REP_REWARD_UPVOTED : CFG_REP_REWARD_DOWNVOTED;
break;
case SITEREP_ACTION_UPLOAD: // NYI
if (empty($miscData['id']) || empty($miscData['what']))
return false;
$x['sourceA'] = $miscData['id']; // screenshotId or videoId
$x['sourceB'] = $miscData['what']; // screenshot or video
$x['amount'] = CFG_REP_REWARD_UPLOAD;
break;
case SITEREP_ACTION_GOOD_REPORT: // NYI
case SITEREP_ACTION_BAD_REPORT:
if (empty($miscData['id'])) // reportId
return false;
$x['sourceA'] = $miscData['id'];
$x['amount'] = $action == SITEREP_ACTION_GOOD_REPORT ? CFG_REP_REWARD_GOOD_REPORT : CFG_REP_REWARD_BAD_REPORT;
break;
case SITEREP_ACTION_ARTICLE: // NYI
if (empty($miscData['id'])) // reportId
return false;
$x['sourceA'] = $miscData['id'];
$x['amount'] = CFG_REP_REWARD_ARTICLE;
break;
case SITEREP_ACTION_USER_WARNED: // NYI
case SITEREP_ACTION_USER_SUSPENDED:
if (empty($miscData['id'])) // banId
return false;
$x['sourceA'] = $miscData['id'];
$x['amount'] = $action == SITEREP_ACTION_USER_WARNED ? CFG_REP_REWARD_USER_WARNED : CFG_REP_REWARD_USER_SUSPENDED;
break;
}
$x = array_merge($x, array(
'userId' => $user,
'action' => $action,
'date' => time()
));
return DB::Aowow()->query('INSERT IGNORE INTO ?_account_reputation (?#) VALUES (?a)', array_keys($x), array_values($x));
}
public static function createShowOnMap()
{
/*

View file

@ -25,7 +25,7 @@ switch ($pageCall)
{
/* called by user */
case '': // no parameter given -> MainPage
$altClass = 'main';
$altClass = 'home';
case 'account': // account management [nyi]
case 'achievement':
case 'achievements':
@ -114,6 +114,7 @@ switch ($pageCall)
case 'cookie': // lossless cookies and user settings
case 'contactus':
case 'comment':
case 'go-to-comment': // find page the comment is on and forward
case 'locale': // subdomain-workaround, change the language
if (($_ = (new AjaxHandler($pageParam))->handle($pageCall)) !== null)
{

View file

@ -10,18 +10,19 @@ if (!defined('AOWOW_REVISION'))
*/
$lang = array(
// page variables
'timeUnits' => array(
'sg' => ["Jahr", "Monat", "Woche", "Tag", "Stunde", "Minute", "Sekunde", "Millisekunde"],
'pl' => ["Jahre", "Monate", "Wochen", "Tage", "Stunden", "Minuten", "Sekunden", "Millisekunden"],
'ab' => ["J.", "M.", "W.", "Tag", "Std.", "Min.", "Sek.", "Ms."],
'ago' => 'vor %s'
),
'main' => array(
'name' => "Name",
'link' => "Link",
'signIn' => "Anmelden / Registrieren",
'jsError' => "Stelle bitte sicher, dass JavaScript aktiviert ist.",
'searchButton' => "Suche",
'language' => "Sprache",
'feedback' => "Rückmeldung",
'numSQL' => "Anzahl an MySQL-Queries",
@ -46,6 +47,8 @@ $lang = array(
'login' => "Login",
'forum' => "Forum",
'n_a' => "n. v.",
'siteRep' => "Ruf",
'aboutUs' => "Über Aowow",
// filter
'extSearch' => "Erweiterte Suche",
@ -115,11 +118,12 @@ $lang = array(
'help' => "Hilfe",
'helpTopics' => array(
"Wie man Kommentare schreibt", "Modellviewer", "Screenshots: Tipps & Tricks", "Gewichtung von Werten",
"Talentrechner", "Gegenstandsvergleich", "Profiler"
"Talentrechner", "Gegenstandsvergleich", "Profiler", "Markup Guide"
),
// search
'search' => "Suche",
'searchButton' => "Suche",
'foundResult' => "Suchergebnisse für",
'noResult' => "Keine Ergebnisse für",
'tryAgain' => "Bitte versucht es mit anderen Suchbegriffen oder überprüft deren Schreibweise.",
@ -128,7 +132,12 @@ $lang = array(
// formating
'colon' => ': ',
'dateFmtShort' => "d.m.Y",
'dateFmtLong' => "d.m.Y \u\m H:i"
'dateFmtLong' => "d.m.Y \u\m H:i",
// error
'genericError' => "Ein Fehler trat auf; aktualisiert die Seite und versucht es nochmal. Wenn der Fehler bestehen bleibt, bitte meldet es bei <a href='#contact'>feedback</a>", # LANG.genericerror
'bannedRating' => "Ihr wurdet davon gesperrt, Kommentare zu bewerten.", # LANG.tooltip_banned_rating
'tooManyVotes' => "Ihr habt die tägliche Grenze für erlaubte Bewertungen erreicht. Kommt morgen mal wieder!" # LANG.tooltip_too_many_votes
),
'game' => array(
'achievement' => "Erfolg",

View file

@ -9,14 +9,14 @@ $lang = array(
'timeUnits' => array(
'sg' => ["year", "month", "week", "day", "hour", "minute", "second", "millisecond"],
'pl' => ["years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"],
'ab' => ["yr", "mo", "wk", "day", "hr", "min", "sec", "ms"]
'ab' => ["yr", "mo", "wk", "day", "hr", "min", "sec", "ms"],
'ago' => '%s ago'
),
'main' => array(
'name' => "name",
'link' => "Link",
'signIn' => "Log in / Register",
'jsError' => "Please make sure you have javascript enabled.",
'searchButton' => "Search",
'language' => "Language",
'feedback' => "Feedback",
'numSQL' => "Number of MySQL queries",
@ -41,6 +41,8 @@ $lang = array(
'login' => "Login",
'forum' => "Forum",
'n_a' => "n/a",
'siteRep' => "Reputation",
'aboutUs' => "About us & contact",
// filter
'extSearch' => "Extended search",
@ -110,11 +112,12 @@ $lang = array(
'help' => "Help",
'helpTopics' => array(
"Commenting and You", "Model Viewer", "Screenshots: Tips & Tricks", "Stat Weighting",
"Talent Calculator", "Item Comparison", "Profiler"
"Talent Calculator", "Item Comparison", "Profiler", "Markup Guide"
),
// search
'search' => "Search",
'searchButton' => "Search",
'foundResult' => "Search Results for",
'noResult' => "No Results for",
'tryAgain' => "Please try some different keywords or check your spelling.",
@ -123,7 +126,12 @@ $lang = array(
// formating
'colon' => ': ',
'dateFmtShort' => "Y/m/d",
'dateFmtLong' => "Y/m/d \a\\t H:i"
'dateFmtLong' => "Y/m/d \a\\t H:i",
// error
'genericError' => "An error has occurred; refresh the page and try again. If the error persists email <a href=\"#contact\">feedback</a>", # LANG.genericerror
'bannedRating' => "You have been banned from rating comments.", # LANG.tooltip_banned_rating
'tooManyVotes' => "You have reached the daily voting cap. Come back tomorrow!" # LANG.tooltip_too_many_votes
),
'game' => array(
'achievement' => "achievement",

View file

@ -15,13 +15,13 @@ $lang = array(
'sg' => ["año", "mes", "semana", "día", "hora", "minuto", "segundo", "milisegundo"],
'pl' => ["años", "meses", "semanas", "dias", "horas", "minutos", "segundos", "milisegundos"],
'ab' => ["año", "mes", "sem", "", "h", "min", "seg", "ms"],
'ago' => 'hace %s'
),
'main' => array(
'name' => "nombre",
'link' => "Enlace",
'signIn' => "Iniciar sesión / Registrarse",
'jsError' => "Por favor, asegúrese de que ha habilitado javascript.",
'searchButton' => "búsqueda",
'language' => "lengua",
'feedback' => "Feedback",
'numSQL' => "Número de consultas de MySQL",
@ -46,6 +46,8 @@ $lang = array(
'login' => "[Login]",
'forum' => "Foro",
'n_a' => "n/d",
'siteRep' => "Reputación",
'aboutUs' => "Sobre Aowow",
// filter
'extSearch' => "Extender búsqueda",
@ -115,11 +117,12 @@ $lang = array(
'help' => "Ayuda",
'helpTopics' => array(
"Los comentarios y tú", "Visualizador de modelos", "Capturas de pantalla: Sugerencias y trucos", "Medición de atributos",
"Calculadora de talentos", "Comparación de objetos", "Perfiles"
"Calculadora de talentos", "Comparación de objetos", "Perfiles", "Markup Guide"
),
// search
'search' => "Búsqueda",
'searchButton' => "búsqueda",
'foundResult' => "Resultados de busqueda para",
'noResult' => "Ningún resultado para",
'tryAgain' => "Por favor, introduzca otras palabras claves o verifique el término ingresado.",
@ -128,7 +131,12 @@ $lang = array(
// formating
'colon' => ': ',
'dateFmtShort' => "d/m/Y",
'dateFmtLong' => "d/m/Y \a \l\a\s H:i"
'dateFmtLong' => "d/m/Y \a \l\a\s H:i",
// error
'genericError' => "Ha ocurrido un error; refresca la página e inténtalo de nuevo. Si el error persiste manda un correo a <a href='#contact'>feedback</a>", # LANG.genericerror
'bannedRating' => "Has sido baneado y no podrás valorar comentarios.", # LANG.tooltip_banned_rating
'tooManyVotes' => "Has alcanzado el límite diario de votos. Vuelve mañana." # LANG.tooltip_too_many_votes
),
'game' => array(
'achievement' => "logro",

View file

@ -14,14 +14,14 @@ $lang = array(
'timeUnits' => array(
'sg' => ["année", "mois", "semaine", "jour", "heure", "minute", "seconde", "milliseconde"],
'pl' => ["années", "mois", "semaines", "jours", "heures", "minutes", "secondes", "millisecondes"],
'ab' => ["an", "mo", "sem", "jour", "h", "min", "s", "ms"]
'ab' => ["an", "mo", "sem", "jour", "h", "min", "s", "ms"],
'ago' => 'il y a %s'
),
'main' => array(
'name' => "nom",
'link' => "Lien",
'signIn' => "Se connecter / S'inscrire",
'jsError' => "S'il vous plait, assurez vous d'avoir le javascript autorisé.",
'searchButton' => "Rechercher",
'language' => "Langue",
'feedback' => "Feedback",
'numSQL' => "Nombre de requêtes SQL",
@ -46,6 +46,8 @@ $lang = array(
'login' => "[Login]",
'forum' => "Forum",
'n_a' => "n/d",
'siteRep' => "Réputation",
'aboutUs' => "À propos de Aowow",
// filter
'extSearch' => "Recherche avancée",
@ -115,11 +117,12 @@ $lang = array(
'help' => "Aide",
'helpTopics' => array(
"Le guide du commentaire", "Visionneuse 3D", "Captures d'écran : Trucs et astuces", "Échelles de valeurs",
"Calculateur de talents", "Comparaison d'objets", "Profiler"
"Calculateur de talents", "Comparaison d'objets", "Profiler", "Markup Guide"
),
// search
'search' => "Recherche",
'searchButton' => "Rechercher",
'foundResult' => "Résultats de recherche pour",
'noResult' => "Aucun résultat pour malordawsne",
'tryAgain' => "Veuillez essayer d'autres mots ou vérifiez l'orthographe des termes de recherche.",
@ -128,7 +131,12 @@ $lang = array(
// formating
'colon' => ' : ',
'dateFmtShort' => "Y-m-d",
'dateFmtLong' => "Y-m-d à H:i"
'dateFmtLong' => "Y-m-d à H:i",
// error
'genericError' => "Une erreur est survenue; Actualisez la page et essayez à nouveau. Si l'erreur persiste, envoyez un email à <a href='#contact'>feedback</a>", # LANG.genericerror
'bannedRating' => "Vous avez été banni du score des commentaires.", # LANG.tooltip_banned_rating
'tooManyVotes' => "Vous avez voté trop souvent aujourd'hui! Revenez demain." # LANG.tooltip_too_many_votes
),
'game' => array (
'achievement' => "haut fait",

View file

@ -14,14 +14,14 @@ $lang = array(
'timeUnits' => array(
'sg' => ["год", "месяц", "неделя", "день", "час", "минута", "секунда", "миллисекунда"],
'pl' => ["годы", "месяцы", "недели", "дн.", "часы", "мин", "секунды", "миллисекундах"],
'ab' => ["г.", "мес.", "нед.", "дн", "ч.", "мин", "сек.", "мс"]
'ab' => ["г.", "мес.", "нед.", "дн", "ч.", "мин", "сек.", "мс"],
'ago' => '%s назад'
),
'main' => array(
'name' => "название",
'link' => "Ссылка",
'signIn' => "Вход / Регистрация",
'jsError' => "Для работы этого сайта необходим JavaScript.",
'searchButton' => "Поиск",
'language' => "Язык",
'feedback' => "Отзыв",
'numSQL' => "Количество MySQL запросов",
@ -46,6 +46,8 @@ $lang = array(
'login' => "[Login]",
'forum' => "Форум",
'n_a' => "нет",
'siteRep' => "Репутация",
'aboutUs' => "О Aowow",
// filter
'extSearch' => "Расширенный поиск",
@ -115,11 +117,12 @@ $lang = array(
'help' => "Справка",
'helpTopics' => array(
"Комментарии и Вы", "3D просмотр", "Скриншоты: Секреты мастерства", "Значимость характеристик",
"Расчёт талантов", "Сравнение предметов", "Профили персонажей"
"Расчёт талантов", "Сравнение предметов", "Профили персонажей", "Markup Guide"
),
// search
'search' => "Поиск",
'searchButton' => "Поиск",
'foundResult' => "Результаты поиска для",
'noResult' => "Ничего не найдено для",
'tryAgain' => "Пожалуйста, попробуйте другие ключевые слова или проверьте правильность запроса.",
@ -128,7 +131,12 @@ $lang = array(
// formating
'colon' => ": ",
'dateFmtShort' => "Y-m-d",
'dateFmtLong' => "Y-m-d в H:i"
'dateFmtLong' => "Y-m-d в H:i",
// error
'genericError' => "Произошла ошибка; обновите страницу и попробуйте снова. Если ситуация повторяется, отправьте сообщение на <a href='#contact'>feedback</a>", # LANG.genericerror
'bannedRating' => "Вам была заблокирована возможность оценивать комментарии.", # LANG.tooltip_banned_rating
'tooManyVotes' => "Вы сегодня проголосовали слишком много раз! Вы сможете продолжить завтра." # LANG.tooltip_too_many_votes
),
'game' => array(
'achievement' => "достижение",

View file

@ -113,14 +113,17 @@ class AccountPage extends GenericPage
else
{
$nStep = 1.5;
$this->text = sprintf(Lang::$account['createAccSent']. $_POST['email']);
$this->text = sprintf(Lang::$account['createAccSent'], $_POST['email']);
}
}
else if (!empty($_GET['token']) && DB::Aowow()->query('SELECT 1 FROM ?_account WHERE status = ?d AND token = ?', ACC_STATUS_NEW, $_GET['token']))
else if (!empty($_GET['token']) && ($newId = DB::Aowow()->selectCell('SELECT id FROM ?_account WHERE status = ?d AND token = ?', ACC_STATUS_NEW, $_GET['token'])))
{
$nStep = 2;
DB::Aowow()->query('UPDATE ?_account SET status = ?d WHERE token = ?', ACC_STATUS_OK, $_GET['token']);
DB::Aowow()->query('REPLACE INTO ?_account_bannedips (ip, type, count, unbanDate) VALUES (?, 1, ?d + 1, UNIX_TIMESTAMP() + ?d)', $_SERVER['REMOTE_ADDR'], CFG_FAILED_AUTH_COUNT, CFG_FAILED_AUTH_EXCLUSION);
Util::gainSiteReputation($newId, SITEREP_ACTION_REGISTER);
$this->text = sprintf(Lang::$account['accActivated'], $_GET['token']);
}
else
@ -165,8 +168,9 @@ class AccountPage extends GenericPage
foreach (Lang::$account['groups'] as $idx => $key)
if ($idx >= 0 && $user['userGroups'] & (1 << $idx))
$groups[] = (!fMod(count($groups) + 1, 3) ? '[br]' : null).Lang::$account['groups'][$idx];
$infobox[] = Lang::$account['userGroups'].Lang::$main['colon'].($groups ? implode(', ', $groups) : Lang::$account['groups'][-1]);
$infobox[] = Util::ucFirst(Lang::$main['siteRep']).Lang::$main['colon'].User::getReputation();
$this->infobox = '[ul][li]'.implode('[/li][li]', $infobox).'[/li][/ul]';
@ -193,6 +197,67 @@ class AccountPage extends GenericPage
/* Listview */
/************/
$this->lvTabs = [];
$this->forceTabs = true;
// Reputation changelog (params only for comment-events)
if ($repData = DB::Aowow()->select('SELECT action, amount, date AS \'when\', IF(action IN (3, 4, 5), sourceA, 0) AS param FROM ?_account_reputation WHERE userId = ?d', User::$id))
{
foreach ($repData as &$r)
$r['when'] = date(Util::$dateFormatInternal, $r['when']);
$this->lvTabs[] = array(
'file' => 'reputationhistory',
'data' => $repData,
'params' => []
);
}
// comments
if ($_ = CommunityContent::getCommentPreviews(['user' => User::$id, 'replies' => false]))
{
// needs foundCount for params
// _totalCount: 377,
// note: $WH.sprintf(LANG.lvnote_usercomments, 377),
$this->lvTabs[] = array(
'file' => 'commentpreview',
'data' => $_,
'params' => array(
'hiddenCols' => "$['author']",
'onBeforeCreate' => '$Listview.funcBox.beforeUserComments'
)
);
}
// replies
if ($_ = CommunityContent::getCommentPreviews(['user' => User::$id, 'replies' => true]))
{
// needs commentid (parentComment) for data
// needs foundCount for params
// _totalCount: 377,
// note: $WH.sprintf(LANG.lvnote_usercomments, 377),
$this->lvTabs[] = array(
'file' => 'replypreview',
'data' => $_,
'params' => array(
'hiddenCols' => "$['author']"
)
);
}
/*
<div id="description" class="left"><div id="description-generic"></div>
<script type="text/javascript">//<![CDATA[
Markup.printHtml("description text here", "description-generic", { allow: Markup.CLASS_PREMIUM, roles: "256" });
//]]></script>
</div>
<script type="text/javascript">us_addDescription()</script>
*/
// claimed characters
// profiles
// own screenshots
@ -200,7 +265,6 @@ class AccountPage extends GenericPage
// own comments (preview)
// articles guides..?
$this->lvData = [];
// cpmsg change pass messaeg class:failure|success, msg:blabla
}
@ -262,8 +326,10 @@ class AccountPage extends GenericPage
$doExpire,
$username
);
if (User::init())
User::save(); // overwrites the current user
return;
case AUTH_BANNED:
if (User::init())
@ -295,14 +361,14 @@ class AccountPage extends GenericPage
$doExpire = @$_POST['remember_me'] != 'yes';
// check username
if (strlen($username) > 4 || strlen($username) < 16)
if (strlen($username) < 4 || strlen($username) > 16)
return Lang::$account['errNameLength'];
if (preg_match('/[^\w\d]/i', $username))
return Lang::$account['errNameChars'];
// check password
if (strlen($password) > 6 || strlen($password) < 16)
if (strlen($password) < 6 || strlen($password) > 16)
return Lang::$account['errPassLength'];
// if (preg_match('/[^\w\d!"#\$%]/', $password)) // such things exist..? :o

View file

@ -18,10 +18,7 @@ class ComparePage extends GenericPage
'Summary.js',
'swfobject.js',
);
protected $css = array(
['path' => 'Summary.css'],
['path' => 'Summary_ie6.css', 'ieCond' => 'lte IE 6'],
);
protected $css = [['path' => 'Summary.css']];
protected $summary = [];
protected $cmpItems = [];

View file

@ -187,7 +187,11 @@ class GenericPage
$this->postCache();
if (!empty($this->hasComContent)) // get comments, screenshots, videos
$this->community = CommunityContent::getAll($this->type, $this->typeId);
{
$this->community = CommunityContent::getAll($this->type, $this->typeId, $jsGlobals);
$this->extendGlobalData($jsGlobals); // as comments are not cached, those globals cant be either
$this->applyGlobals();
}
$this->time = microtime(true) - $this->time;
$this->mysql = DB::Aowow()->getStatistics();
@ -240,21 +244,7 @@ class GenericPage
if ($article)
{
foreach ($article as $text)
{
if (preg_match_all('/\[(npc|object|item|itemset|quest|spell|zone|faction|pet|achievement|title|event|class|race|skill|currency)=(\d+)[^\]]*\]/i', $text, $matches, PREG_SET_ORDER))
{
foreach ($matches as $match)
{
if ($type = array_search($match[1], Util::$typeStrings))
{
if (!isset($this->jsgBuffer[$type]))
$this->jsgBuffer[$type] = [];
$this->jsgBuffer[$type][] = $match[2];
}
}
}
}
(new Markup($text))->parseGlobalsFromText($this->jsgBuffer);
$replace = array(
'<script' => '<scr"+"ipt',
@ -262,6 +252,7 @@ class GenericPage
'HOST_URL' => HOST_URL,
'STATIC_URL' => STATIC_URL
);
$this->article = array(
'text' => strtr($article['article'], $replace),
'params' => []
@ -485,6 +476,7 @@ class GenericPage
case TYPE_NPC: $jsg[TYPE_NPC] = ['creature', [], []]; break;
case TYPE_OBJECT: $jsg[TYPE_OBJECT] = ['object', [], []]; break;
case TYPE_ITEM: $jsg[TYPE_ITEM] = ['item', [], []]; break;
case TYPE_ITEMSET: $jsg[TYPE_ITEMSET] = ['itemset', [], []]; break;
case TYPE_QUEST: $jsg[TYPE_QUEST] = ['quest', [], []]; break;
case TYPE_SPELL: $jsg[TYPE_SPELL] = ['spell', [], []]; break;
case TYPE_ZONE: $jsg[TYPE_ZONE] = ['zone', [], []]; break;
@ -497,6 +489,8 @@ class GenericPage
case TYPE_RACE: $jsg[TYPE_RACE] = ['race', [], []]; break;
case TYPE_SKILL: $jsg[TYPE_SKILL] = ['skill', [], []]; break;
case TYPE_CURRENCY: $jsg[TYPE_CURRENCY] = ['currency', [], []]; break;
// well, this is awkward
case TYPE_USER: $jsg[TYPE_USER] = ['user', [], []]; break;
}
}
@ -537,6 +531,7 @@ class GenericPage
case TYPE_NPC: $obj = new CreatureList($cnd); break;
case TYPE_OBJECT: $obj = new GameobjectList($cnd); break;
case TYPE_ITEM: $obj = new ItemList($cnd); break;
case TYPE_ITEMSET: $obj = new ItemsetList($cnd); break;
case TYPE_QUEST: $obj = new QuestList($cnd); break;
case TYPE_SPELL: $obj = new SpellList($cnd); break;
case TYPE_ZONE: $obj = new ZoneList($cnd); break;
@ -549,10 +544,15 @@ class GenericPage
case TYPE_RACE: $obj = new CharRaceList($cnd); break;
case TYPE_SKILL: $obj = new SkillList($cnd); break;
case TYPE_CURRENCY: $obj = new CurrencyList($cnd); break;
// "um, eh":, he ums and ehs.
case TYPE_USER: $obj = new UserList($cnd); break;
default: continue;
}
$this->extendGlobalData($obj->getJSGlobals(GLOBALINFO_SELF));
// delete processed ids
$this->jsgBuffer[$type] = [];
}
}

52
pages/home.php Normal file
View file

@ -0,0 +1,52 @@
<?php
if (!defined('AOWOW_REVISION'))
die('illegal access');
class HomePage extends GenericPage
{
protected $tpl = 'home';
protected $js = ['home.js'];
protected $css = [['path' => 'home.css']];
protected $news = [];
public function __construct()
{
parent::__construct('home');
}
protected function generateContent()
{
$this->addCSS(['string' => '.announcement { margin: auto; max-width: 1200px; padding: 0px 15px 15px 15px }']);
// load news
$this->news = DB::Aowow()->selectRow('SELECT id as ARRAY_KEY, n.* FROM ?_news n WHERE active = 1 ORDER BY id DESC LIMIT 1');
if (!$this->news)
return;
$this->news['text'] = Util::localizedString($this->news, 'text', true);
if ($_ = (new Markup($this->news['text']))->parseGlobalsFromText())
$this->extendGlobalData($_);
if (empty($this->news['bgImgUrl']))
$this->news['bgImgUrl'] = STATIC_URL.'/images/'.User::$localeString.'/mainpage-bg-news.jpg';
else
$this->news['bgImgUrl'] = strtr($this->news['bgImgUrl'], ['HOST_URL' => HOST_URL, 'STATIC_URL' => STATIC_URL]);
// load overlay links
$this->news['overlays'] = DB::Aowow()->select('SELECT * FROM ?_news_overlay WHERE newsId = ?d', $this->news['id']);
foreach ($this->news['overlays'] as &$o)
{
$o['title'] = Util::localizedString($o, 'title', true);
$o['title'] = strtr($o['title'], ['HOST_URL' => HOST_URL, 'STATIC_URL' => STATIC_URL]);
}
}
protected function generateTitle() {}
protected function generatePath() {}
}
?>

View file

@ -1,32 +0,0 @@
<?php
if (!defined('AOWOW_REVISION'))
die('illegal access');
/*
todo (med):
- different styles for newsbox
- flags for news .. disabled, deleted, recurring, whatever..
*/
class MainPage extends GenericPage
{
protected $tpl = 'main';
protected $news = [];
protected function generateContent()
{
parent::__construct('home');
// load news
$rows = DB::Aowow()->select('SELECT * FROM ?_news ORDER BY time DESC, id DESC LIMIT 5');
foreach ($rows as $i => $row)
$this->news[$i]['text'] = Util::localizedString($row, 'text');
}
protected function generateTitle() {}
protected function generatePath() {}
}
?>

View file

@ -17,8 +17,7 @@ class MapsPage extends GenericPage
);
protected $css = array(
['string' => 'zone-picker { margin-left: 4px }'],
['path' => 'Mapper.css'],
['path' => 'Mapper_ie6.css', 'ieCond' => 'lte IE 6']
['path' => 'Mapper.css']
);
public function __construct($pageCall, $__)

View file

@ -16,7 +16,7 @@ class MorePage extends GenericPage
protected $mode = CACHETYPE_NONE;
protected $js = ['swfobject.js'];
private $subPages = [ -13 => ['commenting-and-you', 'modelviewer', 'screenshots-tips-tricks', 'stat-weighting', 'talent-calculator', 'item-comparison', 'profiler']];
private $subPages = [ -13 => ['commenting-and-you', 'modelviewer', 'screenshots-tips-tricks', 'stat-weighting', 'talent-calculator', 'item-comparison', 'profiler', 'markup-guide']];
private $validPages = array( // [type, typeId, name]
'whats-new' => [ -7, 0, "What's New"],
'searchbox' => [-16, 0, 'Search Box'],

View file

@ -21,8 +21,7 @@ class NpcPage extends GenericPage
// 'Mapper.js'
);
protected $css = array(
// ['path' => 'Mapper.css'],
// ['path' => 'Mapper_ie6.css', 'ieCond' => 'lte IE 6']
// ['path' => 'Mapper.css']
);
public function __construct($pageCall, $id)

View file

@ -21,8 +21,7 @@ class ObjectPage extends GenericPage
// 'Mapper.js'
);
protected $css = array(
// ['path' => 'Mapper.css'],
// ['path' => 'Mapper_ie6.css', 'ieCond' => 'lte IE 6']
// ['path' => 'Mapper.css']
);
/* NOTE

View file

@ -19,8 +19,7 @@ class QuestPage extends GenericPage
protected $js = ['Mapper.js'];
protected $css = array(
['path' => 'Book.css'],
['path' => 'Mapper.css'],
['path' => 'Mapper_ie6.css', 'ieCond' => 'lte IE 6']
['path' => 'Mapper.css']
);
public function __construct($pageCall, $id)

View file

@ -36,7 +36,7 @@ class SearchPage extends GenericPage
protected $tabId = 0;
protected $mode = CACHETYPE_SEARCH;
protected $js = ['swfobject.js'];
protected $lvTabs = [];
protected $search = ''; // output
protected $invalid = [];

View file

@ -1431,9 +1431,6 @@ class SpellPage extends GenericPage
{
// proc data .. maybe use more information..?
$procData = DB::Aowow()->selectRow('SELECT IF(ppmRate > 0, -ppmRate, customChance) AS chance, cooldown FROM world.spell_proc_event WHERE entry = ?d', $this->typeId);
if (empty($procData['chance']))
$procData['chance'] = $this->subject->getField('procChance');
if (!isset($procData['cooldown']))
$procData['cooldown'] = 0;
@ -1514,12 +1511,17 @@ class SpellPage extends GenericPage
if ($_ = $this->subject->getField('effect'.$i.'Mechanic'))
$foo['mechanic'] = Lang::$game['me'][$_];
if ($procData['chance'] && $procData['chance'] < 100)
if (in_array($i, $this->subject->canTriggerSpell()))
$foo['procData'] = array(
$procData['chance'],
$procData['cooldown'] ? Util::formatTime($procData['cooldown'] * 1000, true) : null
);
if (!empty($procData['chance']) && $procData['chance'] < 100)
$foo['procData'] = array(
$procData['chance'],
$procData['cooldown'] ? Util::formatTime($procData['cooldown'] * 1000, true) : null
);
else if (in_array($i, $this->subject->canTriggerSpell()) && $this->subject->getField('procChance'))
$foo['procData'] = array(
$this->subject->getField('procChance'),
$procData['cooldown'] ? Util::formatTime($procData['cooldown'] * 1000, true) : null
);
// parse masks and indizes
switch ($effId)

View file

@ -15,9 +15,7 @@ class TalentPage extends GenericPage
protected $js = ['TalentCalc.js'];
protected $css = array(
['path' => 'TalentCalc.css'],
['path' => 'talent.css'],
['path' => 'TalentCalc_ie6.css', 'ieCond' => 'lte IE 6'],
['path' => 'TalentCalc_ie67.css', 'ieCond' => 'lte IE 7'],
['path' => 'talent.css']
);
private $isPetCalc = false;

View file

@ -69,7 +69,7 @@ class UtilityPage extends GenericPage
case 'latest-comments':
$this->lvTabs[] = array(
'file' => 'commentpreview',
'data' => [],
'data' => CommunityContent::getCommentPreviews(),
'params' => []
);
break;
@ -138,19 +138,30 @@ class UtilityPage extends GenericPage
protected function generateRSS()
{
$this->generateContent();
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
"<rss version=\"2.0\">\n\t<channel>\n".
"\t\t<title>".CFG_NAME_SHORT.' - '.$this->name."</title>\n".
"\t\t<link>".HOST_URL.'?'.$this->page . ($this->category ? '='.$this->category[0] : null)."</link>\n".
"\t\t<description>".CFG_NAME."</description>\n".
"\t\t<language>".implode('-', str_split(User::$localeString, 2))."</language>\n".
"\t\t<ttl>".CFG_TTL_RSS."</ttl>\n".
"\t\t<lastBuildDate>".date(DATE_RSS)."</lastBuildDate>\n".
"\t</channel>\n";
"<rss version=\"2.0\">\n<channel>\n".
"<title>".CFG_NAME_SHORT.' - '.$this->name."</title>\n".
"<link>".HOST_URL.'?'.$this->page . ($this->category ? '='.$this->category[0] : null)."</link>\n".
"<description>".CFG_NAME."</description>\n".
"<language>".implode('-', str_split(User::$localeString, 2))."</language>\n".
"<ttl>".CFG_TTL_RSS."</ttl>\n".
"<lastBuildDate>".date(DATE_RSS)."</lastBuildDate>\n";
# generate <item>'s here
foreach ($this->lvTabs[0]['data'] as $row)
{
$xml .= "<item>\n".
"<title><![CDATA[".$row['subject']."]]></title>\n".
"<link>".HOST_URL.'?go-to-comment&amp;id='.$row['id']."</link>\n".
"<description><![CDATA[".$row['preview']." ".sprintf(Lang::$timeUnits['ago'], Util::formatTime($row['elapsed'] * 100, true))."]]></description>\n". // todo (low): preview should be html-formated
"<pubDate>".date(DATE_RSS, time() - $row['elapsed'])."</pubDate>\n".
"<guid>".HOST_URL.'?go-to-comment&amp;id='.$row['id']."</guid>\n".
"<domain />\n".
"</item>\n";
}
$xml .= '</rss>';
$xml .= "</channel>\n</rss>";
return $xml;
}

View file

@ -17,8 +17,7 @@ class ZonesPage extends GenericPage
protected $mode = CACHETYPE_PAGE;
protected $validCats = [true, true, [0, 1, 2], [0, 1, 2], true, true, true, true, true];
protected $css = array(
['path' => 'Mapper.css'],
['path' => 'Mapper_ie6.css', 'ieCond' => 'lte IE 6']
['path' => 'Mapper.css']
);
protected $js = array(
'Mapper.js',

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View file

@ -1,82 +0,0 @@
-- --------------------------------------------------------
-- Host: 127.0.0.1
-- Server Version: 5.6.16 - MySQL Community Server (GPL)
-- Server Betriebssystem: Win32
-- HeidiSQL Version: 8.3.0.4792
-- --------------------------------------------------------
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-- Exportiere Struktur von Tabelle world.aowow_account
DROP TABLE IF EXISTS `aowow_account`;
CREATE TABLE IF NOT EXISTS `aowow_account` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`extId` int(10) unsigned NOT NULL COMMENT 'external user id',
`user` varchar(64) NOT NULL COMMENT 'login',
`passHash` varchar(128) NOT NULL,
`displayName` varchar(64) NOT NULL COMMENT 'nickname',
`email` varchar(64) NOT NULL,
`joinDate` int(10) unsigned NOT NULL COMMENT 'unixtime',
`allowExpire` tinyint(1) unsigned NOT NULL,
`curIP` varchar(15) NOT NULL,
`prevIP` varchar(15) NOT NULL,
`curLogin` int(10) unsigned NOT NULL COMMENT 'unixtime',
`prevLogin` int(10) unsigned NOT NULL,
`locale` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '0,2,3,6,8',
`userGroups` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'bitmask',
`avatar` varchar(16) NOT NULL COMMENT 'icon-string for internal or id for upload',
`description` text NOT NULL COMMENT 'markdown formated',
`userPerms` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT 'bool isAdmin',
`status` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT 'flag, see defines',
`statusTimer` int(10) unsigned NOT NULL DEFAULT '0',
`token` varchar(40) NOT NULL COMMENT 'creation & recovery',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- Daten Export vom Benutzer nicht ausgewählt
-- Exportiere Struktur von Tabelle world.aowow_account_banned
DROP TABLE IF EXISTS `aowow_account_banned`;
CREATE TABLE IF NOT EXISTS `aowow_account_banned` (
`id` int(16) unsigned NOT NULL,
`userId` int(11) unsigned NOT NULL COMMENT 'affected accountId',
`staffId` int(11) unsigned NOT NULL COMMENT 'executive accountId',
`typeMask` tinyint(4) unsigned NOT NULL COMMENT 'ACC_BAN_*',
`start` int(10) unsigned NOT NULL COMMENT 'unixtime',
`end` int(10) unsigned NOT NULL COMMENT 'automatic unban @ unixtime',
`reason` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- Daten Export vom Benutzer nicht ausgewählt
-- Exportiere Daten aus Tabelle world.aowow_config: 18 rows
DELETE FROM `aowow_config`;
/*!40000 ALTER TABLE `aowow_config` DISABLE KEYS */;
INSERT INTO `aowow_config` (`key`, `intValue`, `strValue`, `comment`) VALUES
('sql_limit_search', 500, NULL, 'default: 500 - Limit of some SQL queries'),
('sql_limit_default', 300, NULL, 'default: 300 - Limit of some SQL queries'),
('sql_limit_quicksearch', 10, NULL, 'default: 10 - Limit of some SQL queries'),
('sql_limit_none', 0, NULL, 'default: 0 - Limit of some SQL queries (yes, i\'m lazy)'),
('ttl_rss', 60, NULL, 'default: 60 - time to live for RSS'),
('cache_decay', 604800, NULL, 'default: 60 * 60 * 7 - Time to keep cache in seconds'),
('session_timeout_delay', 3600, NULL, 'default: 60 * 60 - non-permanent session times out in time() + X'),
('failed_auth_exclusion', 900, NULL, 'default: 15 * 60 - how long an account is closed after exceeding failed_auth_count'),
('failed_auth_count', 5, NULL, 'default: 5 - how often invalid passwords are tolerated'),
('name', NULL, 'Aowow Database Viewer (ADV)', 'website title'),
('name_short', NULL, 'Aowow', 'feed title'),
('board_url', NULL, 'http://www.wowhead.com/forums?board=', 'a javascript thing..'),
('contact_email', NULL, 'feedback@aowow.org', 'ah well...'),
('battlegroup', NULL, 'Pure Pwnage', 'pretend, we belong to a battlegroup to satisfy profiler-related Jscripts; region can be determined from realmlist.timezone'),
('allow_register', 1, NULL, 'default: 1 - Allow/disallow account creation (requires auth_mode 0)'),
('debug', 0, NULL, 'default: 0 - Disable cache, enable sql-errors, enable error_reporting'),
('maintenance', 0, NULL, 'default: 0 - brb gnomes'),
('auth_mode', 0, NULL, 'default: 0 - 0:aowow, 1:wow-auth, 2:external');
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

View file

@ -1,58 +1,49 @@
.book
{
width:28em;
border:2px solid #404040;
-webkit-border-radius:2px;
-moz-border-radius:2px;
border-radius:2px;
.book {
width:28em;
border:2px solid #404040;
-webkit-border-radius:2px;
-moz-border-radius:2px;
border-radius:2px;
}
.book .paging
{
cursor:default;
text-align:center;
background-color:#404040;
padding:3px 4px 5px;
.book .paging {
cursor:default;
text-align:center;
background-color:#404040;
padding:3px 4px 5px;
}
.book .previous
{
float:left;
text-align:left;
width:33%;
.book .previous {
float:left;
text-align:left;
width:33%;
}
.book .next
{
float:right;
text-align:right;
width:33%;
.book .next {
float:right;
text-align:right;
width:33%;
}
.book .page
{
background-color:#141414;
padding:4px;
.book .page {
background-color:#141414;
padding:4px;
}
.book p
{
margin:0;
padding:0;
.book p {
margin:0;
padding:0;
}
.book h1,.book h2
{
border:0;
font-weight:bold;
.book h1,.book h2 {
border:0;
font-weight:bold;
}
.book h1
{
font-size:16px;
.book h1 {
font-size:16px;
}
.book h2
{
font-size:14px;
.book h2 {
font-size:14px;
}

View file

@ -1,154 +0,0 @@
.mapper {
position: relative;
margin-top: 10px;
border: 3px solid #404040;
background-color: black;
}
.mapper .pin {
position: absolute;
width: 1px;
height: 1px;
font-size: 1px;
z-index: 5; /* Put pins on top of lines */
}
.mapper .pin a {
position: relative;
width: 11px;
height: 11px;
left: -5px;
top: -5px;
background: url(../images/Mapper/pin-yellow.png) no-repeat;
display: block;
}
.mapper .pin-start a {
background-image: url(../images/Mapper/quest-start.png);
width: 9px;
height: 17px;
left: -4px;
top: -8px;
z-index: 5;
}
.mapper .pin-end a {
background-image: url(../images/Mapper/quest-end.png);
width: 12px;
height: 18px;
left: -6px;
top: -9px;
z-index: 5;
}
.mapper .pin-startend a {
background-image: url(../images/Mapper/quest-startend.png);
width: 19px;
height: 18px;
left: -9px;
top: -9px;
z-index: 5;
}
.mapper-pin, .mapper-pin-1, .mapper-pin-2, .mapper-pin-3, .mapper-pin-4 {
padding-left: 13px;
background-image: url(../images/Mapper/pin-yellow.png);
background-repeat: no-repeat;
background-position: 0 50%;
}
.mapper-pin-1, .mapper .pin-1 a { background-image: url(../images/Mapper/pin-green.png); }
.mapper-pin-2, .mapper .pin-2 a { background-image: url(../images/Mapper/pin-red.png); }
.mapper-pin-3, .mapper .pin-3 a { background-image: url(../images/Mapper/pin-blue.png); }
.mapper-pin-4, .mapper .pin-4 a { background-image: url(../images/Mapper/pin-purple.png); }
.mapper .glow {
margin: 0 2px;
font-size: 12px;
font-weight: bold;
color: white;
cursor: default;
white-space: nowrap;
}
.mapper .glow a {
text-decoration: none;
}
.mapper .glow a:hover {
text-decoration: underline;
}
.mapper-som-button {
margin: 0 !important;
float: left !important;
}
.mapper-legend {
float: left;
display: block;
background-color: #141414;
border: 1px solid #101010;
font-size: 11px;
margin: -4px 0 0 15px;
white-space: nowrap;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.mapper-legend-container {
padding: 4px 8px;
}
.mapper-legend-pin {
margin: 0 5px;
}
.mapper .line var { background: #C8B94C; }
.mapper .line-1 var { background: #73B85B; }
.mapper .line-2 var { background: #D7563C; }
.mapper .line-3 var { background: #47ACCD; }
.mapper .line-4 var { background: #C844D0; }
html.ie678 .line var {
margin-left: 0;
}
.line {
position: absolute;
display: block;
cursor: default;
}
.line var {
width: 100%;
height: 2px;
margin: -2px 0 0 2px;
display: block;
background: #FFFFFF;
border: 1px solid #181818;
border-left: none;
border-right: none;
-o-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-webkit-transform-origin: 0 0;
-o-box-shadow: 0px 0px 3px black;
/*-moz-box-shadow: 0px 0px 3px black;*/
-webkit-box-shadow: 0px 0px 3px black;
}
.line.flipped {
-o-transform: scaleY(-1);
-moz-transform: scaleY(-1);
-webkit-transform: scaleY(-1);
-ms-filter: "FlipV";
filter: FlipV;
}
.mapper .line var { background: #C8B94C; }
.mapper .line-1 var { background: #73B85B; }
.mapper .line-2 var { background: #D7563C; }
.mapper .line-3 var { background: #47ACCD; }
.mapper .line-4 var { background: #C844D0; }

View file

@ -1,8 +0,0 @@
/*
TalentCalc_ie6.css version 278
*/
.mapper .pin a { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Mapper/pin-yellow.png'); }
.mapper .pin-1 a { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Mapper/pin-green.png'); }
.mapper .pin-2 a { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Mapper/pin-red.png'); }
.mapper .pin-3 a { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Mapper/pin-blue.png'); }
.mapper .pin-4 a { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Mapper/pin-purple.png'); }

View file

@ -362,8 +362,8 @@ a.profiler-header-editlink {
.profiler-infobox-gear .progressbar-rep5 { border: 1px solid #638701; border-top: 1px solid #74a001; }
.profiler-infobox-gear .progressbar-rep6 { border: 1px solid #288b01; border-top: 1px solid #30a601; }
.profiler-infobox-gear .progressbar-rep7 { border: 1px solid #068870; border-top: 1px solid #0aa087; }
.profiler-infobox-gear .progressbar-ach0 { border: 1px solid #2082af; border-top: 1px solid #0aa087; }
.profiler-infobox-gear .progressbar-ach0 { border: 1px solid #2082af; border-top: 1px solid #0aa087; }
.profiler-infobox-gear .progressbar-ach1 { border: 1px solid #686868; border-top: 1px solid #7a7a7a; }
.profiler-infobox-gear .progressbar-green { border: 1px solid #2b9401; border-top: 1px solid #3aca01; }

View file

@ -1,194 +1,193 @@
/* FILE ARCHIVED ON 5 16, 2011 */
.summary-picker {
font-size:13px;
width:780px;
height:554px;
background-color:#303030;
border:10px solid #303030;
border-bottom:0;
font-size:13px;
width:780px;
height:554px;
background-color:#303030;
border:10px solid #303030;
border-bottom:0;
}
.summary-picker .listview {
border:0;
border:0;
}
.summary-picker .listview-band-top {
background-color:#303030;
background-color:#303030;
}
.summary-tip {
margin-top:10px;
margin-top:10px;
}
.summary-controls {
position:relative;
padding:6px 0 10px 0;
z-index:25;
position:relative;
padding:6px 0 10px 0;
z-index:25;
}
.summary-controls a {
margin-right:16px;
margin-right:16px;
}
.summary-controls-right {
position:absolute;
text-align:right;
top:1px;
right:0;
position:absolute;
text-align:right;
top:1px;
right:0;
}
.summary-controls-right a {
margin-left:6px;
margin-right:0;
padding:5px;
margin-left:6px;
margin-right:0;
padding:5px;
}
a#su_addscale {
position:relative;
z-index:30;
position:relative;
z-index:30;
}
a#su_addscale.selected {
background-color:#404040;
border:1px solid #505050;
border-bottom:none;
background-position:4px 25%;
padding-left:24px!important;
padding-right:9px;
background-color:#404040;
border:1px solid #505050;
border-bottom:none;
background-position:4px 25%;
padding-left:24px!important;
padding-right:9px;
padding-bottom:14px;
}
#su_weights {
position:absolute;
top:29px;
right:0;
padding:3px;
background-color:#404040;
border:1px solid #505050;
text-align:left;
position:absolute;
top:29px;
right:0;
padding:3px;
background-color:#404040;
border:1px solid #505050;
text-align:left;
white-space: nowrap;
}
#su_weights table {
border-collapse:collapse;
border-collapse:collapse;
}
#su_weights td {
padding:4px 4px 4px 0;
padding:4px 4px 4px 0;
}
.summary-weights-inner {
background-color:#181818;
border:1px solid #383838;
padding:10px;
background-color:#181818;
border:1px solid #383838;
padding:10px;
}
.summary-weights-inner a {
margin:0;
margin:0;
}
.summary-weights-buttons {
margin-top:10px;
padding-top:12px;
border-top:1px solid #484848;
margin-top:10px;
padding-top:12px;
border-top:1px solid #484848;
}
#su_weight {
margin-top:10px;
padding-top:12px;
border-top:1px solid #484848;
margin-top:10px;
padding-top:12px;
border-top:1px solid #484848;
}
#su_weight div {
padding-bottom:4px;
padding-bottom:4px;
}
div.summary-group-buttons {
clear:both;
text-align:center;
font-family:Verdana,sans-serif;
font-size:12px;
clear:both;
text-align:center;
font-family:Verdana,sans-serif;
font-size:12px;
}
div.summary-group-controls {
height:13px;
margin:1px;
white-space:nowrap;
background:url(../images/Summary/group-controls.gif) repeat-x;
height:13px;
margin:1px;
white-space:nowrap;
background:url(../images/Summary/group-controls.gif) repeat-x;
}
a.summary-group-dropdown {
float:left;
display:block;
padding:4px 3px 3px 3px;
float:left;
display:block;
padding:4px 3px 3px 3px;
}
a.summary-group-dropdown span {
display:block;
width:10px;
height:6px;
background:url(../images/Summary/group-controls.gif) 0 -13px no-repeat;
display:block;
width:10px;
height:6px;
background:url(../images/Summary/group-controls.gif) 0 -13px no-repeat;
}
a.summary-group-dropdown:hover span {
background-position:0 -19px;
background-position:0 -19px;
}
a.summary-group-focus {
float:left;
display:block;
padding:3px 3px 2px 0;
float:left;
display:block;
padding:3px 3px 2px 0;
}
a.summary-group-focus span {
display:block;
width:13px;
height:8px;
background:url(../images/Summary/group-controls.gif) -37px -13px no-repeat;
display:block;
width:13px;
height:8px;
background:url(../images/Summary/group-controls.gif) -37px -13px no-repeat;
}
a.summary-group-focus:hover span,a.summary-group-focus span.selected {
background-position:-37px -21px;
background-position:-37px -21px;
}
a.summary-group-delete {
float:right;
display:block;
padding:2px 2px 2px 4px;
float:right;
display:block;
padding:2px 2px 2px 4px;
}
a.summary-group-delete span {
display:block;
width:10px;
height:9px;
background:url(../images/Summary/group-controls.gif) -10px -13px no-repeat;
display:block;
width:10px;
height:9px;
background:url(../images/Summary/group-controls.gif) -10px -13px no-repeat;
}
a.summary-group-delete:hover span {
background-position:-10px -22px;
background-position:-10px -22px;
}
a.summary-group-drag {
display:block;
margin:0 auto;
width:17px;
padding:4px 1px 3px 1px;
cursor:move;
display:block;
margin:0 auto;
width:17px;
padding:4px 1px 3px 1px;
cursor:move;
}
a.summary-group-drag span {
display:block;
width:17px;
height:6px;
background:url(../images/Summary/group-controls.gif) -20px -13px no-repeat;
display:block;
width:17px;
height:6px;
background:url(../images/Summary/group-controls.gif) -20px -13px no-repeat;
}
div.summary-group-bottom {
padding:6px;
padding:6px;
}
div.summary-notice {
background:url(../images/icons/help.gif) 8px 9px no-repeat;
background:url(../images/icons/help.gif) 8px 9px no-repeat;
background-color: #141414;
border: 1px solid #101010;
border-radius: 4px;
@ -203,50 +202,49 @@ div.summary-notice {
}
.grid th {
padding:6px;
padding:6px;
}
.grid td {
padding:4px 10px;
padding:4px 10px;
}
.grid a {
text-decoration:none;
text-decoration:none;
}
.grid a:hover {
text-decoration:underline;
text-decoration:underline;
}
.grid .checked {
background-color:#202020;
background-color:#202020;
}
.grid tr:hover td.checked,.grid tr:hover th.checked {
background-color:#282828;
background-color:#282828;
}
.summary-score-row0 {
background-color:#282828;
background-color:#282828;
}
.summary-score-row1 {
background-color:#303030;
background-color:#303030;
}
.summary-score-row0 a,.summary-score-row1 a {
display:block;
padding-right:16px;
display:block;
padding-right:16px;
}
.summary-score-remove {
float:right;
padding:0 4px 1px 4px;
font-family:Verdana,sans-serif;
font-size:12px;
float:right;
padding:0 4px 1px 4px;
font-family:Verdana,sans-serif;
font-size:12px;
}
.summary-textnames {
padding:0 0 10px 0;
padding:0 0 10px 0;
}

View file

@ -1,45 +0,0 @@
/*
TalentCalc_ie6.css version 278
*/
.talentcalc-upper
{
height:1px;
}
.iconmedium a.bubbly { background-image:url(../images/TalentCalc/icon-medium-hilite.gif); }
.talentcalc-arrow-leftdown td { background-image:url(../images/TalentCalc/arrows/leftdown.gif); }
.talentcalc-arrow-leftdown2 td { background-image:url(../images/TalentCalc/arrows/leftdown2.gif); }
.talentcalc-arrow-rightdown td { background-image:url(../images/TalentCalc/arrows/rightdown.gif); }
.talentcalc-arrow-rightdown2 td { background-image:url(../images/TalentCalc/arrows/rightdown2.gif); }
.talentcalc-arrow-right td { background-image:url(../images/TalentCalc/arrows/right.gif); }
.talentcalc-arrow-right2 td { background-image:url(../images/TalentCalc/arrows/right2.gif); }
.talentcalc-arrow-left td { background-image:url(../images/TalentCalc/arrows/left.gif); }
.talentcalc-arrow-left2 td { background-image:url(../images/TalentCalc/arrows/left2.gif); }
.talentcalc-arrow-down td,
.talentcalc-arrow-leftdown th,
.talentcalc-arrow-rightdown th { background-image:url(../images/TalentCalc/arrows/down.gif); }
.talentcalc-arrow-down2 td,
.talentcalc-arrow-leftdown2 th,
.talentcalc-arrow-rightdown2 th { background-image:url(../images/TalentCalc/arrows/down2.gif); }
.iconmedium div.icon-bubble
{
background:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/TalentCalc/bubble2.png');
}
.talentcalc-lower a
{
filter:alpha(opacity=33.33);
}
.talentcalc-lower a:hover
{
filter:alpha(opacity=100);
}

View file

@ -1,7 +0,0 @@
/*
TalentCalc_ie67.css version 278
*/
.talentcalc-glyphpicker .listview table
{
width:97%;
}

3704
static/css/aowow.css Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,4 @@
#layers
{
#layers {
text-align: left;
color: #ffffff;
font-family: "Arial", sans-serif;
@ -17,14 +16,14 @@
.wowhead-tooltip th { height: auto; padding: 3px; vertical-align: top; }
.wowhead-tooltip td { padding: 8px 4px 1px 9px; text-align: left; vertical-align: top; }
.wowhead-tooltip b { font-size: 14px; line-height: 19px; font-weight: normal; }
.wowhead-tooltip b { font-size: 14px; line-height: 19px; font-weight: normal; }
.wowhead-tooltip div.indent { padding-left: .6em; }
.wowhead-tooltip td th, .wowhead-tooltip td td { background: none; }
.wowhead-tooltip td th { padding: 0 0 0 4em; text-align: right; font-weight: normal; }
.wowhead-tooltip td td { padding: 0; text-align: left; }
.wowhead-tooltip p { position: absolute; left: -44px; top: -1px; width: 44px; height: 44px; background: 4px 4px no-repeat; margin: 0; padding: 0; }
.wowhead-tooltip p { position: absolute; left: -44px; top: -1px; width: 44px; height: 44px; background: 4px 4px no-repeat; margin: 0; padding: 0; }
.wowhead-tooltip p div { width: 44px; height: 44px; background-image: url(../images/Icon/medium/border/default.png); }
.wowhead-tooltip table.shrink b { font-size: 12px; line-height: 15px; }
@ -181,12 +180,12 @@ a span.moneyitem, a span.moneysocketmeta, a span.moneysocketred, a span.moneysoc
-webkit-border-radius: 5px;
border-radius: 5px;
padding: 15px;
background:url(../images/blk.png) repeat;
background:url(../images/ui/blk.png) repeat;
}
.message-box .close {
text-indent: -9999px;
background:url(../images/close.png) no-repeat;
background:url(../images/icons/close.png) no-repeat;
width: 10px;
height: 10px;
position: absolute;

File diff suppressed because it is too large Load diff

View file

@ -1,49 +0,0 @@
#noscript-bg
{
filter: alpha(opacity=70);
}
.menu a
{
min-width: 90%;
}
.progressbar
{
width: 99%;
}
.listview-band-top input, .listview-band-bottom input, .listview-band-top select, .listview-band-bottom select
{
vertical-align: middle;
}
.listview-quicksearch a
{
padding: 4px;
}
.listview-quicksearch input
{
vertical-align: baseline;
}
div.lightbox-overlay
{
filter: alpha(opacity=80);
}
div.screenshotviewer-screen a
{
background: url(../images/deprecated/pixel.gif) no-repeat;
}
.dragged
{
filter: alpha(opacity=35);
}
.listview th a, .tabs-container
{
width: 100%;
}

View file

@ -1,359 +0,0 @@
#topbar-right a
{
top: 1px;
}
.wowhead-tooltip th
{
height: 8px;
}
#toptabs dt
{
width: 2px;
}
#topbar-expand a
{
right: -9px;
}
a.moneyitem, .a.moneysocketmeta, .a.moneysocketred, .a.moneysocketyellow, .a.moneysocketblue
{
border: 0;
padding-bottom: 1px;
}
a.moneyitem:hover, .a.moneysocketmeta:hover, .a.moneysocketred:hover, .a.moneysocketyellow:hover, .a.moneysocketblue:hover
{
padding-bottom: 0;
}
#layers iframe
{
position: absolute;
visibility: hidden;
z-index: 10000000;
border: 0;
filter: alpha(opacity=0);
}
#noscript-bg
{
position: absolute;
height: 2000px;
}
#ie6layout
{
width: 100%;
border-collapse: collapse;
border: 0;
}
#ie6layout-td, .ie6layout-th
{
padding: 0;
margin: 0;
}
.ie6layout-th
{
width: 13%;
}
#ie6layout.fullwidth .ie6layout-th
{
width: 10px;
}
#ie6layout-div
{
width: 998px;
font-size: 1px;
height: 0;
}
#main
{
height: 520px;
}
#main-contents.main-contents
{
height: 498px;
}
.tabs b
{
visibility: visible;
font-weight: normal;
line-height: 29px;
background: url(../images/Tabs/corner-tl.gif) top left no-repeat;
}
.tabs a.selected b
{
font-weight: bold;
}
.iconsmall del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/border/default.png');
}
.iconlarge del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/large/border/default.png');
}
.iconsmall-socket-meta del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/meta1.png');
}
.iconsmall-socket-meta-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/meta0.png');
}
.iconsmall-socket-red del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/red1.png');
}
.iconsmall-socket-red-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/red0.png');
}
.iconsmall-socket-yellow del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/yellow1.png');
}
.iconsmall-socket-yellow-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/yellow0.png');
}
.iconsmall-socket-blue del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/blue1.png');
}
.iconsmall-socket-blue-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/blue0.png');
}
.iconsmall-socket-prismatic del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/prismatic1.png');
}
.iconsmall-socket-prismatic-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/small/socket/prismatic0.png');
}
.iconmedium-socket-meta del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/meta1.png');
}
.iconmedium-socket-meta-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/meta0.png');
}
.iconmedium-socket-red del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/red1.png');
}
.iconmedium-socket-red-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/red0.png');
}
.iconmedium-socket-yellow del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/yellow1.png');
}
.iconmedium-socket-yellow-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/yellow0.png');
}
.iconmedium-socket-blue del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/blue1.png');
}
.iconmedium-socket-blue-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/blue0.png');
}
.iconmedium-socket-prismatic del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/prismatic1.png');
}
.iconmedium-socket-prismatic-empty del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/socket/prismatic0.png');
}
.iconsmall a
{
background-image: url(../images/Icon/small/hilite/default.gif);
}
.iconmedium a
{
background-image: url(../images/Icon/medium/hilite/default.gif);
}
.iconmedium-gold del
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/border/gold.png');
}
.wowhead-tooltip td, .wowhead-tooltip th
{
background-image: url(../images/wow/tooltip.gif);
}
.listview-quicksearch em
{
right: 3px;
top: 3px;
}
div.live-search-icon div
{
background-image: url(../images/Icon/small/border/default.gif);
}
.live-search a, .live-search div div
{
width: 100%;
}
div.lightbox-outer
{
position: absolute;
}
div.toolbar img
{
background: none;
}
img.toolbar-b
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-b.png');
}
img.toolbar-i
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-i.png');
}
img.toolbar-u
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-u.png');
}
img.toolbar-s
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-s.png');
}
img.toolbar-url
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-url.png');
}
img.toolbar-small
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-small.png');
}
img.toolbar-quote
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-quote.png');
}
img.toolbar-code
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-code.png');
}
img.toolbar-ul
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-ul.png');
}
img.toolbar-ol
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-ol.png');
}
img.toolbar-li
{
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/deprecated/toolbar-li.png');
}
.rcorners tt, .rcorners strong, .rcorners var, .rcorners em
{
font-size: 1px;
background-image: url(../images/deprecated/corners.gif);
}
#header, .wrapper.nosidebar #main, .wrapper.nosidebar #main-contents.main-contents
{
height: 1px;
}
#layout, .layout.fullwidth
{
width: auto;
}
.infobox-spacer, .listview-quicksearch a
{
font-size: 1px;
}
.iconmedium del, .wowhead-tooltip p div
{
background: none;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='../images/Icon/medium/border/default.png');
}

View file

@ -1,9 +0,0 @@
#topbar-right a
{
top: 1px;
}
.tooltip th
{
height: 8px;
}

154
static/css/home.css Normal file
View file

@ -0,0 +1,154 @@
.home-wrapper {
text-align:center;
padding-top:25px;
}
.home-wrapper h1 {
position:absolute;
left:-2323px;
top:-2323px;
}
.home-logo a:visited,.home-logo a:link {
display:block;
cursor:default;
text-indent:-9000px;
cursor:pointer;
}
.home-logo {
display:block;
cursor:default;
width:261px;
height:119px;
margin:0 auto 20px auto;
background:url(../images/logos/home.png) no-repeat;
}
.home-menu {
padding-top:10px;
}
.home-search form {
display:block;
position:relative;
width:425px;
margin:0 auto;
}
.home-search input {
width:100%;
font-size:20px;
color:black;
padding:3px;
margin:0;
outline:0;
border:1px solid #adadad;
background:white url(../images/ui/form/input-textbox-bg.gif) repeat-x;
-webkit-border-radius:3px;
-moz-border-radius:3px;
border-radius:3px;
}
.home-search a {
display:block;
position:absolute;
right:-3px;
top:4px;
width:24px;
height:24px;
background:url(../images/header/search2.gif) 4px 4px no-repeat;
}
.home-oneliner {
margin:0;
padding-top:53px;
color:#ccc;
line-height:1.75em;
font-size:12px;
}
.home-featuredbox {
font-size:13px;
position:relative;
text-align:left;
width:415px;
height:191px;
margin:37px auto 10px auto;
background:no-repeat;
background-color:transparent;
}
.home-featuredbox-extended {
width:515px;
}
.home-featuredbox-links a,.home-featuredbox-links var {
position:absolute;
display:block;
}
.home-featuredbox-links a {
z-index:5;
}
.home-featuredbox-links var.active {
background-color:white!important;
opacity:.075!important;
filter:alpha(opacity=7.5)!important;
-webkit-border-radius:6px;
-moz-border-radius:6px;
border-radius:6px;
}
.home-featuredbox-inner {
padding:25px 0 0 26px;
margin:0;
position:absolute;
left:0;
top:0;
z-index:2;
}
.home-featuredbox li {
line-height:2em;
}
.toplinks {
background:black;
padding:5px 2px;
position:absolute;
line-height:normal;
height:auto;
overflow:visible;
right:0;
top:0;
}
body, html {
height:100%;
}
.home-footer {
width:500px;
margin:0 auto;
text-align:center;
font-size:11px;
margin-top:40px;
}
.home-footer ul {
margin:0;
padding:0;
}
.home-footer li {
display:inline;
padding:0 6px;
border-right:1px solid #333;
background:none;
}
.home-footer li:last-child {
border:0;
}

View file

@ -1,20 +1,16 @@
.topbar-search input.search-database
{
.topbar-search input.search-database {
background: white url(../images/dede/searchdatabase.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results
{
.listview-quicksearch input.search-within-results {
background: white url(../images/dede/searchwithinresults.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results2
{
.listview-quicksearch input.search-within-results2 {
background: white url(../images/dede/searchwithinresults2.gif) .2em center no-repeat;
}
div.modelviewer-quality div
{
div.modelviewer-quality div {
float: left;
width: 71px;
height: 22px;
@ -22,8 +18,7 @@ div.modelviewer-quality div
background: url(../images/dede/modelviewer-picshures.gif) left center no-repeat;
}
div.modelviewer-model div
{
div.modelviewer-model div {
margin-left: 25px;
margin-right: 10px;
float: left;
@ -32,96 +27,82 @@ div.modelviewer-model div
background: url(../images/dede/modelviewer-picshures.gif) -540px center no-repeat;
}
a.modelviewer-help span
{
a.modelviewer-help span {
display: block;
width: 58px;
height: 22px;
background: url(../images/dede/modelviewer-picshures.gif) -100px center no-repeat;
}
a:hover.modelviewer-help span
{
a:hover.modelviewer-help span {
background-position: -200px center;
}
a.modelviewer-close span
{
a.modelviewer-close span {
display: block;
width: 111px;
height: 22px;
background: url(../images/dede/modelviewer-picshures.gif) -300px center no-repeat;
}
a:hover.modelviewer-close span
{
a:hover.modelviewer-close span {
background-position: -420px center;
}
a.screenshotviewer-prev b
{
a.screenshotviewer-prev b {
display: block;
width: 102px;
height: 22px;
background: url(../images/dede/screenshotviewer-picshures.gif?2) -240px center no-repeat;
}
a.screenshotviewer-next b
{
a.screenshotviewer-next b {
display: block;
width: 83px;
height: 22px;
background: url(../images/dede/screenshotviewer-picshures.gif?2) -360px center no-repeat;
}
a.screenshotviewer-cover span
{
a.screenshotviewer-cover span {
width: 111px;
height: 22px;
}
a.screenshotviewer-cover b
{
a.screenshotviewer-cover b {
display: block;
width: 111px;
height: 22px;
background: url(../images/dede/screenshotviewer-picshures.gif?2) -120px center no-repeat;
}
a.screenshotviewer-original span
{
a.screenshotviewer-original span {
display: block;
width: 93px;
height: 22px;
background: url(../images/dede/screenshotviewer-picshures.gif?2) -480px center no-repeat;
}
a:hover.screenshotviewer-original span
{
a:hover.screenshotviewer-original span {
background-position: -580px center;
}
a.screenshotviewer-close span
{
a.screenshotviewer-close span {
display: block;
width: 111px;
height: 22px;
background: url(../images/dede/screenshotviewer-picshures.gif?2) 0 center no-repeat;
}
a:hover.screenshotviewer-close span
{
a:hover.screenshotviewer-close span {
background-position: -120px center;
}
#su_searchbox
{
#su_searchbox {
left: -25px !important;
}
/*
#su_weights
{
#su_weights {
width: 550px !important;
}
*/

View file

@ -1,20 +1,16 @@
.topbar-search input.search-database
{
.topbar-search input.search-database {
background: white url(../images/enus/searchdatabase.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results
{
.listview-quicksearch input.search-within-results {
background: white url(../images/enus/searchwithinresults.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results2
{
.listview-quicksearch input.search-within-results2 {
background: white url(../images/enus/searchwithinresults2.gif) .2em center no-repeat;
}
div.modelviewer-quality div
{
div.modelviewer-quality div {
float: left;
width: 61px;
height: 22px;
@ -22,8 +18,7 @@ div.modelviewer-quality div
background: url(../images/enus/modelviewer-picshures.gif) left center no-repeat;
}
div.modelviewer-model div
{
div.modelviewer-model div {
margin-left: 40px;
margin-right: 10px;
float: left;
@ -32,84 +27,72 @@ div.modelviewer-model div
background: url(../images/enus/modelviewer-picshures.gif) -506px center no-repeat;
}
a.modelviewer-help span
{
a.modelviewer-help span {
display: block;
width: 52px;
height: 22px;
background: url(../images/enus/modelviewer-picshures.gif) -100px center no-repeat;
}
a:hover.modelviewer-help span
{
a:hover.modelviewer-help span {
background-position: -200px center;
}
a.modelviewer-close span
{
a.modelviewer-close span {
display: block;
width: 66px;
height: 22px;
background: url(../images/enus/modelviewer-picshures.gif) -300px center no-repeat;
}
a:hover.modelviewer-close span
{
a:hover.modelviewer-close span {
background-position: -400px center;
}
a.screenshotviewer-prev b
{
a.screenshotviewer-prev b {
display: block;
width: 88px;
height: 22px;
background: url(../images/enus/screenshotviewer-picshures.gif?2) -200px center no-repeat;
}
a.screenshotviewer-next b
{
a.screenshotviewer-next b {
display: block;
width: 53px;
height: 22px;
background: url(../images/enus/screenshotviewer-picshures.gif?2) -300px center no-repeat;
}
a.screenshotviewer-cover span
{
a.screenshotviewer-cover span {
width: 66px;
height: 22px;
}
a.screenshotviewer-cover b
{
a.screenshotviewer-cover b {
display: block;
width: 66px;
height: 22px;
background: url(../images/enus/screenshotviewer-picshures.gif?2) -100px center no-repeat;
}
a.screenshotviewer-original span
{
a.screenshotviewer-original span {
display: block;
width: 93px;
height: 22px;
background: url(../images/enus/screenshotviewer-picshures.gif?2) -400px center no-repeat;
}
a:hover.screenshotviewer-original span
{
a:hover.screenshotviewer-original span {
background-position: -500px center;
}
a.screenshotviewer-close span
{
a.screenshotviewer-close span {
display: block;
width: 66px;
height: 22px;
background: url(../images/enus/screenshotviewer-picshures.gif?2) 0 center no-repeat;
}
a:hover.screenshotviewer-close span
{
a:hover.screenshotviewer-close span {
background-position: -100px center;
}

View file

@ -3,23 +3,19 @@
width, left, background-position values may need adjustment!
*/
.topbar-search input.search-database
{
.topbar-search input.search-database {
background: white url(../images/eses/searchdatabase.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results
{
.listview-quicksearch input.search-within-results {
background: white url(../images/eses/searchwithinresults.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results2
{
.listview-quicksearch input.search-within-results2 {
background: white url(../images/eses/searchwithinresults2.gif) .2em center no-repeat;
}
div.modelviewer-quality div
{
div.modelviewer-quality div {
float: left;
width: 70px;
height: 22px;
@ -27,8 +23,7 @@ div.modelviewer-quality div
background: url(../images/eses/modelviewer-picshures.gif) left center no-repeat;
}
div.modelviewer-model div
{
div.modelviewer-model div {
margin-left: 40px;
margin-right: 5px;
float: left;
@ -37,96 +32,83 @@ div.modelviewer-model div
background: url(../images/eses/modelviewer-picshures.gif) -500px center no-repeat;
}
a.modelviewer-help span
{
a.modelviewer-help span {
display: block;
width: 50px;
height: 22px;
background: url(../images/eses/modelviewer-picshures.gif) -100px center no-repeat;
}
a:hover.modelviewer-help span
{
a:hover.modelviewer-help span {
background-position: -200px center;
}
a.modelviewer-close span
{
a.modelviewer-close span {
display: block;
width: 79px;
height: 22px;
background: url(../images/eses/modelviewer-picshures.gif) -300px center no-repeat;
}
a:hover.modelviewer-close span
{
a:hover.modelviewer-close span {
background-position: -400px center;
}
a.screenshotviewer-prev b
{
a.screenshotviewer-prev b {
display: block;
width: 95px;
height: 22px;
background: url(../images/eses/screenshotviewer-picshures.gif?2) -200px center no-repeat;
}
a.screenshotviewer-next b
{
a.screenshotviewer-next b {
display: block;
width: 95px;
height: 22px;
background: url(../images/eses/screenshotviewer-picshures.gif?2) -300px center no-repeat;
}
a.screenshotviewer-cover span
{
a.screenshotviewer-cover span {
width: 66px;
height: 22px;
}
a.screenshotviewer-cover b
{
a.screenshotviewer-cover b {
display: block;
width: 66px;
height: 22px;
background: url(../images/eses/screenshotviewer-picshures.gif?2) -100px center no-repeat;
}
a.screenshotviewer-original span
{
a.screenshotviewer-original span {
display: block;
width: 93px;
height: 22px;
background: url(../images/eses/screenshotviewer-picshures.gif?2) -400px center no-repeat;
}
a:hover.screenshotviewer-original span
{
a:hover.screenshotviewer-original span {
background-position: -500px center;
}
a.screenshotviewer-close span
{
a.screenshotviewer-close span {
display: block;
width: 90px;
height: 22px;
background: url(../images/eses/screenshotviewer-picshures.gif?2) 0 center no-repeat;
}
a:hover.screenshotviewer-close span
{
a:hover.screenshotviewer-close span {
background-position: -100px center;
}
#su_searchbox
{
#su_searchbox {
left: -68px !important;
}
/*
#su_weights
{
#su_weights {
width: 500px !important;
}
*/
*/

View file

@ -1,20 +1,16 @@
.topbar-search input.search-database
{
.topbar-search input.search-database {
background: white url(../images/frfr/searchdatabase.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results
{
.listview-quicksearch input.search-within-results {
background: white url(../images/frfr/searchwithinresults.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results2
{
.listview-quicksearch input.search-within-results2 {
background: white url(../images/frfr/searchwithinresults2.gif) .2em center no-repeat;
}
div.modelviewer-quality div
{
div.modelviewer-quality div {
float: left;
width: 61px;
height: 22px;
@ -22,8 +18,7 @@ div.modelviewer-quality div
background: url(../images/frfr/modelviewer-picshures.gif) left center no-repeat;
}
div.modelviewer-model div
{
div.modelviewer-model div {
margin-left: 25px;
margin-right: 10px;
float: left;
@ -32,96 +27,83 @@ div.modelviewer-model div
background: url(../images/frfr/modelviewer-picshures.gif) -500px center no-repeat;
}
a.modelviewer-help span
{
a.modelviewer-help span {
display: block;
width: 53px;
height: 22px;
background: url(../images/frfr/modelviewer-picshures.gif) -100px center no-repeat;
}
a:hover.modelviewer-help span
{
a:hover.modelviewer-help span {
background-position: -200px center;
}
a.modelviewer-close span
{
a.modelviewer-close span {
display: block;
width: 77px;
height: 22px;
background: url(../images/frfr/modelviewer-picshures.gif) -300px center no-repeat;
}
a:hover.modelviewer-close span
{
a:hover.modelviewer-close span {
background-position: -400px center;
}
a.screenshotviewer-prev b
{
a.screenshotviewer-prev b {
display: block;
width: 110px;
height: 22px;
background: url(../images/frfr/screenshotviewer-picshures.gif?2) -200px center no-repeat;
}
a.screenshotviewer-next b
{
a.screenshotviewer-next b {
display: block;
width: 89px;
height: 22px;
background: url(../images/frfr/screenshotviewer-picshures.gif?2) -320px center no-repeat;
}
a.screenshotviewer-cover span
{
a.screenshotviewer-cover span {
width: 77px;
height: 22px;
}
a.screenshotviewer-cover b
{
a.screenshotviewer-cover b {
display: block;
width: 77px;
height: 22px;
background: url(../images/frfr/screenshotviewer-picshures.gif?2) -100px center no-repeat;
}
a.screenshotviewer-original span
{
a.screenshotviewer-original span {
display: block;
width: 93px;
height: 22px;
background: url(../images/frfr/screenshotviewer-picshures.gif?2) -440px center no-repeat;
}
a:hover.screenshotviewer-original span
{
a:hover.screenshotviewer-original span {
background-position: -540px center;
}
a.screenshotviewer-close span
{
a.screenshotviewer-close span {
display: block;
width: 77px;
height: 22px;
background: url(../images/frfr/screenshotviewer-picshures.gif?2) 0 center no-repeat;
}
a:hover.screenshotviewer-close span
{
a:hover.screenshotviewer-close span {
background-position: -100px center;
}
#su_searchbox
{
#su_searchbox {
left: -49px !important;
}
/*
#su_weights
{
#su_weights {
width: 550px !important;
}
*/
*/

View file

@ -1,20 +1,16 @@
.topbar-search input.search-database
{
.topbar-search input.search-database {
background: white url(../images/ruru/searchdatabase.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results
{
.listview-quicksearch input.search-within-results {
background: white url(../images/ruru/searchwithinresults.gif) .2em center no-repeat;
}
.listview-quicksearch input.search-within-results2
{
.listview-quicksearch input.search-within-results2 {
background: white url(../images/ruru/searchwithinresults2.gif) .2em center no-repeat;
}
div.modelviewer-quality div
{
div.modelviewer-quality div {
float: left;
width: 76px;
height: 22px;
@ -22,8 +18,7 @@ div.modelviewer-quality div
background: url(../images/ruru/modelviewer-picshures.gif) left center no-repeat;
}
div.modelviewer-model div
{
div.modelviewer-model div {
margin-left: 40px;
margin-right: 10px;
float: left;
@ -32,96 +27,83 @@ div.modelviewer-model div
background: url(../images/ruru/modelviewer-picshures.gif) -500px center no-repeat;
}
a.modelviewer-help span
{
a.modelviewer-help span {
display: block;
width: 83px;
height: 22px;
background: url(../images/ruru/modelviewer-picshures.gif) -100px center no-repeat;
}
a:hover.modelviewer-help span
{
a:hover.modelviewer-help span {
background-position: -200px center;
}
a.modelviewer-close span
{
a.modelviewer-close span {
display: block;
width: 87px;
height: 22px;
background: url(../images/ruru/modelviewer-picshures.gif) -300px center no-repeat;
}
a:hover.modelviewer-close span
{
a:hover.modelviewer-close span {
background-position: -400px center;
}
a.screenshotviewer-prev b
{
a.screenshotviewer-prev b {
display: block;
width: 120px;
height: 22px;
background: url(../images/ruru/screenshotviewer-picshures.gif?2) -200px center no-repeat;
}
a.screenshotviewer-next b
{
a.screenshotviewer-next b {
display: block;
width: 112px;
height: 22px;
background: url(../images/ruru/screenshotviewer-picshures.gif?2) -330px center no-repeat;
}
a.screenshotviewer-cover span
{
a.screenshotviewer-cover span {
width: 87px;
height: 22px;
}
a.screenshotviewer-cover b
{
a.screenshotviewer-cover b {
display: block;
width: 87px;
height: 22px;
background: url(../images/ruru/screenshotviewer-picshures.gif?2) -100px center no-repeat;
}
a.screenshotviewer-original span
{
a.screenshotviewer-original span {
display: block;
width: 142px;
height: 22px;
background: url(../images/ruru/screenshotviewer-picshures.gif?2) -460px center no-repeat;
}
a:hover.screenshotviewer-original span
{
a:hover.screenshotviewer-original span {
background-position: -610px center;
}
a.screenshotviewer-close span
{
a.screenshotviewer-close span {
display: block;
width: 87px;
height: 22px;
background: url(../images/ruru/screenshotviewer-picshures.gif?2) 0 center no-repeat;
}
a:hover.screenshotviewer-close span
{
a:hover.screenshotviewer-close span {
background-position: -100px center;
}
#su_searchbox
{
#su_searchbox {
left: -59px !important;
}
/*
#su_weights
{
#su_weights {
width: 625px !important;
}
*/
*/

View file

@ -1,59 +1,59 @@
#pc-classes {
width:946px;
margin:0 auto;
padding-bottom:10px;
width:946px;
margin:0 auto;
padding-bottom:10px;
}
#pc-classes-inner {
width:874px;
margin:0 auto;
width:874px;
margin:0 auto;
text-align:center;
z-index:3;
}
#pc-classes p {
font-size:32px;
margin:0 0 16px 0;
padding:0;
text-align:center;
font-size:32px;
margin:0 0 16px 0;
padding:0;
text-align:center;
}
#pc-classes .iconmedium {
float:left;
margin-right:2px;
margin-bottom:2px;
opacity:.6666;
filter:alpha(opacity=66);
float:left;
margin-right:2px;
margin-bottom:2px;
opacity:.6666;
filter:alpha(opacity=66);
}
#pc-classes .iconmedium-gold-selected {
opacity:1;
filter:alpha(opacity=100);
opacity:1;
filter:alpha(opacity=100);
}
#pc-classes.choose {
position:relative;
padding:0;
position:relative;
padding:0;
}
#pc-classes.choose #pc-classes-outer {
width:614px;
width:614px;
}
#pc-classes.choose #pc-classes-inner {
position:absolute;
left:54px;
top:150px;
width:506px;
position:absolute;
left:54px;
top:150px;
width:506px;
}
#pc-classes.choose .iconmedium {
opacity:1;
filter:alpha(opacity=100);
opacity:1;
filter:alpha(opacity=100);
}
#pc-itself.choose .talentcalc-main {
width:614px;
height:554px!important;
margin-left:0;
width:614px;
height:554px!important;
margin-left:0;
}

72
static/css/staff.css Normal file
View file

@ -0,0 +1,72 @@
.stafffooter {
margin-top:150px;
background-color:#141414;
border-top:1px solid #404040;
padding:10px;
color:#fff;
}
.stafffooter h3 {
font-size:15px;
margin:1.5em 0 .5em 0;
padding:0;
}
.stafffooter small {
font-size:11px;
}
.stafffooter a {
color:#ffd100;
}
.stafffooter a.disclosure-on,.stafffooter a.disclosure-off {
color:#fff;
font-weight:bold;
}
.stafffooter-dev {
text-align:center;
}
#db-check-consistency #status-success {
color:#1EFF00;
}
#db-check-consistency #status-errors,#db-check-consistency #status-failed {
color:#F00;
}
#db-check-consistency #status-progress {
color:#FFF468;
}
#db-check-consistency #status-progress span {
background:url(../images/icons/ajax.gif) no-repeat right center;
padding-right:18px;
}
#db-check-consistency fieldset {
width:80%;
margin-bottom:1em;
border:1px #CCC solid;
padding:.35em .625em .75em;
padding-right:1.1em;
}
#db-check-consistency fieldset legend {
border:medium none;
float:none;
height:auto;
padding-left:2px;
padding-right:2px;
position:static;
white-space:nowrap;
font-size:120%;
font-weight:bold;
color:white;
}
#db-check-consistency textarea {
width:100%;
}

View file

@ -20,14 +20,14 @@
#tc-classes .iconmedium {
float:left;
margin-right:2px;
margin-bottom:2px;
margin-bottom:2px;
opacity:.6666;
filter:alpha(opacity=66);
filter:alpha(opacity=66);
}
#tc-classes .iconmedium-gold-selected {
opacity: 1;
filter:alpha(opacity=100);
filter:alpha(opacity=100);
}
#tc-classes.choose {
@ -47,5 +47,5 @@
#tc-classes.choose .iconmedium {
opacity:1;
filter:alpha(opacity=100);
}
filter:alpha(opacity=100);
}

View file

@ -230,7 +230,7 @@ a.talentcalc-button-summary {
.talentcalc-arrow-rightdown td { background-image:url(../images/TalentCalc/arrows/rightdown.png); }
.talentcalc-arrow-rightdown2 td { background-image:url(../images/TalentCalc/arrows/rightdown2.png); }
.talentcalc-arrow-right td { background-image:url(../images/TalentCalc/arrows/right.png); }
.talentcalc-arrow-right td { background-image:url(../images/TalentCalc/arrows/right.png); }
.talentcalc-arrow-right2 td { background-image:url(../images/TalentCalc/arrows/right2.png); }
.talentcalc-arrow-left td { background-image:url(../images/TalentCalc/arrows/left.png); }
@ -378,4 +378,4 @@ a.talentcalc-button-summary {
float: left;
position: absolute;
top: 33px;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View file

@ -863,7 +863,6 @@ function TalentCalc() {
_.className = 'talentcalc-lower-tree' + (tree + 1);
__ = $WH.ce('p');
__.className = 'rcorners';
$WH.ae(__, $WH.ce('b'));
$WH.ae(__, $WH.ce('span'));
___ = $WH.ce('a');
@ -948,7 +947,7 @@ function TalentCalc() {
___;
_divSidebar = $WH.ce('div');
_divSidebar.className = 'talentcalc-sidebar rcorners';
_divSidebar.className = 'talentcalc-sidebar';
sidebarDivInner = $WH.ce('div');
sidebarDivInner.className = 'talentcalc-sidebar-inner';
@ -1350,7 +1349,7 @@ function TalentCalc() {
__;
_divUpper = $WH.ce('div');
_divUpper.className = 'talentcalc-upper rcorners';
_divUpper.className = 'talentcalc-upper';
_divUpper.style.display = 'none';
_ = $WH.ce('span');

File diff suppressed because it is too large Load diff

20
static/js/home.js Normal file
View file

@ -0,0 +1,20 @@
$(document).ready(function () {
Menu.addButtons($('#home-menu'), mn_path);
var form = $('#home-search form');
form.submit(g_preventEmptyFormSubmission);
var inp = $('input', form);
LiveSearch.attach(inp);
inp.focus();
var btn = $('<a></a>').attr('href', 'javascript:;');
btn.click(function () {
$(this).parent('form').submit().children('input').focus()
}).appendTo(form);
$('.home-featuredbox-links a').hover(
function () { $(this).next('var').addClass('active') },
function () { $(this).next('var').removeClass('active') }
)
});

View file

@ -1,3 +1,25 @@
var l_reputation_names = [
'', // 0
"Registriertes Konto",
"Täglicher Besuch",
"Kommentar eingesendet",
"Euer Kommentar wurde positiv bewertet",
"Euer Kommentar wurde negativ bewertet",
"Screenshot eingesendet",
"Bewerten",
"Daten hochgeladen",
"Meldung akzeptiert",
"Meldung abgelehnt", // 10
"Bronzeerfolg",
"Silbererfolg",
"Golderfolg",
'Test 1',
'Test 2',
"Leitfaden zugelassen",
"Warnung durch Moderator",
"Suspendierung durch Moderator"
];
var mn_classes = [
[6,"Todesritter",,,{className:"c6",tinyIcon:"class_deathknight"}],
[11,"Druide",,,{className:"c11",tinyIcon:"class_druid"}],
@ -875,7 +897,8 @@ var mn_more = [
[6,"Profiler","?help=profiler"],
[2,"Screenshots: Tipps & Tricks","?help=screenshots-tips-tricks"],
[3,"Gewichtung von Werten","?help=stat-weighting"],
[4,"Talentrechner","?help=talent-calculator"]
[4,"Talentrechner","?help=talent-calculator"],
[7,"Markup Guide","?help=markup-guide"]
]],
[7,"Was gibt's Neues?","?whats-new"],
[,"Tolle Sachen"],
@ -2362,16 +2385,12 @@ var LANG = {
lvclass_hero: "Heldenklasse",
lvcomment_add: "Euren Kommentar hinzufügen",
// old
lvcomment_sort: "Sortieren nach: ",
lvcomment_sortdate: "Datum",
lvcomment_sortrating: "Höchstbewertete zuerst",
// < - >
sort: "Sortieren",
newestfirst_stc: "Neueste zuerst",
oldestfirst_stc: "Älteste zuerst",
highestrated_stc: "Höchstbewertete zuerst",
// new
lvcomment_patchfilter: "Nach Patch sortieren: ",
lvcomment_by: "Von ",
lvcomment_patch: "(Patch $1)",
@ -2389,6 +2408,13 @@ var LANG = {
lvcomment_report: "Melden",
lvcomment_reported: "Gemeldet!",
lvcomment_uptodate: "Zeitgemäß",
lvcomment_uptodateresponse: "Kommentar als zeitgemäß markiert",
lvcomment_outofdate: "Veraltet",
lvcomment_outofdateresponse: "Kommentar wurde als veraltet markiert.",
lvcomment_outofdateresponsequeued: "Kommentar wurde zur Veraltet-Warteschlange hinzugefügt.",
lvcomment_outofdate_tip: "Seid Ihr sicher, dass Ihr diesen Kommentar als veraltet markieren möchtet? Wenn so, bitte gebt unten einen Grund dafür an. Missbrauch wird moderiert!",
lvcomment_deleted: " (Gelöscht)",
lvcomment_purged: " (Bereinigt)",
@ -2650,7 +2676,7 @@ var LANG = {
prompt_nameweightscale: "Bitte gebt einen Namen für diese Gewichtung ein.",
prompt_tcbuild: "Kopiert folgende URL, um diesen Talentbaum zu verlinken:",
genericerror: "Ein Fehler trat auf; aktualisiert die Seite und versucht es nochmal. Wenn der Fehler bestehen bleibt, bitte meldet es bei feedback@wowhead.com",
genericerror: "Ein Fehler trat auf; aktualisiert die Seite und versucht es nochmal. Wenn der Fehler bestehen bleibt, bitte meldet es bei <a href='#contact'>feedback</a>",
tooltip_activeholiday: "Ereignis findet gerade statt",
tooltip_achievementcomplete: "Erfolg wurde von $1 am $3.$2.$4 errungen",
@ -2724,6 +2750,11 @@ var LANG = {
tooltip_uprate: "Hilfreich/lustig",
tooltip_zonelink: "Ein Klick auf diesen Link<br />bringt Euch zur Gebietsseite.",
reputationhistory: "Rufgeschichte",
reputationaction: "Aktion",
outofdate_stc: "Veraltet",
tab_pettrainer: "Trainer",
tab_feedback: "Rückmeldung",
tab_abilities: "Fähigkeiten",
@ -2857,6 +2888,35 @@ var LANG = {
tab_world: "Welt",
tab_zones: "Gebiete",
numberofupvotesreceived_tip: "Anzahl von positiven Bewertungen erhalten",
deletethisreply_stc: "Antwort löschen",
editthisreply_stc: "Diese Antwort bearbeiten",
save: "Speichern",
reportthisreply_stc: "Diese Antwort den Moderatoren melden",
deletereplyconfirmation_tip: "Seid Ihr sicher, dass Ihr diese Antwort permanent löschen möchtet?",
upvote_tip: "Dieser Kommentat ist hilfreich (klickt, um rückgängig zu machen)",
upvoted_tip: "Ihr habt diesen Kommentar positiv bewertet; klickt, um dies rückgängig zu machen",
downvote_tip: "Dieser Kommentar ist nicht hilfreich (klickt, um rückgängig zu machen)",
downvote_tip: "Dieser Kommentar ist nicht hilfreich (klickt, um rückgängig zu machen)",
commentdeleted_tip: "Dieser Kommentar wurde gelöscht; er kann nur noch von Euch und Morderatoren gesehen werden.",
addreply: "Antwort hinzufügen",
replylength1_format: "Gebt mindestens $1 Zeichen ein",
replylength2_format: "$1 weitere Zeichen&hellip;",
replylength3_format: "$1 Zeichen verbleiben",
replylength4_format: "1 Zeichen verbleibt",
votelogin_tip: "Ihr benötigt ein registriertes Konto, um Kommentare bewerten zu können. Bitte <a href=\"/account=signin\">meldet Euch an</a>, oder <a href=\"/account=signup\">registriert Euch</a>.",
voteself_tip: "Ihr könnt Euren eigenen Kommentar nicht bewerten.",
votedeleted_tip: "Gelöschte Kommentare können nicht bewertet werden.",
upvotenorep_tip: "Ihr benötigt wenigstens <b>$1</b> <a href=\"/reputation\">Ruf</a>, um Kommentare positiv bewerten zu können.",
downvotenorep_tip: "Ihr benötigt wenigstens <b>$1</b> <a href=\"/reputation\">Ruf</a>, um Kommentare negativ bewerten zu können.",
stickycomment_tip: "Dieser Kommentar wurde von einem Moderator zu einem Sticky gemacht.",
addreply_stc: "Antwort hinzufügen",
show1morereply_stc: "1 weitere Antwort anzeigen",
showmorereplies_format: "$1 weitere Antworten anzeigen",
addshow1morereply_stc: "1 weitere Antwort anzeigen/hinzufügen",
addshowmorereplies_format: "$1 weitere Antworten anzeigen/hinzufügen",
menu_browse: "Durchsuchen",
mapper_tipzoom: "Tipp: Klicken, um zu zoomen",
@ -2956,7 +3016,7 @@ var LANG = {
markup_toc: "Inhaltsverzeichnis",
markup_links: "Links",
markup_prompt: "Bitte gebt die $1-ID ein.",
markup_helpdoc: 'Ihr könnt außerdem Datenbank-Links verwenden und den Namen sowie Info automatisch anzeigen lassen.<br />Besucht unsere <a href="?help=wowhead-markup">Markup-Hilfeseite</a> für mehr Informationen.',
markup_helpdoc: 'Ihr könnt außerdem Datenbank-Links verwenden und den Namen sowie Info automatisch anzeigen lassen.<br />Besucht unsere <a href="?help=markup-guide">Markup-Hilfeseite</a> für mehr Informationen.',
markup_help1: "Was Ihr schreibt:",
markup_help2: "Was Ihr seht:",
@ -4175,6 +4235,8 @@ var LANG = {
charactersremaining_format: "$1 Zeichen verbleiben.",
reputationtip: "Rufpunkte",
// Context-less terms
added: "Hinzugefügt",
build: "Version",

View file

@ -1,3 +1,25 @@
var l_reputation_names = [
'', // 0
"Registered account",
"Daily visit",
"Posted comment",
"Your comment was upvoted",
"Your comment was downvoted",
"Submitted screenshot",
"Cast vote",
"Uploaded data",
"Report accepted",
"Report declined", // 10
"Copper Achievement",
"Silver Achievement",
"Gold Achievement",
'Test 1',
'Test 2',
"Guide approved",
"Moderator Warning",
"Moderator Suspension"
];
var mn_classes = [
[6,"Death Knight",,,{className:"c6",tinyIcon:"class_deathknight"}],
[11,"Druid",,,{className:"c11",tinyIcon:"class_druid"}],
@ -921,7 +943,8 @@ var mn_more = [
[6,"Profiler","?help=profiler"],
[2,"Screenshots: Tips & Tricks","?help=screenshots-tips-tricks"],
[3,"Stat Weighting","?help=stat-weighting"],
[4,"Talent Calculator","?help=talent-calculator"]
[4,"Talent Calculator","?help=talent-calculator"],
[7,"Markup Guide","?help=markup-guide"]
]],
[7,"What's New","?whats-new"],
[,"Goodies"],
@ -2408,16 +2431,12 @@ var LANG = {
lvclass_hero: "Hero class",
lvcomment_add: "Add your comment",
// old
lvcomment_sort: "Sort by: ",
lvcomment_sortdate: "Date",
lvcomment_sortrating: "Highest rated first",
// < - >
sort: "Sort",
newestfirst_stc: "Newest first",
oldestfirst_stc: "Oldest first",
highestrated_stc: "Highest rated",
// new
highestrated_stc: "Highest rated first",
lvcomment_patchfilter: "Filter by patch: ",
lvcomment_by: "By ",
lvcomment_patch: " (Patch $1)",
@ -2435,6 +2454,13 @@ var LANG = {
lvcomment_report: "Report",
lvcomment_reported: "Reported!",
lvcomment_uptodate: "Up to Date",
lvcomment_uptodateresponse: "Comment marked as current",
lvcomment_outofdate: "Out of Date",
lvcomment_outofdateresponse: "Comment has been marked as out of date.",
lvcomment_outofdateresponsequeued: "Comment added to out of date queue.",
lvcomment_outofdate_tip: "Are you sure you want to mark this comment as out of date? If so, enter a reason below. Abuse is subject to moderation! ",
lvcomment_deleted: " (Deleted)",
lvcomment_purged: " (Purged)",
@ -2696,7 +2722,7 @@ var LANG = {
prompt_nameweightscale: "Please provide a name for this weight scale.",
prompt_tcbuild: "Copy and paste the following URL to link to this build:",
genericerror: "An error has occurred; refresh the page and try again. If the error persists email feedback@wowhead.com",
genericerror: 'An error has occurred; refresh the page and try again. If the error persists email <a href="#contact">feedback</a>',
tooltip_activeholiday: "Event is currently in progress",
tooltip_achievementcomplete: "Achievement earned by $1 on $2/$3/$4",
@ -2770,6 +2796,11 @@ var LANG = {
tooltip_uprate: "Insightful/funny",
tooltip_zonelink: "Clicking on this link will<br />take you to the zone page.",
reputationhistory: "Reputation History",
reputationaction: "Reputation Action",
outofdate_stc: "Out of date",
tab_pettrainer: "Trainer",
tab_feedback: "Feedback",
tab_abilities: "Abilities",
@ -2903,6 +2934,35 @@ var LANG = {
tab_world: "World",
tab_zones: "Zones",
numberofupvotesreceived_tip: "Number of upvotes received",
deletethisreply_stc: "Delete this reply",
editthisreply_stc: "Edit this reply",
save: "Save",
reportthisreply_stc: "Report this reply to the moderators",
deletereplyconfirmation_tip: "Are you sure you want to permanently delete this reply?",
upvote_tip: "This comment is helpful (click again to undo)",
upvoted_tip: "You have upvoted this comment; click again to undo",
downvote_tip: "This comment is not helpful (click again to undo)",
downvote_tip: "This comment is not helpful (click again to undo)",
commentdeleted_tip: "This comment has been deleted; it is now visible only to you and to moderators.",
addreply: "Add reply",
replylength1_format: "Enter at least $1 characters",
replylength2_format: "$1 to go&hellip;",
replylength3_format: "$1 characters remaining",
replylength4_format: "1 character remaining",
votelogin_tip: "You must have a registered account to vote on comments. Please <a href=\"?account=signin\">log in</a> or <a href=\"?account=signup\">register</a>.",
voteself_tip: "You can't vote your own comment.",
votedeleted_tip: "Deleted comments cannot be voted on.",
upvotenorep_tip: "You need at least <b>$1</b> <a href=\"?reputation\">reputation</a> to upvote comments.",
downvotenorep_tip: "You need at least <b>$1</b> <a href=\"?reputation\">reputation</a> to downvote comments.",
stickycomment_tip: "This comment has been made sticky by a moderator.",
addreply_stc: "Add reply",
show1morereply_stc: "Show 1 more reply",
showmorereplies_format: "Show $1 more replies",
addshow1morereply_stc: "Add / Show 1 more reply",
addshowmorereplies_format: "Add / Show $1 more replies",
menu_browse: "Browse",
mapper_tipzoom: "Tip: Click map to zoom",
@ -3002,7 +3062,7 @@ var LANG = {
markup_toc: "Table of Contents",
markup_links: "Links",
markup_prompt: "Please enter the ID of the $1.",
markup_helpdoc: 'You can also add database links and have the name and info entered automatically.<br />For more information, please see our <a href="?help=wowhead-markup">markup help document</a>.',
markup_helpdoc: 'You can also add database links and have the name and info entered automatically.<br />For more information, please see our <a href="?help=markup-guide">markup help document</a>.',
markup_help1: "You type:",
markup_help2: "You see:",
@ -4220,6 +4280,8 @@ var LANG = {
charactersremaining_format: "$1 characters remaining.",
reputationtip: "Reputation points",
// Context-less terms
added: "Added",
build: "Build",

View file

@ -1,3 +1,25 @@
var l_reputation_names = [
'', // 0
"Cuenta registrada",
"Visita diaria",
"Comentario escrito",
"Tu comentario recibió una valoración positiva",
"Tu comentario recibió una valoración negativa",
"Captura enviada",
"Haber comentado",
"Haber subido datos",
"Reporte aceptado",
"Reporte rechazado", // 10
"Logro de Cobre",
"Logro de Plata",
"Logro de Oro",
'Test 1',
'Test 2',
"Guía aprobada",
"Aviso de moderador",
"Suspensión por moderador"
];
var mn_classes = [
[6,"Caballero de la muerte",,,{className:"c6",tinyIcon:"class_deathknight"}],
[11,"Druida",,,{className:"c11",tinyIcon:"class_druid"}],
@ -875,7 +897,8 @@ var mn_more = [
[6,"Perfiles","?help=profiler"],
[2,"Capturas de pantalla: Sugerencias y trucos","?help=screenshots-tips-tricks"],
[3,"Medición de atributos","?help=stat-weighting"],
[4,"Calculadora de talentos","?help=talent-calculator"]
[4,"Calculadora de talentos","?help=talent-calculator"],
[7,"Markup Guide","?help=markup-guide"]
]],
[7,"Novedades","?whats-new"],
[,"Extras para tu sitio"],
@ -2364,16 +2387,12 @@ var LANG = {
lvclass_hero: "Clase héroe",
lvcomment_add: "Añade tu comentario",
// old
lvcomment_sort: "Ordenar por: ",
lvcomment_sortdate: "Fecha",
lvcomment_sortrating: "Valoración más alta primero",
// < - >
sort: "Ordenar",
newestfirst_stc: "Los más recientes primero",
oldestfirst_stc: "Los más antiguos primero",
highestrated_stc: "Valoración más alta primero",
// new
lvcomment_patchfilter: "Filtrar por parche: ",
lvcomment_by: "Por ",
lvcomment_patch: " (Parche $1)",
@ -2391,6 +2410,13 @@ var LANG = {
lvcomment_report: "Reportar",
lvcomment_reported: "¡Reportado!",
lvcomment_uptodate: "Actualizado",
lvcomment_uptodateresponse: "El comentario se ha marcado como actual",
lvcomment_outofdate: "Desactualizado",
lvcomment_outofdateresponse: "El comentario fue marcado como desactualizado.",
lvcomment_outofdateresponsequeued: "El comentario se agregó a la cola de desactualizados.",
lvcomment_outofdate_tip: "¿Estás seguro de que deseas marcar este comentario como desactualizado? Si es así, ingresa un motivo a continuación. ¡El abuso está sujeto a moderación!",
lvcomment_deleted: " (Suprimido)",
lvcomment_purged: " (Eliminado)",
@ -2652,7 +2678,7 @@ var LANG = {
prompt_nameweightscale: "Por favor, introduce un nombre para esta escala de valores.",
prompt_tcbuild: "Copia y pega el siguiente enlace para esta disposición de talentos:",
genericerror: "Ha ocurrido un error; refresca la página e inténtalo de nuevo. Si el error persiste manda un correo a feedback@wowhead.com",
genericerror: "Ha ocurrido un error; refresca la página e inténtalo de nuevo. Si el error persiste manda un correo a <a href='#contact'>feedback</a>",
tooltip_activeholiday: "El evento está en progreso actualmente",
tooltip_achievementcomplete: "Logro conseguido por $1 el $2/$3/$4",
@ -2726,6 +2752,11 @@ var LANG = {
tooltip_uprate: "Útil/gracioso",
tooltip_zonelink: "Hacer click en este enlace, te<br />llevará a la página de la zona.",
reputationhistory: "Historial de reputación",
reputationaction: "Acción de reputación",
outofdate_stc: "Desactualizado",
tab_pettrainer: "[Trainer]",
tab_feedback: "Feedback",
tab_abilities: "Habilidades",
@ -2859,6 +2890,35 @@ var LANG = {
tab_world: "Mundo",
tab_zones: "Zonas",
numberofupvotesreceived_tip: "Número de valoraciones positivas recibidas ",
deletethisreply_stc: "Borrar esta respuesta",
editthisreply_stc: "Editar esta respuesta",
save: "Guardar",
reportthisreply_stc: "Reportarles esta respuesta a los moderadores",
deletereplyconfirmation_tip: "¿Estás seguro de que permanentemente quieres eliminar esta respuesta?",
upvote_tip: "Este comentario es útil (haz clic de nuevo para deshacer)",
upvoted_tip: "Has dado este comentario una valoración positiva; haz clic de nuevo para deshacerla.",
downvote_tip: "Este comentario no es útil (haz clic de nuevo para deshacer)",
downvote_tip: "Este comentario no es útil (haz clic de nuevo para deshacer)",
commentdeleted_tip: "Este comentario ha sido borrado; ahora sólo les es visible a ti y a los moderadores.",
addreply: "Añadir respuesta",
replylength1_format: "Introduce al menos $1 caracteres",
replylength2_format: "$1 carácter(es) restante(s)&hellip;",
replylength3_format: "$1 caracteres restantes",
replylength4_format: "1 carácter restante",
votelogin_tip: "Debes crear una cuenta para votar en los comentarios. <a href=\"?account=signin\">Inicia sesión</a> o <a href=\"?account=signup\">crea una cuenta</a>.",
voteself_tip: "No puedes votar en tu propio comentario.",
votedeleted_tip: "No se puede votar en los comentarios borrados.",
upvotenorep_tip: "Necesitas una <b>$1</b> <a href=\"/reputation\">reputación</a> de al menos <b>$1</b> para dar una valoración positiva a los comentarios. ",
downvotenorep_tip: "Necesitas una <a href=\"/reputation\">reputación</a> de al menos <b>$1</b> para dar una valoración negativa a los comentarios.",
stickycomment_tip: "Un moderador ha etiquetado este comentario como permanente.",
addreply_stc: "Añadir respuesta",
show1morereply_stc: "Mostrar una más respuesta",
showmorereplies_format: "Mostrar $1 respuestas adicionales",
addshow1morereply_stc: "Añadir / Mostrar 1 respuesta más",
addshowmorereplies_format: "Añadir / mostrar más respuestas",
menu_browse: "Consultar",
mapper_tipzoom: "Sugerencia: Haz click en el mapa para enfocar",
@ -2958,7 +3018,7 @@ var LANG = {
markup_toc: "Tabla de contenidos",
markup_links: "Enlaces",
markup_prompt: "Por favor introduce la ID del $1.",
markup_helpdoc: 'También puedes añadir enlaces a la base de datos y tener el nombre y la información introducidas automáticamente.<br />Para más información, visita nuestro <a href="?help=wowhead-markup">documento de ayuda de estilo</a>.',
markup_helpdoc: 'También puedes añadir enlaces a la base de datos y tener el nombre y la información introducidas automáticamente.<br />Para más información, visita nuestro <a href="?help=markup-guide">documento de ayuda de estilo</a>.',
markup_help1: "Tú escribes:",
markup_help2: "Tú ves:",
@ -4135,6 +4195,8 @@ var LANG = {
charactersremaining_format: "$1 caracteres restantes.",
reputationtip: "Puntos de reputación",
// Context-less terms
added: "Añadido",
build: "Versión",

View file

@ -1,3 +1,25 @@
var l_reputation_names = [
'', // 0
"Compte enregistré",
"Visite journalière",
"Commentaire posté",
"Votre commentaire a reçu des votes positifs",
"Votre commentaire a reçu des votes négatifs",
"Capture d'écran envoyée",
"Voter",
"Données téléchargées",
"Signalement accepté",
"Signalement refusé", // 10
"Haut-fait de bronze",
"Haut-fait d'argent",
"Haut-fait d'or",
'Test 1',
'Test 2',
"Guide approuvé",
"Avertissement d'un modérateur",
"Suspension par un modérateur"
];
var mn_classes = [
[6,"Chevalier de la mort",,,{className:"c6",tinyIcon:"class_deathknight"}],
[11,"Druide",,,{className:"c11",tinyIcon:"class_druid"}],
@ -875,7 +897,8 @@ var mn_more = [
[6,"Profiler","?help=profiler"],
[2,"Captures d'écran : Trucs et astuces","?help=screenshots-tips-tricks"],
[3,"Échelles de valeurs","?help=stat-weighting"],
[4,"Calculateur de talents","?help=talent-calculator"]
[4,"Calculateur de talents","?help=talent-calculator"],
[7,"Markup Guide","?help=markup-guide"]
]],
[7,"Quoi de neuf?","?whats-new"],
[,"Extras pour votre site"],
@ -2352,16 +2375,12 @@ var LANG = {
lvclass_hero: "Classe de héros",
lvcomment_add: "Ajouter votre commentaire",
// old
lvcomment_sort: "Trier par : ",
lvcomment_sortdate: "Date",
lvcomment_sortrating: "Le plus haut noté",
// < - >
sort: "Trier",
newestfirst_stc: "Le plus récent en premier",
oldestfirst_stc: "Le plus ancien en premier",
highestrated_stc: "Le plus haut noté",
// new
lvcomment_patchfilter: "Filtrer par mise-à-jour : ",
lvcomment_by: "Par ",
lvcomment_patch: " (Mise à jour $1)",
@ -2379,6 +2398,13 @@ var LANG = {
lvcomment_report: "Rapporter",
lvcomment_reported: "Rapporté !",
lvcomment_uptodate: "À Jour",
lvcomment_uptodateresponse: "Commentaire marqué comme à jour",
lvcomment_outofdate: "Obsolète",
lvcomment_outofdateresponse: "Le commentaire a été marqué obsolète.",
lvcomment_outofdateresponsequeued: "Commentaire ajouté à la file des obsolètes.",
lvcomment_outofdate_tip: "Étes-vous sûr(e) de vouloir marquer ce commentaire comme obsolète. Si oui, entrez une raison ci-dessous. Tout abus est susceptible de modération !",
lvcomment_deleted: " (Supprimé)",
lvcomment_purged: " (Effacé)",
@ -2640,7 +2666,7 @@ var LANG = {
prompt_nameweightscale: "Veuillez fournir un nom pour cette échelle de valeurs.",
prompt_tcbuild: "Copiez-coller l'URL suivante pour créer un lien vers cet arbre de talents :",
genericerror: "Une erreur est survenue; Actualisez la page et essayez à nouveau. Si l'erreur persiste, envoyez un email à feedback@wowhead.com",
genericerror: "Une erreur est survenue; Actualisez la page et essayez à nouveau. Si l'erreur persiste, envoyez un email à <a href='#contact'>feedback</a>",
tooltip_activeholiday: "L'évènement est présentement en cours",
tooltip_achievementcomplete: "Haut-fait reçu par $1 le $2/$3/$4",
@ -2714,6 +2740,11 @@ var LANG = {
tooltip_uprate: "Intéressant/drôle",
tooltip_zonelink: "Cliquer sur ce lien vous amènera<br />à la page de la zone correspondante.",
reputationhistory: "Historique de réputation",
reputationaction: "Action de réputation",
outofdate_stc: "Périmé",
tab_pettrainer: "Entraîneur",
tab_feedback: "Feedback",
tab_abilities: "Techniques",
@ -2847,6 +2878,35 @@ var LANG = {
tab_world: "Monde",
tab_zones: "Zones",
numberofupvotesreceived_tip: "Nombre de votes positifs reçus",
deletethisreply_stc: "Effacer cette réponse",
editthisreply_stc: "Éditer cette réponse",
save: "Sauver",
reportthisreply_stc: "Signaler cette réponse aux modérateurs",
deletereplyconfirmation_tip: "Êtes-vous sûr(e) de vous vouloir effacer définitivement cette réponse ?",
upvote_tip: "Ce commentaire est utile (cliquez à nouveau pour annuler)",
upvoted_tip: "Vous avez émis un vote positif pour ce commentaire ; cliquez à nouveau pour annuler",
downvote_tip: "Ce commentaire n'est pas utile (cliquez à nouveau pour annuler)",
downvote_tip: "Ce commentaire n'est pas utile (cliquez à nouveau pour annuler)",
commentdeleted_tip: "Ce commentaire a été effacé ; il n'est plus visible que par vous et par les modérateurs.",
addreply: "Ajouter une réponse",
replylength1_format: "Entrez au moins $1 caractères",
replylength2_format: "Encore $1 caractères&hellip;",
replylength3_format: "$1 caractères restants",
replylength4_format: "1 caractère restant",
votelogin_tip: "Vous devez avoir un compte pour voter sur les commentaires. Veuillez <a href=\"?account=signin\">vous connecter</a> ou <a href=\"?account=signup\">vous inscrire</a>.",
voteself_tip: "Vous ne pouvez pas voter sur votre propre commentaire.",
votedeleted_tip: "Vous ne pouvez pas voter pour les commentaires effacés.",
upvotenorep_tip: "Vous avez besoin d'au moins <b>$1</b> <a href=\"/reputation\">en réputation</a> pour émettre des votes positifs pour les commentaires.",
downvotenorep_tip: "Vous avez besoin d'au moins <b>$1</b> <a href=\"/reputation\">en réputation</a> pour émettre des votes négatifs pour les commentaires.",
stickycomment_tip: "Ce commentaire a été mis en évidence (sticky) par un modérateur.",
addreply_stc: "Ajouter une réponse",
show1morereply_stc: "Afficher 1 réponse de plus",
showmorereplies_format: "Afficher $1 réponses de plus",
addshow1morereply_stc: "Ajouter / Montrer 1 réponse de plus",
addshowmorereplies_format: "Ajouter / Montrer $1 réponses de plus",
menu_browse: "Consulter",
mapper_tipzoom: "Astuce : Cliquer pour agrandir la carte",
@ -2946,7 +3006,7 @@ var LANG = {
markup_toc: "Table des matières",
markup_links: "Liens",
markup_prompt: "Veuillez entrer le ID de $1.",
markup_helpdoc: 'Vous pouvez aussi ajouter des liens vers la base de données et avoir le noms et les informations ajoutées automatiquement.<br />Pour plus d\'informations, consultez notre <a href="?help=wowhead-markup>document d\'aide des balises</a>.',
markup_helpdoc: 'Vous pouvez aussi ajouter des liens vers la base de données et avoir le noms et les informations ajoutées automatiquement.<br />Pour plus d\'informations, consultez notre <a href="?help=markup-guide>document d\'aide des balises</a>.',
markup_help1: "Vous tapez :",
markup_help2: "Vous voyez :",
@ -4125,6 +4185,8 @@ var LANG = {
charactersremaining_format: "$1 caractères restants.",
reputationtip: "Points de réputation",
// Context-less terms
added: "Ajouté",
build: "Version",

View file

@ -1,3 +1,25 @@
var l_reputation_names = [
'', // 0
"Зарегистрированный аккаунт",
"Ежедневное посещение",
"Отправлен комментарий",
"Рейтинг вашего комментария увеличился",
"Рейтинг вашего комментария уменьшился",
"Отправлено изображение",
"Голос отдан",
"Загружены данные",
"Жалоба принята",
"Жалоба отклонена", // 10
"Бронзовое достижение",
"Серебряное достижение",
"Золотое достижение",
"Test 1",
"Test 2",
"Гайд одобрен",
"Пожаловаться модератору",
"[Moderator Suspension]"
];
var mn_classes = [
[6,"Рыцарь смерти",,,{className:"c6",tinyIcon:"class_deathknight"}],
[11,"Друид",,,{className:"c11",tinyIcon:"class_druid"}],
@ -875,7 +897,8 @@ var mn_more = [
[6,"Профили персонажей","?help=profiler"],
[2,"Скриншоты: Секреты мастерства","?help=screenshots-tips-tricks"],
[3,"Значимость характеристик","?help=stat-weighting"],
[4,"Расчёт талантов","?help=talent-calculator"]
[4,"Расчёт талантов","?help=talent-calculator"],
[7,"Markup Guide","?help=markup-guide"]
]],
[7,"Новости","?whats-new"],
[,"Для вашего сайта"],
@ -2352,16 +2375,12 @@ var LANG = {
lvclass_hero: "Героический класс",
lvcomment_add: "Разместить комментарий",
// old
lvcomment_sort: "Сортировать: ",
lvcomment_sortdate: "По дате",
lvcomment_sortrating: "По рейтингу",
// < - >
sort: "Сортировка",
newestfirst_stc: "Сначала новые",
oldestfirst_stc: "Сначала старые",
highestrated_stc: "По рейтингу",
// new
lvcomment_patchfilter: "Обновление: ",
lvcomment_by: "От ",
lvcomment_patch: " (Обновление $1)",
@ -2379,6 +2398,13 @@ var LANG = {
lvcomment_report: "Жалоба",
lvcomment_reported: "Получена жалоба!",
lvcomment_uptodate: "До настоящего времени",
lvcomment_uptodateresponse: "Комментарий помечен, как актуальный",
lvcomment_outofdate: "Устарело",
lvcomment_outofdateresponse: "Комментарий был помечен, как устаревший.",
lvcomment_outofdateresponsequeued: "Комментарий помещен в очередь на удаление как устаревший.",
lvcomment_outofdate_tip: "Вы уверены, что хотите пометить этот комментарий, как устаревший? Если да, укажите причину. Ваша заявка пройдет модерацию.",
lvcomment_deleted: " (Удалено)",
lvcomment_purged: " (Удалено)",
@ -2640,7 +2666,7 @@ var LANG = {
prompt_nameweightscale: "Введите имя для раскладки значимости характеристик.",
prompt_tcbuild: "Скопируйте и вставьте следующий URL, чтобы получить ссылку на эту раскладку:",
genericerror: "Произошла ошибка; обновите страницу и попробуйте снова. Если ситуация повторяется, отправьте сообщение на feedback@wowhead.com",
genericerror: "Произошла ошибка; обновите страницу и попробуйте снова. Если ситуация повторяется, отправьте сообщение на <a href='#contact'>feedback</a>",
tooltip_activeholiday: "Событие активно в данный момент",
tooltip_achievementcomplete: "Достижение получено $1 $2/$3/$4",
@ -2714,6 +2740,11 @@ var LANG = {
tooltip_uprate: "Высокий",
tooltip_zonelink: "Щелкнув по этой ссылке вы<br />попадете на страницу местности.",
reputationhistory: "История репутации",
reputationaction: "Действие Репутации",
outofdate_stc: "Устарело",
tab_pettrainer: "Учитель",
tab_feedback: "Отзыв",
tab_abilities: "Способности",
@ -2847,6 +2878,35 @@ var LANG = {
tab_world: "Игровой мир",
tab_zones: "Местности",
numberofupvotesreceived_tip: "Голосов получено",
deletethisreply_stc: "Удалить этот ответ",
editthisreply_stc: "Редактировать этот ответ",
save: "Сохранить",
reportthisreply_stc: "Отправить этот ответ на модерацию",
deletereplyconfirmation_tip: "Вы уверены, что хотите удалить этот ответ без возможности восстановления?",
upvote_tip: "Этот комментарий полезен (нажмите еще раз, чтобы отменить)",
upvoted_tip: "Вы проголосовали за повышение этого комментария, нажмите снова для отмены",
downvote_tip: "Этот комментарий бесполезен (нажмите снова для отмены)",
downvote_tip: "Этот комментарий бесполезен (нажмите снова для отмены)",
commentdeleted_tip: "Этот комментарий был удален, теперь он видим только вам и модераторам.",
addreply: "Ответить",
replylength1_format: "Введите еще по меньшей мере $1 символов",
replylength2_format: "Еще символов требуется: $1",
replylength3_format: "Осталось символов: $1",
replylength4_format: "Осталось символов: 1",
votelogin_tip: "Вы должны иметь зарегистрированный аккаунт, чтобы голосовать за комментарии. Пожалуйста, <a href=\"?account=signin\">войдите</a> или <a href=\"?account=signin\">зарегистрируйтесь</a>.",
voteself_tip: "Вы не можете голосовать за свой комментарий.",
votedeleted_tip: "Голосование за удаленные комментарии невозможно.",
upvotenorep_tip: "Вам необходимо иметь по меньшей мере <b>$1</b> <a href=\"/reputation\">репутации</a>, чтобы голосовать за комментарии.",
downvotenorep_tip: "Вам нужно еще по меньшей мере <b>$1</b> <a href=\"/reputation\">репутации</a>, чтобы понижать комментарии.",
stickycomment_tip: "Этот комментарий был закреплен модератором.",
addreply_stc: "Ответить",
show1morereply_stc: "Показать еще один ответ",
showmorereplies_format: "Показать еще $1 комментариев",
addshow1morereply_stc: "Добавить / показать еще комментарии",
addshowmorereplies_format: "Добавить / Показать еще $1 комментариев",
menu_browse: "Просмотр",
mapper_tipzoom: "Щелкните по карте для увеличения",
@ -2946,7 +3006,7 @@ var LANG = {
markup_toc: "Содержание",
markup_links: "Ссылки",
markup_prompt: "Введите ID для создания ссылки на $1.",
markup_helpdoc: "Вы также можете добавить ссылки из базы данных с автоматической подстановкой имен и другой информации.<br />Чтобы узнать больше, посетите нашу <a href=\"/help=wowhead-markup\">страницу помощи</a>.",
markup_helpdoc: "Вы также можете добавить ссылки из базы данных с автоматической подстановкой имен и другой информации.<br />Чтобы узнать больше, посетите нашу <a href=\"/help=markup-guide\">страницу помощи</a>.",
markup_help1: "До",
markup_help2: "После",
@ -4126,6 +4186,8 @@ var LANG = {
charactersremaining_format: "Осталось символов: $1",
reputationtip: "Очки репутации",
// Context-less terms
added: "Добавлено",
build: "Версия",

1
static/js/staff.js Normal file

File diff suppressed because one or more lines are too long

View file

@ -81,7 +81,7 @@ function us_addProfilesTab(e) {
}
}
Listview.funcBox.beforeUserComments = function () {
if (g_user.roles & U_GROUP_COMMENTS_MODERATOR) {
if (us_isOwnProfile() || (g_user.roles & U_GROUP_COMMENTS_MODERATOR)) {
this.mode = 1;
this.createCbControls = function (b) {
var a = $WH.ce("input");
@ -146,7 +146,7 @@ Listview.funcBox.beforeUserComments = function () {
}
}
this.customFilter = function (b, a) {
return (g_user.roles & U_GROUP_COMMENTS_MODERATOR ? a < 250 : !(b.deleted || b.purged || b.removed))
return (us_isOwnProfile() || (g_user.roles & U_GROUP_COMMENTS_MODERATOR) ? 1 : !(b.deleted || b.purged || b.removed))
};
this.onAfterCreate = function () {
if (this.nRowsVisible == 0) {

View file

@ -13,15 +13,10 @@ if (User::$id > 0):
</ul>
<form name="addcomment" action="?comment=add&amp;type=<?php echo $this->type.'&amp;typeid='.$this->typeId; ?>" method="post" onsubmit="return co_validateForm(this)">
<div id="replybox-generic" style="display: none">
The answer to a comment from <span></span>. &nbsp;<a href="javascript:;" onclick="co_cancelReply()">Cancel</a>
<div class="pad"></div>
</div>
<div id="funcbox-generic"></div>
<script type="text/javascript">Listview.funcBox.coEditAppend($WH.ge('funcbox-generic'), {body: ''}, 1)</script>
<script type="text/javascript">Listview.funcBox.coEditAppend($('#funcbox-generic'), {body: ''}, 1)</script>
<div class="pad"></div>
<input type="submit" value="Submit"></input>
<input type="hidden" name="replyto" value=""></input>
</form>
</div>

View file

@ -13,15 +13,10 @@ if (User::$id > 0):
</ul>
<form name="addcomment" action="?comment=add&amp;type=<?php echo $this->type.'&amp;typeid='.$this->typeId; ?>" method="post" onsubmit="return co_validateForm(this)">
<div id="replybox-generic" style="display: none">
The answer to a comment from <span></span>. &nbsp;<a href="javascript:;" onclick="co_cancelReply()">Cancel</a>
<div class="pad"></div>
</div>
<div id="funcbox-generic"></div>
<script type="text/javascript">Listview.funcBox.coEditAppend($WH.ge('funcbox-generic'), {body: ''}, 1)</script>
<script type="text/javascript">Listview.funcBox.coEditAppend($('#funcbox-generic'), {body: ''}, 1)</script>
<div class="pad"></div>
<input type="submit" value="Submit"></input>
<input type="hidden" name="replyto" value=""></input>
</form>
</div>

View file

@ -13,15 +13,10 @@ if (User::$id > 0):
</ul>
<form name="addcomment" action="?comment=add&amp;type=<?php echo $this->type.'&amp;typeid='.$this->typeId; ?>" method="post" onsubmit="return co_validateForm(this)">
<div id="replybox-generic" style="display: none">
Antwort zu einem Kommentar von <span></span>. &nbsp;<a href="javascript:;" onclick="co_cancelReply()">Abbrechen</a>
<div class="pad"></div>
</div>
<div id="funcbox-generic"></div>
<script type="text/javascript">Listview.funcBox.coEditAppend($WH.ge('funcbox-generic'), {body: ''}, 1)</script>
<script type="text/javascript">Listview.funcBox.coEditAppend($('#funcbox-generic'), {body: ''}, 1)</script>
<div class="pad"></div>
<input type="submit" value="Absenden"></input>
<input type="hidden" name="replyto" value=""></input>
</form>
</div>

View file

@ -13,15 +13,10 @@ if (User::$id > 0):
</ul>
<form name="addcomment" action="?comment=add&amp;type=<?php echo $this->type.'&amp;typeid='.$this->typeId; ?>" method="post" onsubmit="return co_validateForm(this)">
<div id="replybox-generic" style="display: none">
The answer to a comment from <span></span>. &nbsp;<a href="javascript:;" onclick="co_cancelReply()">Cancel</a>
<div class="pad"></div>
</div>
<div id="funcbox-generic"></div>
<script type="text/javascript">Listview.funcBox.coEditAppend($WH.ge('funcbox-generic'), {body: ''}, 1)</script>
<script type="text/javascript">Listview.funcBox.coEditAppend($('#funcbox-generic'), {body: ''}, 1)</script>
<div class="pad"></div>
<input type="submit" value="Submit"></input>
<input type="hidden" name="replyto" value=""></input>
</form>
</div>

View file

@ -13,15 +13,10 @@ if (User::$id > 0):
</ul>
<form name="addcomment" action="?comment=add&amp;type=<?php echo $this->type.'&amp;typeid='.$this->typeId; ?>" method="post" onsubmit="return co_validateForm(this)">
<div id="replybox-generic" style="display: none">
The answer to a comment from <span></span>. &nbsp;<a href="javascript:;" onclick="co_cancelReply()">Cancel</a>
<div class="pad"></div>
</div>
<div id="funcbox-generic"></div>
<script type="text/javascript">Listview.funcBox.coEditAppend($WH.ge('funcbox-generic'), {body: ''}, 1)</script>
<script type="text/javascript">Listview.funcBox.coEditAppend($('#funcbox-generic'), {body: ''}, 1)</script>
<div class="pad"></div>
<input type="submit" value="Submit"></input>
<input type="hidden" name="replyto" value=""></input>
</form>
</div>

View file

@ -1,4 +1,4 @@
<div id="footer">
<div class="footer">
<?php
if (User::isInGroup(U_GROUP_EMPLOYEE) && ($this->time || isset($this->mysql) || $this->isCached)):
echo " <table style=\"margin:auto;\">\n";
@ -21,8 +21,8 @@ endif;
?>
</div>
</div><!-- #wrapper .nosidebar -->
</div><!-- #layout -->
<!--[if lte IE 6]></td><th class="ie6layout-th"></th></tr></table><![endif]-->
</div<!-- #layout-inner -->
</div><!-- #layout .nosidebar -->
<noscript>
<div id="noscript-bg"></div>

View file

@ -1,15 +1,17 @@
<title><?php echo htmlentities(implode(' - ', $this->title)); ?></title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<link rel="SHORTCUT ICON" href="<?php echo STATIC_URL; ?>/images/logos/favicon.ico">
<link rel="SHORTCUT ICON" href="<?php echo STATIC_URL; ?>/images/logos/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="<?php echo STATIC_URL; ?>/download/searchplugins/aowow.xml" title="Aowow" />
<link rel="stylesheet" type="text/css" href="<?php echo STATIC_URL.'/css/basic.css?'.AOWOW_REVISION; ?>" />
<link rel="stylesheet" type="text/css" href="<?php echo STATIC_URL.'/css/global.css?'.AOWOW_REVISION; ?>" />
<link rel="stylesheet" type="text/css" href="<?php echo STATIC_URL.'/css/aowow.css?'.AOWOW_REVISION; ?>" />
<link rel="stylesheet" type="text/css" href="<?php echo STATIC_URL.'/css/locale_'.User::$localeString.'.css?'.AOWOW_REVISION; ?>" />
<!--[if IE]><link rel="stylesheet" type="text/css" href="<?php echo STATIC_URL.'/css/global_ie.css?'.AOWOW_REVISION; ?>" /><![endif]-->
<!--[if lte IE 6]><link rel="stylesheet" type="text/css" href="<?php echo STATIC_URL.'/css/global_ie6.css?'.AOWOW_REVISION; ?>" /><![endif]-->
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="<?php echo STATIC_URL.'/css/global_ie67.css?'.AOWOW_REVISION; ?>" /><![endif]-->
<?php
if (User::isInGroup(U_GROUP_STAFF)):
echo ' <link rel="stylesheet" type="text/css" href="'.STATIC_URL.'/css/staff.css?'.AOWOW_REVISION."\" />\n";
endif;
foreach ($this->css as $css):
if (!empty($css['string'])):
echo ' <style type="text/css">'.$css['string']."</style>\n";
@ -37,6 +39,10 @@ endif;
<script src="<?php echo STATIC_URL.'/js/global.js?'.AOWOW_REVISION; ?>" type="text/javascript"></script>
<script src="<?php echo STATIC_URL.'/js/Markup.js?'.AOWOW_REVISION; ?>" type="text/javascript"></script>
<?php
if (User::isInGroup(U_GROUP_STAFF)):
echo ' <script src="'.STATIC_URL.'/js/staff.js?'.AOWOW_REVISION."\" type=\"text/javascript\"></script>\n";
endif;
foreach ($this->js as $js):
if (!empty($js)):
echo ' <script src="'.($js[0] == '?' ? $js.'&' : STATIC_URL.'/js/'.$js.'?').AOWOW_REVISION."\" type=\"text/javascript\"></script>\n";

View file

@ -4,26 +4,19 @@
<?php $this->brick('head'); ?>
</head>
<body>
<body<?php echo User::isPremium() ? ' class="premium-logo"' : null; ?>>
<div id="layers"></div>
<!--[if lte IE 6]><table id="ie6layout"><tr><th class="ie6layout-th"></th><td id="ie6layout-td"><div id="ie6layout-div"></div><![endif]-->
<div id="layout">
<div id="header">
<div class="layout nosidebar" id="layout">
<div class="layout-inner" id="layout-inner">
<div class="header" id="header">
<div id="header-logo">
<a href="."></a>
<a class="header-logo" href="."></a>
<h1><?php echo htmlentities($this->name); ?></h1>
</div>
</div>
<div id="wrapper" class="nosidebar">
<div id="toptabs">
<div id="toptabs-inner">
<div id="toptabs-right">
<?php $this->brick('headerMenu'); ?>
</div>
<div id="toptabs-generic"></div>
<div class="clear"></div>
</div>
</div>
<div id="wrapper" class="wrapper">
<div class="toplinks linklist"><?php $this->brick('headerMenu'); ?></div>
<div class="toptabs" id="toptabs"></div>
<div class="topbar" id="topbar">
<div class="topbar-search"><form action="."><a href="javascript:;"></a><input name="search" size="35" value="" id="livesearch-generic" /></form></div>
<div class="topbar-browse" id="topbar-browse"></div>

View file

@ -3,7 +3,26 @@
if (!empty($this->infobox)):
?>
<tr><th id="infobox-quick-facts"><?php echo Lang::$main['quickFacts']; ?></th></tr>
<tr><td><div class="infobox-spacer"></div><div id="infobox-contents0"></div></td></tr>
<tr><td>
<div class="infobox-spacer"></div>
<div id="infobox-contents0"></div>
<script type="text/javascript">
Markup.printHtml("<?php echo Util::jsEscape($this->infobox); ?>", "infobox-contents0", { allow: Markup.CLASS_STAFF, dbpage: true });
</script>
</td></tr>
<?php
endif;
if (!empty($this->contributions)):
?>
<tr><th id="infobox-contributions"><?php echo Lang::$main['contributions']; ?></th></tr>
<tr><td>
<div class="infobox-spacer"></div>
<div id="infobox-contents1"></div>
<script type="text/javascript">
Markup.printHtml('<?php echo Util::jsEscape($this->contributions); ?>', 'infobox-contents1', { allow: Markup.CLASS_STAFF });
</script>
</td></tr>
<?php
endif;
@ -27,11 +46,4 @@ else:
echo " </table>\n";
endif;
if (!empty($this->infobox)):
?>
<script type="text/javascript">
Markup.printHtml("<?php echo Util::jsEscape($this->infobox); ?>", "infobox-contents0", { allow: Markup.CLASS_STAFF, dbpage: true });
</script>
<?php
endif;
?>
?>

View file

@ -0,0 +1,7 @@
var _ = g_itemsets;
<?php
foreach ($vars as $id => $data):
echo ' _['.$id.']={name_'.User::$localeString.':\''.Util::jsEscape($data['name']).'\'};';
endforeach;
?>

View file

@ -0,0 +1,7 @@
var _ = g_users;
<?php
foreach ($vars as $name => $data):
echo " _['".$name."']=".json_encode($data, JSON_NUMERIC_CHECK).';';
endforeach;
?>

View file

@ -1,8 +1,9 @@
new Listview({
template:'commentpreview',
id: 'comments',
<?php
echo !isset($params['parent']) ? "parent:'lv-generic'," : null;
echo !isset($params['id']) ? "id:'comments'," : null;
echo !isset($params['name']) ? "name:LANG.tab_latestcomments," : null;
echo !isset($params['parent']) ? "parent:'lv-generic'," : null;
foreach ($params as $k => $v):
if ($v[0] == '$'):
@ -11,19 +12,6 @@ new Listview({
echo $k.":'".$v."',";
endif;
endforeach;
/* data:
{
id:{$curr.id},
user:'{$curr.user|escape:"javascript"}',
date:'{$curr.date|date_format:"%Y/%m/%d %H:%M:%S"}',
preview:'{$curr.preview|escape:"javascript"}',
subject:'{$curr.subject|escape:"javascript"}',
rating: {$curr.rating},
deleted:{$curr.deleted},
type:{$curr.type},
typeId:{$curr.typeId}
}
*/
?>
data:<?php echo json_encode(array_values($data), JSON_NUMERIC_CHECK); ?>
});

View file

@ -0,0 +1,17 @@
new Listview({
template:'replypreview',
<?php
echo !isset($params['id']) ? "id:'comment-replies'," : null;
echo !isset($params['name']) ? "name:LANG.tab_commentreplies," : null;
echo !isset($params['parent']) ? "parent:'lv-generic'," : null;
foreach ($params as $k => $v):
if ($v[0] == '$'):
echo $k.':'.substr($v, 1).',';
elseif ($v):
echo $k.":'".$v."',";
endif;
endforeach;
?>
data:<?php echo json_encode(array_values($data), JSON_NUMERIC_CHECK); ?>
});

View file

@ -0,0 +1,17 @@
new Listview({
template:'reputationhistory',
<?php
echo !isset($params['id']) ? "id:'reputation'," : null;
echo !isset($params['name']) ? "name:LANG.tab_reputation," : null;
echo !isset($params['parent']) ? "parent:'lv-generic'," : null;
foreach ($params as $k => $v):
if ($v[0] == '$'):
echo $k.':'.substr($v, 1).',';
elseif ($v):
echo $k.":'".$v."',";
endif;
endforeach;
?>
data:<?php echo json_encode(array_values($data), JSON_NUMERIC_CHECK); ?>
});

View file

@ -8,15 +8,18 @@
$this->brick('announcement');
$this->brick('pageTemplate');
$this->brick('infobox');
?>
<script type="text/javascript">var g_pageInfo = { username: '<?php echo Util::jsEscape($this->gUser['name']); ?>' }</script>
<?php $this->brick('infobox'); ?>
<div class="text">
<h1><?php echo Lang::$account['myAccount']; ?></h1>
<div id="h1-icon-generic" class="h1-icon"></div>
<script type="text/javascript">
$WH.ge('h1-icon-generic').appendChild(Icon.createUser(<?php echo (is_numeric(User::$avatar) ? 2 : 1).' , \''.User::$avatar.'\''?>, 1, null, <?php echo User::isInGroup(U_GROUP_PREMIUM) ? 0 : 2; ?>, false, Icon.getPrivilegeBorder(<?php echo User::getReputation(); ?>)));
</script>
<h1 class="h1-icon"><?php echo Lang::$account['myAccount']; ?></h1>
<?php
// Banned-Minibox
if ($b = $this->banned):

View file

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html>
<head>
<?php $this->brick('head'); ?>
</head>
<body class="home<?php echo User::isPremium() ? ' premium-logo' : null; ?>">
<div id="layers"></div>
<div class="home-wrapper">
<h1>Aowow</h1>
<div class="home-logo" id="home-logo"></div>
<?php $this->brick('announcement'); ?>
<div class="home-search" id="home-search">
<form method="get" action="index.php">
<input type="text" name="search" />
</form>
</div>
<div class="home-menu" id="home-menu"></div>
<?php if ($this->news): ?>
<div class="pad"></div>
<div class="home-featuredbox<?php echo empty($this->news['extraWide']) ? null : ' home-featuredbox-extended';?>" style="background-image: url(<?php echo $this->news['bgImgUrl'];?>);" id="home-featuredbox">
<?php if ($this->news['overlays']): ?>
<div class="home-featuredbox-links">
<?php
foreach ($this->news['overlays'] as $o):
echo ' <a href="'.$o['url'].'" title="'.$o['title'].'" style="left: '.$o['left'].'px; top: 18px; width:'.$o['width'].'px; height: 160px"></a>'."\n";
echo ' <var style="left: '.$o['left'].'px; top: 18px; width:'.$o['width'].'px; height: 160px"></var>'."\n";
endforeach;
?>
</div>
<?php endif; ?>
<div class="home-featuredbox-inner text" id="news-generic"></div>
</div>
<script type="text/javascript">//<![CDATA[
<?php
foreach ($this->jsGlobals as $glob):
$this->gBrick($glob[0], ['vars' => $glob[1], 'extra' => $glob[2]]);
endforeach;
?>
Markup.printHtml(<?php echo json_encode($this->news['text']); ?>, 'news-generic', { allow: Markup.CLASS_ADMIN });
//]]></script>
<?php endif; ?>
</div>
<div class="toplinks linklist"><?php $this->brick('headerMenu'); ?></div>
<div class="footer">
<div class="footer-links linklist">
<a href="?aboutus"><?php echo lang::$main['aboutUs']; ?></a>|
<a href="#" id="footer-links-language"><?php echo Lang::$main['language']; ?></a>
</div>
<div class="footer-copy">&#12484; 2014 Aowow</div>
</div>
<?php $this->brick('pageTemplate'); ?>
<noscript><div id="noscript-bg"></div><div id="noscript-text"><b><?php echo Lang::$main['jsError']; ?></div></noscript>
</body>
</html>

View file

@ -1,63 +0,0 @@
<html>
<head>
<?php $this->brick('head'); ?>
<style type="text/css">
.menu-buttons a { border-color: black }
.news { position: relative; text-align: left; width: 415px; height: 191px; margin: 30px auto 0 auto; background: url(static/images/<?php echo User::$localeString; ?>/mainpage-bg-news.jpg) no-repeat }
.news-list { padding: 26px 0 0 26px; margin: 0 }
.news-list li { line-height: 2em }
.news-img1 { position: absolute; left: 60px; top: 155px; width: 172px; height: 17px }
.news-img2 { position: absolute; left: 246px; top: 48px; width: 145px; height: 127px }
.news-talent { position: absolute; left: 240px; top: 29px; width: 152px; height: 146px }
.announcement { margin: auto; max-width: 1200px; padding: 0px 15px 15px 15px }
</style>
</head>
<body>
<div id="layers"></div>
<div id="home">
<?php $this->brick('announcement'); ?>
<span id="menu_buttons-generic" class="menu-buttons"></span>
<script type="text/javascript">
Menu.addButtons($WH.ge('menu_buttons-generic'), mn_path);
</script>
<div class="pad"></div>
<form method="get" action="." onsubmit="if($WH.trim(this.elements[0].value) == '') return false">
<input type="text" name="search" size="38" id="livesearch-generic" /><input type="submit" value="<?php echo Lang::$main['searchButton']; ?>" />
</form>
<script type="text/javascript">var _ = $WH.ge('livesearch-generic'); LiveSearch.attach(_); _.focus();</script>
<?php
if (!empty($this->news)):
?>
<div class="news">
<div class="news-list text">
<ul>
<?php
foreach ($this->news as $item):
echo ' <li><div>'.$item['text']."</div></li>\n";
endforeach;
?>
</ul>
</div>
</div>
<?php
endif;
?>
<div id="toplinks" class="toplinks">
<?php $this->brick('headerMenu'); ?>
</div>
<?php $this->brick('pageTemplate'); ?>
</div>
<div id="footer">
</div>
<noscript><div id="noscript-bg"></div><div id="noscript-text"><b><?php echo Lang::$main['jsError']; ?></div></noscript>
<script type="text/javascript">DomContentLoaded.now()</script>
</body>
</html>

View file

@ -4,23 +4,11 @@
<div class="main-precontents" id="main-precontents"></div>
<div class="main-contents" id="main-contents">
<?php $this->brick('announcement'); ?>
<script type="text/javascript">
g_initPath(<?php echo json_encode($this->path, JSON_NUMERIC_CHECK); ?>);
var temp_path = <?php echo json_encode($this->path, JSON_NUMERIC_CHECK); // kill with pageTemplate ?>;
<?php
/*
PageTemplate.set({pageName: 'profile', activeTab: 1, breadcrumb: [1,5,0,'eu']});
PageTemplate.init();
$this->brick('announcement');
old:
var g_serverTime = new Date('2010/04/11 01:50:39');
var g_pageName = 'profile'; // is not used in any jScript..?
var g_pageValue = ''; // is not used in any jScript..?
*/
$this->brick('pageTemplate');
?>
</script>
<div id="profilah-generic"></div>
<script type="text/javascript">//<![CDATA[