diff --git a/includes/ajaxHandler.class.php b/includes/ajaxHandler.class.php index 38e4a665..3eec1e7e 100644 --- a/includes/ajaxHandler.class.php +++ b/includes/ajaxHandler.class.php @@ -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 */ @@ -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: ), 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, ?, "", ?, ?)', + 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, ?, "", ?, ?)', + 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.. diff --git a/includes/community.class.php b/includes/community.class.php index a90fe8e8..14161607 100644 --- a/includes/community.class.php +++ b/includes/community.class.php @@ -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; } } ?> diff --git a/includes/defines.php b/includes/defines.php index ffb1479b..a6a9df92 100644 --- a/includes/defines.php +++ b/includes/defines.php @@ -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); diff --git a/includes/kernel.php b/includes/kernel.php index 0bd24f04..aa63a7f2 100644 --- a/includes/kernel.php +++ b/includes/kernel.php @@ -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 diff --git a/includes/markup.class.php b/includes/markup.class.php new file mode 100644 index 00000000..7d4df093 --- /dev/null +++ b/includes/markup.class.php @@ -0,0 +1,50 @@ +text = $text; + } + + public function parseGlobalsFromText(&$jsg = []) + { + if (preg_match_all('/(?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() + { + } +} + +?> diff --git a/includes/types/item.class.php b/includes/types/item.class.php index 35faeb07..678a005b 100644 --- a/includes/types/item.class.php +++ b/includes/types/item.class.php @@ -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; } diff --git a/includes/types/itemset.class.php b/includes/types/itemset.class.php index ece86b0e..74ef7317 100644 --- a/includes/types/itemset.class.php +++ b/includes/types/itemset.class.php @@ -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; } diff --git a/includes/types/title.class.php b/includes/types/title.class.php index 73d04edd..a3ee8382 100644 --- a/includes/types/title.class.php +++ b/includes/types/title.class.php @@ -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])); } } diff --git a/includes/types/user.class.php b/includes/types/user.class.php new file mode 100644 index 00000000..e32442a7 --- /dev/null +++ b/includes/types/user.class.php @@ -0,0 +1,60 @@ + [['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() { } +} + +?> diff --git a/includes/user.class.php b/includes/user.class.php index 5d28aac2..f09c2c07 100644 --- a/includes/user.class.php +++ b/includes/user.class.php @@ -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; - } } ?> diff --git a/includes/utilities.php b/includes/utilities.php index 18d01140..32349887 100644 --- a/includes/utilities.php +++ b/includes/utilities.php @@ -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() { /* diff --git a/index.php b/index.php index 3a208145..9e1d3132 100644 --- a/index.php +++ b/index.php @@ -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) { diff --git a/localization/locale_dede.php b/localization/locale_dede.php index d9ed493e..1891d1d4 100644 --- a/localization/locale_dede.php +++ b/localization/locale_dede.php @@ -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 feedback", # 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", diff --git a/localization/locale_enus.php b/localization/locale_enus.php index 9342f2f1..47bac78c 100644 --- a/localization/locale_enus.php +++ b/localization/locale_enus.php @@ -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 feedback", # 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", diff --git a/localization/locale_eses.php b/localization/locale_eses.php index 26a88f8e..ef58f0f5 100644 --- a/localization/locale_eses.php +++ b/localization/locale_eses.php @@ -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 feedback", # 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", diff --git a/localization/locale_frfr.php b/localization/locale_frfr.php index 70d5e6a6..f64ad706 100644 --- a/localization/locale_frfr.php +++ b/localization/locale_frfr.php @@ -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 à feedback", # 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", diff --git a/localization/locale_ruru.php b/localization/locale_ruru.php index 15f8ab52..16004b16 100644 --- a/localization/locale_ruru.php +++ b/localization/locale_ruru.php @@ -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' => "Произошла ошибка; обновите страницу и попробуйте снова. Если ситуация повторяется, отправьте сообщение на feedback", # LANG.genericerror + 'bannedRating' => "Вам была заблокирована возможность оценивать комментарии.", # LANG.tooltip_banned_rating + 'tooManyVotes' => "Вы сегодня проголосовали слишком много раз! Вы сможете продолжить завтра." # LANG.tooltip_too_many_votes ), 'game' => array( 'achievement' => "достижение", diff --git a/pages/account.php b/pages/account.php index 1a60227b..cd9bf47b 100644 --- a/pages/account.php +++ b/pages/account.php @@ -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']" + ) + ); + } + +/* +
+ + + +
+ + +*/ // 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 diff --git a/pages/compare.php b/pages/compare.php index f5c39253..485a95e9 100644 --- a/pages/compare.php +++ b/pages/compare.php @@ -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 = []; diff --git a/pages/genericPage.class.php b/pages/genericPage.class.php index c9eb611e..d0f6d512 100644 --- a/pages/genericPage.class.php +++ b/pages/genericPage.class.php @@ -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( ' ' 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] = []; } } diff --git a/pages/home.php b/pages/home.php new file mode 100644 index 00000000..ecaf4265 --- /dev/null +++ b/pages/home.php @@ -0,0 +1,52 @@ + '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() {} +} + +?> diff --git a/pages/main.php b/pages/main.php deleted file mode 100644 index 449e53c7..00000000 --- a/pages/main.php +++ /dev/null @@ -1,32 +0,0 @@ -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() {} -} - -?> diff --git a/pages/maps.php b/pages/maps.php index bb5447f0..938c8bdc 100644 --- a/pages/maps.php +++ b/pages/maps.php @@ -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, $__) diff --git a/pages/more.php b/pages/more.php index 4e8e5daf..117d4cf1 100644 --- a/pages/more.php +++ b/pages/more.php @@ -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'], diff --git a/pages/npc.php b/pages/npc.php index d65371cb..b0bf8b3f 100644 --- a/pages/npc.php +++ b/pages/npc.php @@ -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) diff --git a/pages/object.php b/pages/object.php index 7475c25f..80c5cacb 100644 --- a/pages/object.php +++ b/pages/object.php @@ -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 diff --git a/pages/quest.php b/pages/quest.php index 5dc369be..2203cc01 100644 --- a/pages/quest.php +++ b/pages/quest.php @@ -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) diff --git a/pages/search.php b/pages/search.php index 30767a65..8dab1603 100644 --- a/pages/search.php +++ b/pages/search.php @@ -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 = []; diff --git a/pages/spell.php b/pages/spell.php index a44b8aa9..a6137eb0 100644 --- a/pages/spell.php +++ b/pages/spell.php @@ -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) diff --git a/pages/talent.php b/pages/talent.php index c30a0dc2..ab1eb42b 100644 --- a/pages/talent.php +++ b/pages/talent.php @@ -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; diff --git a/pages/utility.php b/pages/utility.php index 16e7fcb8..610ae439 100644 --- a/pages/utility.php +++ b/pages/utility.php @@ -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 = "\n". - "\n\t\n". - "\t\t".CFG_NAME_SHORT.' - '.$this->name."\n". - "\t\t".HOST_URL.'?'.$this->page . ($this->category ? '='.$this->category[0] : null)."\n". - "\t\t".CFG_NAME."\n". - "\t\t".implode('-', str_split(User::$localeString, 2))."\n". - "\t\t".CFG_TTL_RSS."\n". - "\t\t".date(DATE_RSS)."\n". - "\t\n"; + "\n\n". + "".CFG_NAME_SHORT.' - '.$this->name."\n". + "".HOST_URL.'?'.$this->page . ($this->category ? '='.$this->category[0] : null)."\n". + "".CFG_NAME."\n". + "".implode('-', str_split(User::$localeString, 2))."\n". + "".CFG_TTL_RSS."\n". + "".date(DATE_RSS)."\n"; - # generate 's here + foreach ($this->lvTabs[0]['data'] as $row) + { + $xml .= "\n". + "<![CDATA[".$row['subject']."]]>\n". + "".HOST_URL.'?go-to-comment&id='.$row['id']."\n". + "\n". // todo (low): preview should be html-formated + "".date(DATE_RSS, time() - $row['elapsed'])."\n". + "".HOST_URL.'?go-to-comment&id='.$row['id']."\n". + "\n". + "\n"; + } - $xml .= ''; + $xml .= "\n"; return $xml; } diff --git a/pages/zones.php b/pages/zones.php index bfe81b78..55153d6c 100644 --- a/pages/zones.php +++ b/pages/zones.php @@ -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', diff --git a/setup/db_content.rar b/setup/db_content.rar deleted file mode 100644 index 47785dc6..00000000 Binary files a/setup/db_content.rar and /dev/null differ diff --git a/setup/db_setup_1.zip b/setup/db_setup_1.zip index 4807bd7f..83ec983d 100644 Binary files a/setup/db_setup_1.zip and b/setup/db_setup_1.zip differ diff --git a/setup/db_setup_2.zip b/setup/db_setup_2.zip index 40afe9a7..6f134ab8 100644 Binary files a/setup/db_setup_2.zip and b/setup/db_setup_2.zip differ diff --git a/setup/more-articles_ann-help.sql b/setup/more-articles_ann-help.sql deleted file mode 100644 index 1e45738d..00000000 --- a/setup/more-articles_ann-help.sql +++ /dev/null @@ -1,18 +0,0 @@ -REPLACE INTO `aowow_articles` (`type`, `typeId`, `locale`, `article`, `quickInfo`) VALUES - (-13, 0, 0, '[menu tab=2 path=2,13,0]One of Wowhead\'s many useful features is the user-submitted comment system. This system allows users to submit their own comments to augment the data provided by Wowhead. As a rule, Wowhead promotes the submission of informative comments, but we also like to see the occasional joke. Moderators and users alike will apply positive and negative ratings to comments in an effort to promote the useful ones and purge unnecessary information.\r\n\r\nWith that in mind, below is a guide that can be used to determine how your comment will likely be received by the community. \r\n\r\n[pad]\r\n\r\n[tabs name=comments]\r\n\r\n[tab name="Before you post"]\r\n\r\n[ul]\r\n[li][b]Read existing comments[/b] – Sometimes, the information you have may already have been posted by another user. In this case, if the information is useful, the existing comment should be given a positive rank. Posting information that was already added in a previous comment will likely result in a negative rating.[pad][/li]\r\n[li][b]Verify your facts[/b] – Make sure that what you have to post is true. A friend might tell you that a mob is immune to Frost Nova, but unless you verify that yourself, you could be posting a potentially misleading comment.[pad][/li]\r\n[li][b]Temporary usability[/b] – If you want to correct invalid or missing information on a page, keep in mind that your comment may go from a positive ranking to a negative ranking when the correction occurs. For example, informing the community that an item drops off of Illidan Stormrage before that data has been collected will be useful at first, but once Wowhead learns that information and adds it to the \'Dropped By\' tab, your comment becomes redundant. If you do not want to worry about the comment or do not want one of your comments to be rated negatively, consider informing us in the [url=/?forums&board=1.]Site Feedback[/url] forum. The moderation staff will be happy to add a comment to correct invalid or missing information on the page for you. Alternatively, you can delete your comment later when it becomes redundant.[/li]\r\n[/ul]\r\n\r\n[/tab]\r\n\r\n[tab name="Comment ratings"]\r\n\r\n[h3][color=q2]Positive (+1)[/color][/h3]\r\n[ul]\r\n[li][b]Corrections on drop percentages[/b] – There are many instances where drop percentages will be inaccurate. For example, quest items do not drop for people who do not have the quest, so their drop percentages will be low. Also, mobs that periodically do not drop loot when they die won\'t count against the drop percentages, so these mobs may appear to have higher drop rates for some items.[pad][/li]\r\n[li][b]Strategies[/b] – If you have a strategy that can assist other users in completing a quest or defeating a mob, by all means, share![pad][/li]\r\n[li][b]Quest coordinates[/b] – Providing coordinates for the location of quest items or mobs is always useful. When possible, you should provide Wowhead links to quest targets as well.[pad][/li]\r\n[li][b]Theorycrafting[/b] – We encourage users to post any information they have regarding complex calculations they may have performed to, for example, prove one item has a higher DPS than another given certain abilities.[pad][/li]\r\n[li][b]Just for laughs[/b] – If your comment is one that would be universally funny (i.e. not an inside joke), post away. We like to laugh as much as anyone else. Of course, whether your joke is funny or not is subject to our other users. :)[/li]\r\n[/ul]\r\n\r\n[h3][color=q10]Negative (-1)[/color][/h3]\r\n[ul]\r\n[li][b]Redundant information[/b] – For instance, a comment that says "Dropped by Ragnaros" does not add anything to the page as that information can be viewed in the "Dropped By" tab of the page in question.[pad][/li]\r\n[li][b]Soloed by:[/b] Unless your comment contains a detailed explanation of how you defeated a mob, these comments do not add anything to the page. Simply stating your level, class, and that you soloed the mob by using a few skills is not enough to be useful.[pad][/li]\r\n[li][b]Dropped in X kills[/b] – Telling users that you were lucky enough to get the crusader enchant in one drop is not considered useful information.[pad][/li]\r\n[li][b]NPC/Object coordinates[/b] – The coordinates for NPC or mobs are already supplied in convenient maps within the Wowhead interface.[pad][/li]\r\n[li][b]Best X before level Y[/b] – Simply posting that an item is the best twink weapon or the best dagger for a rogue is not helpful unless you can back up that claim with facts.[pad][/li]\r\n[li][b]HUNTAR WEPPON[/b] – While it would be acceptable to explain why you feel a certain class with a certain spec would gain the most benefit from an item, simply stating that you feel the weapon should always go to a hunter in a raid will result in negative moderation.[pad][/li]\r\n[li][b]Confirmed![/b] – Adding a comment that simply indicates that you have confirmed a comment left by someone else clutters the comments. The best way to confirm a comment as correct is to give it a positive ranking. A comment with a high ranking will indicate to users that many people think it is useful data.[/li]\r\n[/ul]\r\n\r\n[/tab]\r\n\r\n[tab name=Deletion]\r\n\r\nAny comment that does not abide by the same [forumrules] will be deleted by a moderator.\r\n\r\n[/tab]\r\n\r\n[/tabs]', NULL), - (-13, 5, 0, '[menu tab=2 path=2,13,5]Can\'t find the answer you were looking for? Just [url=/?aboutus#contact]contact us[/url], or post on our [url=/?forums&board=1]forums[/url]! \r\n\r\n[pad]\r\n\r\n[tabs name=compare]\r\n\r\n[tab name="General usage"]\r\n\r\n[h3]Basic Controls[/h3]\r\n\r\n[ul]\r\n[li][img src=static/images/icons/save.gif border=0] [b]Save[/b] – Saves the comparison so that you may continue browsing the site without losing it. When you click on the [b]Compare[/b] button found throughout the site you will be given the option to add to your saved comparison.[/li]\r\n[li][img src=static/images/icons/refresh.gif border=0] [b]Autosaving[/b] – Indicates that you are viewing your saved comparison, and that any changes you make will automatically be saved. To avoid modifying your saved comparison, you may click on Link to this comparison before making any changes.[/li]\r\n[li][img src=static/images/icons/link.gif border=0] [b]Link to this comparison[/b] – Provides a link to a new page with the current item comparison already there! Useful for showing friends your item comparisons.[/li]\r\n[li][img src=static/images/icons/delete.gif border=0] [b]Clear[/b] – Removes all items, groups, and weights from the comparison tool, giving you a clean slate to work with. [b]This will [u]delete[/u] your saved comparison if used while autosaving.[/b][/li]\r\n[li][img src=static/images/icons/add.gif border=0] [b]Weight scale[/b] – Allows you to add one or more weight scales to the item comparison using your own weights or one of our predefined presets. Each weight scale can have its own name. A saved comparison also contains the weight information, allowing you to store custom weight scales for future use.[/li]\r\n[li][img src=static/images/icons/add.gif border=0] [b]Item[/b] – Opens a live search that displays item suggestions as you type the name of an item. Clicking on a suggestion will add that item to your comparison.[/li]\r\n[li][img src=static/images/icons/add.gif border=0] [b]Item set[/b] – Opens a live search that displays item set suggestions as you type the name of an item set. Clicking on a suggestion will add all of the items in that set to your comparison.[/li]\r\n[/ul]\r\n\r\n[h3]Adding Items[/h3]\r\n[div float=right align=right][img src=static/images/help/item-comparison/addingitems.gif]\r\n[small]Some of the ways to add items to a comparison.[/small][/div]The comparison tool is fully integrated with our site and designed to be as convenient as possible to work with. There are many ways to add items to a comparison depending on what part of the site you are on: \r\n[ul][li]Using the [url=/?compare]item comparison tool[/url] itself, you may add items or item sets using the links in the top right corner as described above.[/li]\r\n[li]Viewing an [url=/?item=35137]item[/url] or [url=/?itemset=-17]item set[/url] page, you may click on the red [b]Compare[/b] button near the Quick Facts box.[/li]\r\n[li]Viewing [url=/?items=4.2&filter=sl=8]search results[/url] or [url=/?npc=34077#sells]any page with a list of items[/url], checkboxes are displayed next to items which can be equipped. You may select one or more items and click the [b]Compare[/b] button at the top of the list.[/li][/ul]\r\n\r\n[i]Note: If you have a comparison saved, and you add items to your comparison from elsewhere on the site, you will be given the option to add them to your saved comparison or create a new one. If you don\'t have a saved comparison, a new comparison will automatically be created and saved with the selected items.[/i]\r\n\r\n[h3]Managing Your Items[/h3]\r\n[div float=right align=right][img src=static/images/help/item-comparison/newgroup.gif]\r\n[small]Creating a new group by dragging an item.[/small][/div]\r\n[ul][li][b]Creating a new group[/b] – [u]Drag an item into the empty column[/u] on the right to create a new group containing that item.[/li]\r\n[li][b]Moving[/b] – To move an item or group, click on the item (or the group\'s control bar) and [u]drag it to the desired position[/u].[/li]\r\n[li][b]Copying[/b] – [u]Holding shift while dragging[/u] an item or group will make a copy of it when it is dropped.[/li]\r\n[li][b]Deleting[/b] – Items and groups can be deleted by [u]dragging them out of the row[/u]. Groups may also be deleted by clicking the X on the right side of the group\'s control bar.[/li]\r\n[li][b]Deleting all but one group[/b] – [u]Holding shift while deleting a group[/u] (see above) will cause all other groups to be deleted instead of that one.[/li]\r\n[li][b]Splitting a group[/b] – Groups of 2 or more items can be split by [u]clicking on [b]Split[/b] in the menu dropdown[/u] on the group\'s control bar. This will create a new group for each item in the current group.[/li]\r\n[li][b]Exporting a group[/b] – [u]Clicking on [b]Export[/b] in the menu dropdown[/u] of the group\'s control bar will take you to a new comparison containing only the current group.[/li]\r\n[li][b]Item Enhancements[/b] - To add gems or enchantments to an item, [u]right-click on the item icon at the top[/u], then select the desired option from the menu. The stats will automatically update—including the set bonuses.[/li]\r\n[/ul]\r\n\r\n[/tab]\r\n\r\n[tab name="Advanced features"]\r\n\r\n[h3]Level Adjustments[/h3]\r\nYou can select your desired character level from the dropdown at the top left. When you do, all the statistics that change according to your level (including combat ratings and heirloom item stats) will automatically adjust to the corresponding value for the level you\'ve entered.\r\n\r\n[h3]Gains[/h3]\r\nAt the bottom of the item comparison is a special row called \'Gains\'. The gains row calculates the minimum values of all stats that appear in any group in the item comparison. It then displays the bonuses each row has [b]above[/b] this minimum.\r\n\r\nFor example, the minimum stamina for any group in [url=/?compare=35031;35030;35029;35028;35027]this comparison[/url] is 50. The gains row displays nothing for the items which have 50 stamina, +23 sta for the item with 73 stamina, and +27 sta for the items with 77 stamina.\r\n\r\nBasically, the gains row removes the shared stats between all groups so that you can focus on what each group brings to the table.\r\n\r\n[h3]Focus Group[/h3]\r\n\r\n[screenshot url=static/images/help/item-comparison/focus2.gif thumb=static/images/help/item-comparison/focus.gif float=right]Comparing arena sets of the first four PvP\r\nseasons using a focus group.[/screenshot]Setting a focus group is done by clicking on the eye icon in the group\'s control bar. Selecting a group as your focus will update the display of the item comparison to show the difference in stats between all other groups and the focus group.\r\n\r\nWhen a focus is set, the focus group is highlighted and each other group has numbers that indicate the stats gained or lost in comparison to the focus group.\r\n\r\n[b][color=q2]Positive[/color][/b] numbers indicate that group has a higher total for a given stat than the focus group, while [b][color=q10]negative[/color][/b] numbers indicate that group has a lower total for a given stat than the focus group. \r\n\r\n[h3]Stat Weighting[/h3]\r\nTo add a weight scale to your comparison, click on the [b]Add a weight scale[/b] link in the top right corner. You may select a weight scale from our predefined presets or create one of your own. Each weight scale may be given a name that will appear in the score tooltips to help differentiate the different scores. You may add as many weight scales as you like.\r\n\r\nTo remove a weight scale, click on the [b]X[/b] next to the appropriate score in any group. To toggle between normalized (default), raw, and percent score mode, click on the score in any group.\r\n\r\nUnlike the weighted item search, these weight scales [b]do not[/b] automatically select gems or include socket bonuses in the score at this time.\r\n\r\n[h3]Viewing a Group in 3D[/h3]\r\nClick on [b]View in 3D[/b] in the menu dropdown of the group\'s control bar to display a 3D model of the items and select the race and gender to display them on. Of course, items which do not have models, such as trinkets and rings, will not be displayed.\r\n\r\n[/tab]\r\n\r\n[/tabs]', NULL), - (-13, 3, 0, '[menu tab=2 path=2,13,3]Can\'t find the answer you were looking for? Just [url=/?aboutus#contact]contact us[/url], or post on our [url=/?forums&board=1]forums[/url]! \r\n\r\n[pad]\r\n\r\n[tabs name=weights]\r\n\r\n[tab name=FAQ]\r\n\r\n[h3]How do weights work?[/h3]\r\nThe weighting system allows you to give a weight value to attributes that matter to you and applies your ratings to items in your search results. Each weight value is multiplied by an item\'s stat points and then added together to get the item\'s total score. This score is used to sort the results and display the highest scoring items.\r\n\r\nIf you decide that spell damage is worth twice as much as spell crit, you could add the weights as 2 and 1, 100 and 50, or any other numbers with the same ratio.\r\n\r\nPlease note that weights only work for [url=/?items=4]Armor[/url], [url=/?items=2]Weapons[/url], [url=/?items=3]Gems[/url] and [url=/?items=0]Consumables[/url]. \r\n[h3]What is the difference between weights and equivalency?[/h3]\r\nThe equivalency of two attributes describes how much one equals the other. You may find equivalency ratings that say something like 1 agility = 1.5 strength. This is [b]not[/b] the same as weight values; in fact, it\'s the exact opposite! Equivalency describes the ratio of the stats to each other, which can be used to derive the stat weights. In this example, an appropriate set of weights might be agility 3 and strength 2; this works out to agility being [i]1.5 times as valuable[/i] as strength. \r\n[h3]Is there a way to save a template that I have created?[/h3]\r\nThere sure is! You can save your stat weighting scales by going to the \'Preset\' dropdown menu, selecting \'custom,\' and then filling in your own weights. After you\'ve modified them to your liking, you can hit \'Save\' to give them a name so they can be used for future searches as well.\r\n\r\nWeights also carry over from one item list to another if you use the database menu, so going from a [url=/?items=2&filter=wt=51:48:49;wtv=83:67:58]weighted list of weapons[/url] to the [url=/?items=4&filter=wt=51:48:49;wtv=83:67:58]cloth armor listing[/url] will also maintain your current weight scale. \r\n[h3]Is it better to match sockets and gain the socket bonus, or use the best gems?[/h3]\r\nThe weighting system answers this for you automatically. It compares the score of matching gems plus the score of the socket bonus, to the score of the best gems it could put in that item. It will automatically put in the gems that result in the highest net rating, taking socket bonuses into account. When the socket colors are matched, the socket bonus text will be listed below the gems for each item. \r\n\r\n[h3]What are the default weight presets based on?[/h3]\r\nWe\'ve done a great deal of research, tracking down equivalence points for all of the classes. We\'d like to thank all of the hard-working theorycrafters at [url=http://elitistjerks.com/f47/t21302-theorycrafting_think_tank/]Elitist Jerks[/url], [url=http://forums.tkasomething.com/showthread.php?t=9542]TKA Something[/url], [url=http://shadowpanther.net/aep.htm]Shadow Panther[/url], [url=http://druid.wikispaces.com/Healing+Gear+List]The Druid Wiki[/url], [url=http://www.emmerald.net/]Emmerald[/url], [url=http://www.lootrank.com/wow/templates.asp]Lootrank[/url], [url=http://pawnmod.trenchrats.com/index.php]Pawn Mod[/url], and [url=http://www.codeplex.com/Rawr]Rawr[/url], as well as a host of threads on the World of Warcraft forums. They provided the inspiration for the weighted search and a starting point for our preset values.\r\n\r\n[/tab]\r\n\r\n[tab name="Helpful tips"]\r\n\r\n[ul]\r\n[li]You can help us [b]improve[/b] our presets! Email your suggestions to [feedback].[/li]\r\n[li]Don\'t weight stats that your character is [b]already capped on[/b] (e.g. Hit rating). Be sure to tweak the presets as needed![/li]\r\n[li]You can adjust a preset by clicking on the \'show details\' button.[/li]\r\n[li]Once you have generated a weighting you like, you can bookmark that page. Then, if you browse around on other pages using the menus at the top, your weight scale will be applied to that page as well.[/li]\r\n[/ul]\r\n\r\n[/tab]\r\n\r\n[tab name=Why?]\r\n\r\n[h3]Why does it give a higher score to 2H weapons over 1H weapons, when using a 1H + OH is better?[/h3]\r\nThe scores are based off the stat weights of the item by itself. Two-handers rank higher because by themselves they do have better stats than a one-hander with nothing else in the off hand. If you add up the scores of a main hand and off hand item, the total score is what you should use to compare to that of a two-hander. Wowhead does not assume a score for your offhand item, as there is no way of knowing what you have or can obtain for that slot unless you do a weighted search for it. \r\n[h3]Why does the preset list X as more important than Y?[/h3]\r\nSome attributes come in unusual value ranges on items, which affects their equivalency to other stats. It does not mean that your should focus on or ignore that stat, but that a single point of it is worth more or less compared to other stats. Stats with high number ranges (armor, weapon damage, penetration, etc) will require smaller weight values, while stats with low number ranges (mana regeneration) will require much larger weight values.\r\n\r\nIn essence, giving mana regeneration a score of 100 and healing a score of 25 does [b]not[/b] say that mana regeneration is more important than healing, simply that each point of mana regeneration is the equivalent of 4 points of healing.\r\n[h3]Why don\'t you have a preset for PvP/Tier 6 Raiding/...? Why doesn\'t your preset give a stat value for X?[/h3]\r\nIf you would like to suggest changes to the existing presets or new presets for other specs or situations, please do so to [feedback]. \r\n[h3]Why doesn\'t the preset limit the items to X, Y, and Z?[/h3]\r\nThe weight presets are for sorting; filters are for limiting the search results. If you want to restrict the items you see, use the appropriate tool - the filter options. The only limit applied by the weight scales is that it will not display items with a score of 0 or less. You should continue to use the existing filtering system if you want to see items of a specific type, slot, source, speed, etc.\r\n[h3]Why does it suggest the gems it does for the sockets?[/h3]\r\nThe suggested gems are based on your weights. If you would like to see a different gem in the sockets, try increasing the weight of the appropriate stat. If you feel the weights in the presets need to be adjusted, please let us know at [feedback].\r\n\r\n[/tab]\r\n\r\n[/tabs]', NULL), - (-13, 2, 0, '[menu tab=2 path=2,13,2]\r\n\r\nWowhead thrives on user contributions! Quest data, database comments, forum posts - you name it, we love it! One of our favorite methods of contribution is via uploaded [b]screenshots[/b], images depicting various items, NPCs or quest details in the World of Warcraft. Users can submit screenshots to any database page which will then be reviewed by our staff and, upon approval, added to a database page! Taking and uploading screenshots is easy!\r\n\r\n[small]The information below is graciously provided by [url=http://us.blizzard.com/support/article.xml?locale=en_US&articleId=21048]Blizzard Support[/url].[/small]\r\n[h3]Taking Screenshots on Windows[/h3]\r\n[ul]\r\n[li]While in the game, press the Print Screen key on your keyboard.[/li]\r\n[li]You should see a "Screen Captured" message.[/li]\r\n[li]The screenshot will appear as a .JPG file in the Screenshots folder, in your main World of Warcraft directory.[/li]\r\n[li]You should be able to double click on the screenshot files to view the screenshots in Windows default image viewer.[/li]\r\n[/ul]\r\n\r\n[b]Extra notes for Windows Vista users[/b]\r\n[ul]\r\n[li]Due to extra security on the system the screenshots will be saved to the following folder:C:\\\\users\\\\*your user name*\\\\AppData\\\\Local\\\\VirtualStore\\\\Program Files\\\\World of Warcraft\\\\Screenshots[/li]\r\n[li]You may also have to turn on the ability to view hidden files as the AppData folder may be hidden.\r\n[ul]\r\n[li]Click the Start/Window button, select Control Panel, Appearance and Personalization, Folder Options.[/li]\r\n[li]Next click on the View tab, under the Advanced settings, click Show hidden files and folders, and click OK to finish.[/li]\r\n[/ul][/li]\r\n[/ul]\r\n\r\n[h3]Taking Screenshots on Mac[/h3]\r\n[ul]\r\n[li]Players can take a screenshot in-game using the keyboard key bound to the Print Screen functionality.[/li]\r\n[li]If you have a keyboard with an F13 key, press the key to take an in-game screenshot. Players without an F13 key on the keyboard can change the default Screen Shot key in the Key Bindings menu.[/li]\r\n[li]You should see a "Screen Captured" message.[/li]\r\n[li]The screenshot will appear as a JPEG file in the Screenshots folder, in your main World of Warcraft folder.[/li]\r\n[/ul]\r\n\r\nRemember to turn off your in-game UI using the Alt+Z (or ⌘+V) command! Upon taking your screenshot, you can then go in and use an image editor (such as the free program [url=http://www.getpaint.net]Paint.NET[/url]) to crop your image for faster upload. You can select specific sections of a screenshot to upload (if you are featuring a particular piece of armor, for example) and save the file, then simply upload your pre-cropped image directly to Wowhead! If not, you can easily crop your screenshot after uploading but before submitting using our handy tool.\r\n\r\nTo submit a screenshot to Wowhead, simply navigate to the database entry for which you\'ve taken a screenshot and navigate to the \'Contribute\' section. Select the \'Submit a screenshot\' tab and click \'Choose file\' to locate the file on your system. Remember that only PNG and JPG file types are accepted! Once you have selected the screenshot simply click "Submit" and you\'re on your way! You will then be able to crop the image if necessary before your image is finally submitted for review. Upon approval (which may take up to 72 hours) your screenshot will then be featured on the database page, as well as in a \'Screenshots\' tab in your user profile!\r\n\r\n\r\n[h2]Quality Tips[/h2]\r\n\r\n[screenshot url=static/images/help/screenshots/hinterlands.jpg thumb=static/images/help/screenshots/hinterlands2.jpg float=right]The Hinterlands[/screenshot]A good screenshot is like a miniature piece of art. It should showcase the main object, but take into account the details around it. The same 7 elements of art design come into play here, Line, Shape, Form, Space, Texture, Light & Color. We\'ll touch on several of these and how to make use of the in game settings and mechanics to enhance your pictures.\r\n\r\nTurn your resolution and color sampling as high as your computer can handle. Turn on all the image effects and details, but turn down the weather effects to the lowest setting. In general you want all your glow and spell effects maxed to really show the environment to its fullest potential (they actually help with the lighting too!) You may find a shot that you need to play with these settings to enhance, sometimes turning down environmental detail is helpful to remove extra grasses.\r\n\r\nWorld of Warcraft actually has an internal setting for screenshot quality, and by default that quality is set to [b]3/10[/b]. You can turn this up, though, in order to take higher quality screenshots. In order to do so, type this command into your chatbox:\r\n\r\n[code]/console screenshotQuality 10[/code]\r\n\r\nMost of the time taking the pictures from 1st person view works best, so zoom all the way in so that you\'re looking through your character\'s eyes. Occasionally the object might be too big (large NPCs especially) to use this view - if this is the case get as close to them as you can without having your body in the shot and swing the camera around to get the angle that you\'re looking for.\r\n\r\nPay attention to the light - a well lit picture is 10 times better than a dark one. You may even want to do a little color correcting before uploading - increase the brightness and contrast a touch. For instance - it\'s a lot easier to take pictures in sunny Stormwind than deep in the mountains of torch lit Ironforge. Daytime pictures also turn out better than night.\r\n\r\n[h3]Featuring Armor[/h3]\r\n\r\n[screenshot url=static/images/help/screenshots/armor.jpg thumb=static/images/help/screenshots/armor2.jpg float=right]Dreamwalker Spaulders[/screenshot]We want to see the armor! Not Joe Schmoe in the armor. In general you want close ups of the piece itself (except for full set pictures). Don\'t be afraid to submit a 4 inch picture of one glove. Once\'s it\'s cropped and loaded and shrunk down to the thumbnail it will look great!\r\n\r\nUse your best judgment when cropping armor pics, but remember - we want to see details of the armor - not the person or a far away image. Of course, this also applies to weapons or any other piece of equipment!\r\n\r\n[h3]Featuring NPCs[/h3]\r\n\r\n[screenshot url=static/images/help/screenshots/npc.jpg thumb=static/images/help/screenshots/npc2.jpg float=right]Cairne Bloodhoof [/screenshot]Full body shots should be the norm. If you can\'t get a good full shot (e.g. they\'re standing behind a counter) get the waist up shot. There\'s no need to include the on-screen text and titles of NPCs. The website already lists those, so just get in close and take a great shot of the NPC itself.\r\n\r\nGet down on their level - you may need to "/sit" or even "/sleep" to get a good view of something low to the ground (scorpions, boots, spiders, etc.)\r\n\r\nWhen capturing moving NPCs, try to get as much a head on front shot as you can, being willing to take a few hits while you take picture of a mob attacking you can make for a great shot. If you don\'t want to get your hands dirty, sitting in place for a while and waiting for it to path in front of you is often easier and faster than running around it trying to get your shot.\r\n\r\nTalking to friendly NPCs will usually make them face you - you can then spin around and get the best background for your picture. You may also catch them in an interesting motion or gesture.', NULL), - (-13, 6, 0, '[menu tab=2 path=2,13,6]Can\'t find the answer you were looking for? Just [url=/?aboutus#contact]contact us[/url], or post on our [url=/?forums&board=1]forums[/url]!\r\n\r\n[pad]\r\n\r\n[tabs name=profiler]\r\n\r\n[tab name="Browsing characters"]\r\n\r\n[div float=right align=right][img src=static/images/help/profiler/menu.gif]\r\n[small]Navigating the menu to your battlegroup and realm.[/small][/div]Wowhead maintains a database of [i]millions[/i] of [url=http://www.wowarmory.com/]Armory[/url] characters, guilds, and arena teams that have been imported by our users. You can browse through this extensive list by visiting the main [url=/?profiles]profiles[/url] page and selecting a region, battlegroup, or realm from the menus at the top.\r\n\r\nThis will give you an unfiltered look at the players and guilds in the area you selected, with the most recently updated characters displayed first. You can also enter your characters name in the box at the top to jump directly to that character.\r\n\r\n[h3]Finding My Characters[/h3]\r\n\r\nTo find your own characters, you have two options:\r\n[ul]\r\n[li]Use the breadcrumb listings at the top to browse to your region, battlegroup, and realm. When you do this, a box will appear in the listing at the top of the page. Enter your character\'s name in this box to be taken directly to your character. You can use the "Claim Character", which is located under the Manage Character button, to save a character to your [url=/user=fewyn#characters]user page[/url] for later viewing.[/li]\r\n[li]If you\'re uploading data using the [url=/client]Wowhead Client[/url], any character you log in on will be automatically linked to your user page as soon as you upload data. Once that\'s done, you can view your characters directly from your user page.[/li]\r\n[/ul]\r\n\r\n[i]Tip: Claimed characters can be made public or private as you choose—so you only show off the characters people want you to see! Basic information for the profiles will remain public, just as it is in the Armory—but any connection to your account will be hidden.[/i]\r\n\r\n[h3]Filters[/h3]\r\nBut that\'s not the only way to find a character! You can also search Wowhead profiles using our robust filter system, just the same way that you can search items, NPCs, or spells in game. Characters and guilds can be filtered by name, region, and realm to limit the number of displayed results.\r\n\r\nAdditionally, characters can be filtered by faction, level, race, and class – as well as a number of other unique and useful criteria. For example:\r\n\r\n[ul]\r\n[li][div float=right align=right][img src=static/images/help/profiler/filters.gif]\r\n[small]Searching for characters that match your criteria.[/small][/div]Let\'s see [url=/?profiles=us.draenor&filter=cl=8;ra=11;cr=35;crs=0;crv=450]all the Draenei mages on my server that have their tailoring maxed out[/url].[/li]\r\n[li]Hmm... I wonder if anyone is [url=/?profiles=eu&filter=na=Malgayne]using my name on European servers[/url]?[/li]\r\n[li]How do I compare to [url=/?profiles=us.draenor&filter=cl=2;minle=80;maxle=80;cr=7;crs=1;crv=50]other Retribution-specced paladins on my server[/url]?[/li]\r\n[li]How many [url=/?profiles&filter=cr=23;crs=0;crv=871]Bloodsail Admirals[/url] are there out there?[/li]\r\n[li]Who got caught wearing a [url=/?profiles&filter=cr=21;crs=0;crv=22279]Lovely Black Dress[/url]?[/li]\r\n[li]How many people on my server and faction [url=/?profiles=us.sentinels&filter=si=2;cr=23;crs=0;crv=2904]completed Heroic Ulduar[/url]?[/li]\r\n[/ul]\r\n\r\nWe\'ll be adding more filters as time goes on, so feel free to experiment – and let us know if you think of other ideas!\r\n\r\n[pad][pad][pad]\r\n\r\n[h3]Guild and Arena Team Rosters[/h3]\r\nWhen you click on a character\'s guild or arena team, you will be directed to a roster view listing all the characters that belong to it. The roster view displays additional information, including guild ranks and personal arena team ratings. You can further filter this information using the [b]Create a filter[/b] link, should you want to find characters matching specific criteria. Now its easy to find all of the crafters in your guild!\r\n\r\n[h3][img src=static/images/help/profiler/queue.gif float=right]Resync Queue[/h3]\r\nWhen a character resync is requested, it is added to the queue. The queue is used to make sure everyone\'s characters are updated and processed in the order they were submitted, without overloading the [url=http://us.battle.net/wow/en/]Battle.net Armory\'s API[/url] with requests. Whenever you access a character that does not exist in our database or has not been updated in more than 1 hour, it will automatically be added to the queue.\r\n\r\n[/tab]\r\n\r\n[tab name="General usage"]\r\n\r\nThe profiler has a wealth of information it can display about characters and custom profiles, so it can seem daunting at first! Each of the sections are broken down in detail below.\r\n[h3]Basic Profile Information[/h3]\r\nAt the top of a profile you will see an expanded header with vital information about the profile itself. All profiles have an icon and the character\'s race, class and level; Armory characters display a link to the character\'s guild under the name, while custom profiles display a description set by the user that created it. A link to [b]Edit[/b] this information appears on the bottom line, allowing you to update a profile you created or make a new custom profile from an existing one.\r\n\r\n[ul]\r\n[li][img src=static/images/help/profiler/edit.gif float=right][b]Name [/b]– Give your profile a name! Names must start with a letter, and can only contain letters, numbers, and spaces.[/li]\r\n[li][b]Level[/b] – Select a level for your profile. Profiles must be at least level 10 (55 for Death Knights) and no more than level 85.[/li]\r\n[li][b]Race[/b] – Ever wonder what you\'d look like as a tauren instead of an orc? Choose any race for your profile, and the character model with automatically be updated.[/li]\r\n[li][b]Class[/b] – You can select any class you like, regardless of racial restrictions. See what your stats would be if you were a draenei druid![/li]\r\n[li][b]Gender[/b] – Select male or female to set your character\'s gender.[/li]\r\n[li][b]Icon[/b] – Icons are automatically generated for Armory characters and in game class/race combinations, but you can change the icon to any you like.[/li]\r\n[li][b]Description[/b] – Enter a tag line or brief description for the profile so you and others know what it is about.[/li]\r\n[li][b]Visibility[/b] – Public profiles will be visible on your user page and anyone can view a public profile. Private ones will not be displayed or visible to others.[/li]\r\n[/ul]\r\n[i]Note: If you edit a character in any way, it will become a custom profile. The reputations, achievements, and raid progress information will be removed.[/i]\r\n\r\n[h3]Managing Profiles[/h3]\r\nIn the upper right are a number of useful buttons for managing profiles without having to go back to your user page. Each of the buttons have several options that can be used to manage the character\'s page you are currently on and include the following options.\r\n\r\n[ul]\r\n[li][b]Custom Profile[/b]\r\n[ul][li][b]New[/b] – This is a quick link to creating a new, blank profile from scratch. It will open in a new window so you do not lose your current profile. This option is always available.[/li]\r\n[li][b]Save[/b] – Save any changes you have made to this profile. This option is only available for logged in users on profiles they own.[/li]\r\n[li][b]Save as[/b] – This will let you save your current changes under a new name. It is extremely useful for making copies of profiles! This option is only available for logged in users.[/li][/ul][/li]\r\n[li][b]Manage Character[/b]\r\n[ul][li][b]Resync[/b] – Request that the character be updated from the armory; it will be added to the queue. This option is only available on Armory character pages.[/li]\r\n[li][b]Claim character[/b] – Adds an Armory character to your user page. This is a good thing to do with all your alts. This option is only available for logged in users on Armory character pages.[/li]\r\n[li][b]Remove[/b] - Removes the character from your user page. Use this if you no longer play the character or have long since deleted it.[/li]\r\n[li][b]Pin/Unpin[/b] - Pin one of your characters so you can perform personalized searches throughout the database for missing or completed quests, achievements, recipes and more![/li]\r\n[/ul][/li]\r\n[/ul]\r\n\r\n[h3]From the User Page[/h3]\r\n[img src=static/images/help/profiler/userpage.gif float=right]All of your claimed Armory characters and custom profiles are listed in one convenient place on your user page. From the [b]Characters[/b] tab you can remove one or more claimed characters. The [b]Profiles[/b] tab allows you to create a new profile, delete profiles, or change the visibility settings of profiles. Your private profiles will not be visible to anyone else.\r\n\r\n[i]Tip: When you are logged in, all of your characters and custom profiles can be accessed from the [b]My profiles[/b] menu at the top right of any page![/i][pad]\r\n[h3]Saving Your Work[/h3]\r\nAny profile can be edited, even if you don\'t own it, but you\'ll probably want to save your work when you\'re done! You must have an account with us in order to save a profile. Once you\'ve created an account, you can bookmark any number of Armory characters and save up to 10 custom profiles. Premium users will be able to create even more, so upgrade if 10 just isn\'t enough! You can use the red buttons to save a profile from its page, and manage your existing profiles and characters from your user page. \r\n\r\n[/tab]\r\n\r\n[tab name="Inventory and talents"]\r\n[img src=static/images/help/profiler/character.jpg height=300 float=right]The main tab for a profile is the character inventory, which includes a lot of the same information you would see by looking at your character pane in game. This tab is broken up into four key sections - the character view, quick facts box, statistics, and gear summary.\r\n\r\n[h3]Character View[/h3]\r\nThe first thing you\'ll notice, of course, is your character – as rendered by our custom built modelviewer, in all it\'s three-dimensional glory. You can turn the character with your mouse, and zoom in and out using the A and Z keys, just like the modelviewer elsewhere in the site. [b]We even pull your face, hair, and skin color information from the Armory![/b]\r\n\r\nOn either side of the character are inventory icons which you can right click on for a menu of options:\r\n\r\n[i]Tip: You can remove a gem or enchant by clicking None in the picker window or by right clicking on it in the gear summary.[/i]\r\n\r\n[ul]\r\n[li][img src=static/images/help/profiler/itemmenu.gif float=right][b]Equip... / Replace...[/b] – Selecting this option will give you a quick search box in which you can type an item\'s name. Click on the item or hit return to equip it.\r\nUnequip – Unequips the item, of course. :)[/li]\r\n[li][b]Add / Replace enchant...[/b] – The spell icon on the left shows if the item is enchanted. This opens a customized picker window with all enchants available for the item slot.[/li]\r\n[li][b]Add / Replace gem...[/b] – The icon on the left shows the socket color or socketed gem. Like the enchants, this opens a picker window with valid gems for the socket.[/li]\r\n[li][b]Extra socket[/b] – The check mark on the left indicates if a blacksmithing socket has been added to this item. Click to toggle on or off.[/li]\r\n[li][b]Clear Enhancements[/b] - This will remove all reforges, enchantments, gems and extra sockets from an item. Useful if you want to start fresh with an item.[/li]\r\n[li][b]Display on character[/b] – The checkmark on the left indicates if the item is displayed on the model. Click to toggle on or off – it works for more than just cloaks and helms![/li]\r\n[li][b]Compare[/b] – Adds the item to the [url=/?compare]item comparison tool[/url] and opens it in a new window to compare with other items.[/li]\r\n[li][b]Find upgrades[/b] – Uses our [url=/?help=stat-weighting]weighted search[/url] to find upgrades based on your talent spec.[/li]\r\n[li][b]Who wears this?[/b] – Creates a filtered list of other Armory characters who are also wearing the item.[/li]\r\n[/ul]\r\n\r\n[i]Tip: Items that can take enchantments but have no enchantment, or which have empty sockets, will even have a little notification in the tooltip![/i]\r\n\r\n[img src=static/images/help/profiler/quickfacts.gif float=right][h3]Quick Facts Box[/h3]\r\nOn the right hand side is a handy Quick Facts box that displays basic, defining information about a profile. This box is chock full of useful information, including talent spec, achievement points, and professions.\r\n\r\n[i]Tip: Any raid icon that\'s ringed in [color=c4]gold[/color] is a raid that the character has cleared![/i]\r\n[h3]Statistics[/h3]\r\nYou\'ll also notice that all of a profile\'s statistics are laid out beneath the character view. This is also all information you can get from the Armory (and then some), but we lay it out in a nice, convenient page so you can view it all at once – no more messing with drop down menus. You can also click on a statistic and expand it so you can see its tooltip information right there on the page—or click on the header to expand all the related statistics. Your statistics are updated as you edit any part of a profile, including race, class, level, items, enhancements, or talents – all in real time! [b]Statistic modifications from glyphs and buffs are not presently supported, but will be in the future.[/b]\r\n\r\n[i]Note: These statistics are calculated manually – they are not pulled from the Armory. Statistics calculations are still in beta and will ironed out as we go.[/i]\r\n\r\n[img src=static/images/help/profiler/statistics.gif float=center]\r\n\r\n[h3]Gear Summary[/h3]\r\n[div float=right align=right][img src=static/images/help/profiler/gearsummary.gif]\r\n[small]A warning message is displayed for missing enhancements.[/small][/div]Last on the character inventory tab, but not least, is the gear summary. This is a personalized list of all items worn by the character, with convenient column headers and in line filtering options. Use it to see where most of a character\'s items come from, what is the best and worst piece, and whether or not there are missing gems and enchants. Just in case the empty icons aren\'t clear enough, a warning appears at the top of the list if a character is missing gems, enchants, or blacksmith sockets. This [color=q10]warning[/color] is based on the professions of the character if it is an Armory profile, and otherwise shows you everything missing on custom profiles.\r\n\r\nThe gems and enchants can also be edited from within the gear summary, and have a few additional options not available in the character view. You can remove or replace an enhancement from here, and you can find upgrades using our [url=/?help=stat-weighting]weighted search[/url] – just like items!\r\n\r\n[h3]Talents[/h3]\r\nThe talents tab includes an inline version of our [url=/?talent]talent calculator[/url] with a full display of a character\'s talents. It is locked by default, but you can unlock it to begin editing talents, just as you would normally. There are two extra features in the Profiler\'s talent calculator: you can store and swap between two specs for each character, and export the current talent build to the calculator to link to your friends. When you change your talents (or swap between specs) your gear score and statistics will be updates real time!\r\n\r\n[/tab]\r\n\r\n[tab name="Other tabs"]\r\n\r\n[h3]Reputation[/h3]\r\nThe reputation tab displays the complete faction information of an Armory character, with collapsible headers for each section. Its much easier to read than the tiny faction pane in game! Of course, you can link directly to the faction\'s page to get more information about that faction. \r\n[h3][img src=static/images/help/profiler/achievements.gif float=right]Achievements[/h3]\r\nThe achievements tab lists an Armory character\'s progress in each of the main achievement categories, and has a filterable list of achievements including date completed. All of the normal column and list filters are available, along with some new ones! You can filter the list by earned, in progress or complete achievements – complete are displayed by default – or click on any of the category progress bars to only display achievements from that category.\r\n\r\n[/tab]\r\n\r\n[tab name=Completion_Tracker]\r\n\r\n[img src=static/images/help/profiler/quests.jpg float=right width=450]Thanks to some fancy features in the [url=/client]Wowhead Client[/url] and Blizzard\'s [url=http://us.battle.net/wow/en/forum/2626217/]Community Platform API[/url], you can use the Profiler\'s [b]Completion Tracker[/b] feature to keep track of your quests, achievements, pets, mounts, recipes, and more!\r\n\r\n[h3]Getting Started[/h3]\r\n\r\nIn order to start tracking your completion data, all you need to do is visit your character\'s page on the profiler and resync it. This will automatically collect data about your character\'s completed achievements, companion pets, mounts, quests, recipes, reputations and titles.\r\n\r\n[h3][img src=static/images/help/profiler/completion.jpg float=right]Tracking Your Completion Data[/h3]\r\n\r\nOnce you\'ve got your data up on the site, it will be available in the form of five new tabs: [b]mounts[/b], [b]companions[/b], [b]recipes[/b], [b]quests[/b], and [b]titles[/b].\r\n\r\nIf you open the mounts, companions, or titles tabs, you\'ll immediately be greeted by a list of all the entries you\'ve already completed. You can cycle through the different tabs to see the ones you already have, the ones you still have yet to collect, a complete list, or a list of just the ones you\'ve "excluded" (more on that shortly). You can also use the "Search within results" box to search the list based on a keyword, just like you can with other search results in the database.\r\n\r\nThe recipe, and quest tabs, like the Achievements tab, contain more entries—so you\'ll be presented with a box like the one shown above. From there, all you have to do is click one of the progress bars to see the complete tabbed list in each category.\r\n\r\n[h3]Exclusions[/h3]\r\n\r\nWhen you\'re trying to make sure we check off every quest, achievement, or mount on our list, everyone knows that there are some that you just don\'t want to bother with. To that end, we\'ve created [b]exclusions[/b].\r\n\r\n[img src=static/images/help/profiler/exclusions.jpg float=right]Using exclusions, you can flag certain quests, mounts, achievements, recipes, pets, or titles that "don\'t count" toward your completion total. When you exclude (for example) a quest, that quest no longer appears in "incomplete" listings, and the total number of quests in that category is reduced by one.\r\n\r\n[b]For example:[/b] There are 632 quests in the "Eastern Kingdoms" category. If I were to decide that [quest=367] is for noobs and I don\'t want to count it, then all I have to do is put a check in the box next to the quest and click "Exclude". After I do so, the Eastern Kingdoms progress bar will only show [i]631[/i] quests total—the remaining quest will appear in the "Excluded" tab but won\'t be counted for anything else.\r\n\r\nIf you want to re-include a quest, just go to the "Excluded" tab and then use the checkboxes to restore as many as you like. You can do the same thing for achievements, titles, mounts, pets, or recipes.\r\n\r\nIf you [b]complete[/b] a quest that you have excluded, it will show in the progress bar as a [b]+1[/b]. Example: If there are 31 quests in the "Miscellaneous" category, and I\'ve completed 20 quests and excluded 1, the progress bar will show [b]20/30[/b]. If I have completed [i]the quest that I excluded[/i], then the progress bar will show [b]20(+1)/30[/b]. If I then go on to complete ALL the quests in that category (including the one I excluded), the progress bar will show [b]30(+1)/30[/b].\r\n\r\n[b]Exclusion Manager[/b]\r\nThe companions and mounts tabs let you manage your exclusions en masse with the Exclusion Manager. Just click the "Manage Exclusions" button on top of the tabs to see a list of convenient categories you might want to exclude. There\'s also a "reset all" button here to let you wipe all of your exclusions and start over.\r\n\r\n[b]Note:[/b] The Exclusion Manager is currently only available for companions and mounts.\r\n\r\n[i]Tip: Exclusions are tied to your account, not to a particular character. This is so even when you look at someone else\'s character, you\'re judging them by [/i]your[i] completion standards, not anyone else\'s![/i] \r\n\r\n[/tab]\r\n\r\n[tab name=Calculations]\r\n\r\nMost of the information we display is pretty straightforward. A lot of it, particularly the stats on items, is readily available in our database and on various tooltips. There are some new numbers on profile pages that you may ask, what does this number mean? How was it calculated?\r\n[h3]Base Statistics[/h3]\r\nA character\'s five base statistics are determined primarily by his or her class and level. This base amount has a modifier applied to it depending on the character\'s race. We gathered an extensive amount of data from the armory to come up with these base numbers, using untalented individuals of every race, class, and level combination. Because racial modifiers are consistent, we are able to create statistics for "fake" race and class combos using the data we already know. However, the Armory does not give data on characters below level 10 or Death Knights below level 55, so we have no statistic information for these profiles. To simplify things, we have set a minimum level for custom profiles based on the available statistics.\r\n[h3]Gear Score[/h3]\r\nOkay, so a lot of sites have gear scores. Most of them (ours included) are based around the [url=http://www.wowwiki.com/Item_level]item budget[/url] Blizzard uses to determine how much of each stat can be on an item. This budget is calculated using the item\'s level, quality, and slot, and we use the budget as the item\'s gear score. You can view a complete breakdown of an item\'s gear score by mousing over it in the [url=/?help=profiler#profiler-inventory-and-talents]gear summary[/url] at the bottom of the character tab. You can view a breakdown of a profile\'s total gear score by mousing over it in the Quick Facts box, also on the character tab.\r\n\r\nEach gear score is color coded based on the item levels of the gear in reference to the character level. [b][color=q0]Grey[/color][/b] for poor, [b][color=q1]White[/color][/b] for common, [b][color=q2]Green[/color][/b] for uncommon, [b][color=q3]Blue[/color][/b] for rare, [b][color=q4]Purple[/color][/b] for epic and [b][color=q5]Orange[/color][/b] for legendary. For example, a level 70 character wearing high item-level, raiding epics from [zone=3606] and [zone=3959] will have a purple-colored gearscore, as their items are considerably "epic" quality for their level. However, the same character at 80, if wearing this same gear, will have the gearscore colored blue as the items are of lower-than-optimal quality for their level.\r\n\r\nThe value of an empty socket was generated using the gear score of appropriate gems for the item in question, and subtracted from the item\'s score. This allows us to score unsocketed items lower than an item without sockets of the same level, quality, and slot. Items with better than expected gems will receive higher scores, and items with lower quality gems (or no gems at all) will receive lower scores.\r\n\r\nThe values of enchants are based off of the level of the enchantment. Endgame enchantments are 20 points, profession perks are 40 points, etc. The numbers go down from there.\r\n\r\nYou may notice that some profiles have different gear scores for the same item. There is an extreme difference in budget between a two-handed or one-handed weapon, which causes a discrepancy in scores between characters who should be fairly equal according to the level of their gear. To address this, the gear score of weapons has been normalized so that a character with appropriate weapon choices has the equivalent score of two two-handed weapons. Appropriate weapons are determined by your class and spec; for example, an enhancement shaman should dual wield one handed weapons, a protection warrior should have a one-hander and shield, etc. For classes which the melee weapons don\'t really matter – like hunters or spellcasters – anything they can use is considered appropriate.\r\n\r\n[i]Note: Gear score does not take into account the stats of the item. It is a measurement of quality of gear, not whether the stats on the gear are suited to the character\'s spec.[/i]\r\n\r\n[h3]Guild Scores[/h3]\r\nGuild gear scores and achievement points are derived using a weighted average of all of the known characters in that guild. Guilds with at least 25 level 80 players receive full benefit of the top 25 characters\' gear scores, while guilds with at least 10 level 80 characters receive a slight penalty, at least 1 level 80 a moderate penalty, and no level 80 characters a severe penalty. This is to prevent small guilds and bank alts from appearing to have higher scores than legitimate raiding guilds. Instead of being based on level, achievement point averages are based around 1,500 points, but the same penalties apply.\r\n\r\n[/tab]\r\n\r\n[/tabs]', NULL), - (-13, 4, 0, '[menu tab=2 path=2,13,4]Can\'t find the answer you were looking for? Just [url=/?aboutus#contact]contact us[/url], or post on our [url=/?forums&board=1]forums[/url]! \r\n\r\n[toc]\r\n\r\n[h2]General Usage[/h2]\r\n[ul]\r\n[li][screenshot url=static/images/help/talent-calculator/glyphs.jpg thumb=static/images/help/talent-calculator/glyphs2.jpg width=268 height=218 float=right][/screenshot][b]Selecting a class[/b] - Easily select a class\' talent tree by chosing from the class icon at the top, or from the dropdown menu. Clicking on a class\' name at the top left of the calculator will open that class\' page here on Wowhead, providing even more detailed information![/li] \r\n[li][b]Adding or removing talent points[/b] - To add points in a talent simply click the appropriate talent. To remove points, you can either right-click (or Shift+click) the talent.[/li]\r\n[li][b]Adding glyphs[/b] - Click on an empty glyph slot to open a picker window from which you can make your selection. To remove a glyph, simply right-click (or Shift+click) that glyph.[/li]\r\n[li][b]Linking to a build[/b] – Simply copy the auto-updating URL from your browser\'s address bar.[/li]\r\n[/ul]\r\n\r\n[h2]Tools + Options[/h2]\r\n[ul]\r\n[li][b]Reset all[/b] - Resets all talents across all trees.[/li]\r\n[li][img src=static/images/help/talent-calculator/options.jpg float=right][b]Reset tree[/b] - Clicking the red X at the top right corner of a talent tree will reset all talents in that particular tree. Other trees will not be reset.[/li]\r\n[li][b]Lock / Unlock[/b] - Locks or unlocks the talent build, preventing (or allowing) changes to be made. Linking to a build will automatically lock talents.[/li]\r\n[li][b]Import[/b] – Displays a pop-up text window where you can enter the URL of a talent build made with [url=http://www.wowarmory.com/talent-calc.xml]Blizzard\'s talent calculator[/url]. Be sure that you first select the "Link to this build" option in the Blizzard talent calculator so that the URL will be properly formatted for importing.[/li]\r\n[li][b]Print[/b] - Opens up a new, printer-friendly page with a textual representation of your chosen talents. Nice if you want to paste the talents you\'ve chosen somewhere, and would prefer it written out.[/li]\r\n[li][b]Link[/b] - Locks your chosen talents and creates a link to your build. Use this option to easily create a URL to share your build with others![/li]\r\n[/ul]\r\n\r\n[h2]Useful Tips[/h2]\r\n\r\n[ul]\r\n[li]When the calculator is locked, you can click talents and glyphs to view their corresponding spell or item page.[/li]\r\n[li]If you\'re building a third-party application, you can link to our talent calculator by using Blizzard-style URLs such as:\r\n[code]http://www.wowhead.com/talent#hunter-512002015051122431005311500053052002300100000000000000000000000000000000000000000[/code][/li]\r\n[/ul]', NULL), - (-13, 1, 0, '[menu tab=2 path=2,13,1]\r\n\r\n[url=item=35350][img src=static/images/help/modelviewer/ss-viewin3d.gif float=right][/url]Wowhead now has a model viewer that will let you see the items and NPCs in the game in full 3D!\r\n\r\nYou can use the dropdown menus to select which character model you want to display armor pieces on, and the model viewer will remember your choice.\r\n\r\nThere are two different versions of the model viewer available, one written in Flash, and the other one written in Java. Wowhead should remember which version you used last time, and will automatically open that model viewer the next time you click on the "View in 3D" button.\r\n\r\nIf you have any issues, please report them [url=/?forums&topic=202524]here[/url]!\r\n\r\n[i]Tip: You can close the box by clicking anywhere outside of the box.[/i]\r\n\r\n[h2]Modes[/h2]\r\n\r\n[tabs name=mode]\r\n\r\n[tab name=Flash]\r\n\r\n[url=item=34092][img src=static/images/help/modelviewer/ss-flash.png float=right][/url]The [b]Flash[/b] viewer is simple, quick to load, and should work on nearly all browsers. The Flash viewer is the default viewer, and all models will automatically load in the Flash Viewer unless you specify otherwise.\r\n\r\nIt requires the latest version of [url=http://www.adobe.com/go/BONRN]Flash[/url] to be installed on your computer.\r\n\r\n[h3]Controls[/h3]\r\n[ul]\r\n[li][b]Rotate[/b] – Click and drag / arrow keys[/li]\r\n[li][b]Zoom[/b] – Mousewheel / A & Z keys[/li]\r\n[/ul]\r\n\r\n[h3]Features[/h3]\r\n[ul]\r\n[li]Motion blur[/li]\r\n[li]Full screen mode[/li]\r\n[/ul]\r\n\r\n[/tab]\r\n\r\n[tab name=Java]\r\n\r\n[url=/?item=35350][img src=static/images/help/modelviewer/ss-java.png float=right][/url]The Java viewer is slower to initialize than the Flash Viewer, but once it\'s initialized it renders in [b]much greater[/b] detail. Most browsers will only need to initialize it once, and subsequent loads will be much faster. Some browsers may ask you to accept a security certificate when you initialize the viewer.\r\n\r\nIt requires the latest version of [url=http://jdl.sun.com/webapps/getjava/BrowserRedirect?locale=en&host=www.java.com]Java[/url] to be installed on your computer.\r\n\r\n[h3]Controls[/h3]\r\n[ul]\r\n[li][b]Rotate[/b] – Click and drag[/li]\r\n[li][b]Zoom[/b] – Mousewheel[/li]\r\n[li][b]Move[/b] – Right-click and drag[/li]\r\n[/ul]\r\n\r\n[h3]Features[/h3]\r\n[ul]\r\n[li]3D acceleration[/li]\r\n[li]Animations on NPCs, character models, small pets, and mounts[/li]\r\n[/ul]\r\n\r\n[/tab]\r\n\r\n[/tabs]\r\n', NULL), - (-10, 0, 0, '[menu tab=2 path=2,10]\r\n\r\n[div float=right align=right][url=http://wow.joystiq.com/2010/04/14/breakfast-topic-using-irl-irl/][img src=static/images/help/tooltips/ss-wowcom.png][/url]\r\n[small]Tooltips in action on [url=http://wow.joystiq.com/2010/04/14/breakfast-topic-using-irl-irl/]WoW Insider[/url][/small][/div]\r\n\r\nIt\'s never been easier to add tooltips to your site.\r\n\r\n[ol]\r\n[li]Add this piece of HTML code in the section of your page:\r\n[code][/code][/li]\r\n[li]You are done![/li]\r\n[/ol]\r\n\r\nLinks found on your site will now sport a [b]tooltip[/b] and an [b]icon[/b]. The following pages are supported: achievement, profile, item, npc, object, spell, quest. Icons show up by default, you can customize the colors of your links, and easily rename them!\r\n\r\nYou can check out this [url=STATIC_URL/widgets/power/demo.html]working demo[/url], and see how easy it is!\r\n\r\n[h2]Related[/h2]\r\n\r\n[tabs name=Related]\r\n\r\n[tab name="Advanced usage"]\r\n\r\nOnce you have the [/code]\r\n[/tab]\r\n\r\n[tab name="XML feeds"]\r\n\r\n[h3]Items[/h3]\r\nAlso available are our item XML feeds. Every item in the database has a corresponding XML feed. You can reach those feeds either by ID or by name. For example:\r\n\r\n[ul]\r\n[li]By ID: HOST_URL?item=52021&xml[/li]\r\n[li]By name: HOST_URL?item=iceblade%20arrow&xml[/li]\r\n[/ul]\r\n\r\n[/tab]\r\n\r\n[tab name="Other resources"]\r\n\r\nInterested in using our script in your forum? Check out [url=http://wowhead.com/forums&topic=3464]this thread[/url] for information on implementing it on many popular forum systems (phpBB, vBulletin, etc.) or check out the handy guides written by our users:\r\n\r\n[ul]\r\n[li][url=http://wowhead.com/forums&topic=3464#p37094]vBulletin[/url][/li]\r\n[li]phpBB: [url=http://wowhead.com/forums&topic=3464#p37492]2.x.x[/url] - [url=http://wowhead.com/forums&topic=3464.6#p58403]2.x.x Mod Version[/url] | [url=http://wowhead.com/forums&topic=14347&p=126922]3.0[/url] [small]by craCkpot[/small] - [url=http://wowhead.com/forums&topic=3464#p37204]3.0[/url] [small]by marcimi[/small] - [url=http://wowhead.com/forums&topic=3464.3#p42858]3.0 Mod Version[/url][/li]\r\n[li][url=http://wowhead.com/forums&topic=3464#p37618]Simple Machines Forum (SMF)[/url][/li]\r\n[li][url=http://wowhead.com/forums&topic=3464.3&p=4080#p40631]Invision Power Board (IPB)[/url][/li]\r\n[li][url=http://wowhead.com/forums&topic=3464.3&p=42952#p42952]WordPress Blog[/url] ([url=http://wowhead.com/forums&topic=3464.4#p43652]Plugin Version[/url])[/li]\r\n[li][url=http://wowhead.com/forums&topic=3464.7&p=63338#p61443]PHP Nuke-Evolution[/url][/li]\r\n[li][url=http://wowhead.com/forums&topic=3464.3#p43232]MyBB[/url][/li]\r\n[li][url=http://wowhead.com/forums&topic=3464.6#p48648]TikiWiki[/url][/li]\r\n[li][url=http://wowhead.com/forums&topic=3464.6#p49640]YaBB[/url][/li]\r\n[li][url=http://wowhead.com/forums&topic=3464.5#p46801]Drupal[/url][/li]\r\n[li][url=http://wowhead.com/forums&topic=3464.3#p42456]PunBB[/url][/li]\r\n[li][url=http://wowhead.com/forums&topic=10938]Dojo[/url][/li]\r\n[/ul]\r\n\r\n[/tab]\r\n\r\n[/tabs]', NULL), - (-16, 0, 0, '[menu tab=2 path=2,16]\r\n\r\nThe code below will produce an iframe that contains the Wowhead logo and a search box.\r\n\r\n[code]\r\n[/code]\r\n\r\n[h3]Parameters[/h3]\r\n\r\n[ul]\r\n[li][b]wowhead_searchbox_format[/b] – String that specifies how big the iframe should be. The following values can be used:\r\n[pad]\r\n[table width=100%]\r\n[tr]\r\n[td width=20% align=center valign=top]\r\n"160x200"\r\n[img src=STATIC_URL/images/help/searchbox/preview-160x200.png]\r\n[/td]\r\n[td width=20% align=center valign=top]\r\n"120x200"\r\n[img src=STATIC_URL/images/help/searchbox/preview-120x200.png]\r\n[/td]\r\n[td width=20% align=center valign=top]\r\n"160x120"\r\n[img src=STATIC_URL/images/help/searchbox/preview-160x120.png]\r\n[/td]\r\n[td width=20% align=center valign=top]\r\n"150x120"\r\n[img src=STATIC_URL/images/help/searchbox/preview-150x120.png]\r\n[/td]\r\n[td width=20% align=center valign=top]\r\n"120x120"\r\n[img src=STATIC_URL/images/help/searchbox/preview-120x120.png]\r\n[/td]\r\n[/tr]\r\n[/table]\r\n[/li]\r\n[/ul]\r\n\r\n[h3]Tips[/h3]\r\n\r\n[ul]\r\n[li]You can style the iframe (e.g. adding a border) by using the following class name in your CSS code:\r\n[code].aowow-searchbox { ... }[/code][/li]\r\n[/ul]', NULL), - (-8, 0, 0, '[menu tab=2 path=2,8]\r\n\r\n[div float=right align=right][img src=STATIC_URL/images/help/searchplugins/ss-searchsuggestions.png]\r\n[small]Also features search suggestions![/small]\r\n[/div]\r\n\r\nSearch plugins make it easy to search Wowhead right from your browser!\r\n\r\n[toc h3=false]\r\n\r\n[h2][img src=STATIC_URL/images/help/searchplugins/firefox.gif border=0 margin=5 float=left][img src=STATIC_URL/images/help/searchplugins/ie.gif border=0 float=left]Firefox / Internet Explorer[/h2]\r\n\r\n[div clear=left][/div]Click on the button below to install the Wowhead search plugin in your browser.\r\n\r\n[pad]\r\n\r\n[script]\r\nfunction addPlugin()\r\n{\r\n try {\r\n if(!$.browser.msie && !$.browser.mozilla) {\r\n throw(\'FAIL\');\r\n }\r\n\r\n loc = g_locale.id ? \'-\' + g_locale.name.substr(0,2) : \'\';\r\n window.external.AddSearchProvider(\'STATIC_URL/download/searchplugins/aowow\' + loc + \'.xml\');\r\n }\r\n catch(e)\r\n {\r\n alert(\'This feature is only for Firefox 2+ and Internet Explorer 7+.\');\r\n }\r\n}\r\n[/script]\r\n\r\n[html]Install pluginInstall plugin[/html]\r\n\r\n[div clear=left][/div][pad]\r\n\r\n[h2][img src=STATIC_URL/images/help/searchplugins/opera.gif border=0 float=left]Opera[/h2]\r\n\r\n[div clear=left][/div]\r\n\r\n[ul]\r\n[li]Right-click on the search box on the [url=/]homepage[/url].[/li]\r\n[li]Select "Create Search" in the menu.[/li]\r\n[li]Fill the form as follows:\r\n[pad]\r\n[img src=STATIC_URL/images/help/searchplugins/ss-opera.png border=0]\r\n[pad][/li]\r\n[li]Save your changes, and you\'ll be able to perform Wowhead searches by typing "wh" followed by the search terms in the address bar (e.g. wh sword).[/li]\r\n[/ul]\r\n', NULL), - (-3, 0, 0, '[small]no questions have been asked yet[/small]\r\n\r\nbesides .. yes, i\'m insane.', NULL), - (-7, 0, 0, '[small]this page for example[/small]', NULL), - (0, 0, 0, '[h3]This is [s]Sparta![/s] [u]Aowow[/u][/h3]\r\n\r\nA project for private servers to sensibly display the vast amount of data a private server contains.\r\n\r\nBuilt with TrinityCore in my neck, but i\'m trying to get away from that .. some time.\r\nWith it\'s own data structure it shouldn\'t be too hard to write a converter for MaNGOS\r\n\r\nThe expected version is 3.3.5 (12340), everything else will get messy.', NULL); - -REPLACE INTO `aowow_announcements` (`id`, `page`, `name`, `style`, `mode`, `status`, `text_loc0`, `text_loc2`, `text_loc3`, `text_loc6`, `text_loc8`) VALUES - (4, 'compare', 'Help: Item Comparison Tool', 'padding-left: 55px; background-image: url(static/images/announcements/help-small.png); background-position: 10px center', 1, 1, 'First time? - Don\'t be shy! Just check out our [url=?help=item-comparison]Help page[/url]!', 'Première visite? - Ne soyez pas intimidé! Vous n\'avez qu\'à lire notre [url=?help=item-comparison]page d\'aide[/url] !', 'Euer erstes Mal? Nur keine falsche Scheu! Schaut einfach auf unsere [url=?help=item-comparison]Hilfeseite[/url]!', '¿Tu primera vez? ¡No seas vergonzoso! !Mira nuestra [url=?help=item-comparison]página de ayuda[/url]!', 'Впервые? Не стесняйтесь посетить нашу [url=?help=item-comparison]справочную страницу[/url]!'), - (3, 'profile', 'Quick Help: Profiler', 'padding-left: 80px; background-image: url(static/images/announcements/help-large.gif); background-position: 10px center', 1, 1, '[h3]First Time?[/h3]\n\nThe [b]Profiler[/b] lets you [span class=tip title="e.g. See how\'d you look as a different race!"]edit your character[/span], find gear upgrades, check your gear score, and more!\n\n[ul]\n[li][b]Right-click[/b] slots to change items, add gems/enchants, or find upgrades.[/li]\n[li]Use the [b]Claim character[/b] button to add your own characters to your [url=?user]user page[/url].[/li]\n[li]Save a modified character to your Wowhead account by using the [b]Save as[/b] button.[/li]\n[li][b]Statistics[/b] will update in real time as you make tweaks.[/li]\n[/ul]\n\nFor more information, check out our extensive [b][url=?help=profiler]help page[/url][/b]!', '', '', '', ''); diff --git a/setup/u1_account.sql b/setup/u1_account.sql deleted file mode 100644 index 4e78a2a2..00000000 --- a/setup/u1_account.sql +++ /dev/null @@ -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 */; diff --git a/static/css/Book.css b/static/css/Book.css index 07b88f0f..15e3c955 100644 --- a/static/css/Book.css +++ b/static/css/Book.css @@ -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; } diff --git a/static/css/Mapper.css b/static/css/Mapper.css deleted file mode 100644 index b1af0c62..00000000 --- a/static/css/Mapper.css +++ /dev/null @@ -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; } diff --git a/static/css/Mapper_ie6.css b/static/css/Mapper_ie6.css deleted file mode 100644 index c27b13d7..00000000 --- a/static/css/Mapper_ie6.css +++ /dev/null @@ -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'); } \ No newline at end of file diff --git a/static/css/Profiler.css b/static/css/Profiler.css index 8ed56425..981166af 100644 --- a/static/css/Profiler.css +++ b/static/css/Profiler.css @@ -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; } diff --git a/static/css/Summary.css b/static/css/Summary.css index cdd0e05d..dc8f0229 100644 --- a/static/css/Summary.css +++ b/static/css/Summary.css @@ -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; } - diff --git a/static/css/TalentCalc_ie6.css b/static/css/TalentCalc_ie6.css deleted file mode 100644 index 853df8cd..00000000 --- a/static/css/TalentCalc_ie6.css +++ /dev/null @@ -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); -} diff --git a/static/css/TalentCalc_ie67.css b/static/css/TalentCalc_ie67.css deleted file mode 100644 index 8961b509..00000000 --- a/static/css/TalentCalc_ie67.css +++ /dev/null @@ -1,7 +0,0 @@ -/* - TalentCalc_ie67.css version 278 -*/ -.talentcalc-glyphpicker .listview table -{ - width:97%; -} \ No newline at end of file diff --git a/static/css/aowow.css b/static/css/aowow.css new file mode 100644 index 00000000..5a7b1f59 --- /dev/null +++ b/static/css/aowow.css @@ -0,0 +1,3704 @@ +/*************/ +/* RESET CSS */ +/*************/ + +form { + padding: 0; + margin: 0; + display: inline; +} + +img, iframe { + border: 0; +} + +p { + margin: 0; + padding: 0; +} + +/******************/ +/* DEFAULT STYLES */ +/******************/ + +body { + background: black; + margin: 0; + padding: 0; + font-family: Arial, sans-serif; + font-size: 13px; + color: #ccc; +} + +small { + font-size: 11px; +} + +a { + color: #FFD100; + cursor: pointer; + outline: none; +} + +a:hover { + color: white; +} + +/***********/ +/* GENERAL */ +/***********/ + +a.selected, a.selected:hover { + cursor: default; + color: white; + font-weight: bold; + text-decoration: none !important; +} + +a.open { + color: white; +} + +img.border { + border: 2px solid #404040; + background-color: #080808; + + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +a:hover img.border { + border-color: #505050; + background-color: #101010; +} + +.pad { + padding-bottom: 10px; +} + +.pad2 { + padding-bottom: 1em; +} + +.pad3 { + padding-bottom: 2em; +} + +.clear { + clear: both; +} + +.tip { + border-bottom: 1px dotted #808080; + cursor: help; +} + +a.tip { + cursor: pointer !important; + text-decoration: none; + border-bottom-color: #404040; +} + +a span.tip { + cursor: pointer !important; +} + +h1 a, h2 a, h3 a, h4 a, h5 a, +h1 a.icontiny span, +h2 a.icontiny span, +h3 a.icontiny span, +h4 a.icontiny span, +h5 a.icontiny span { text-decoration:none !important; } + +.entryc .quote, .comment-body .quote, +.text .quote, .text blockquote, +.quote-blizz, .quote-wh, .minibox { + background:#1b1b1b; + padding: 15px; + margin:15px 0; + font-style: normal; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + display:table; + border-collapse:separate; +} + +.entryc .minibox h3 { margin-top:0; } + +.quote .quote, .quote .quote .quote .quote { background:#111; } +.quote .quote .quote { background:#1b1b1b; } + +.quote .quote { + background:rgba(255,255,255,.065)!important; +} + +.entryc .quote:after, .comment-body .quote:after, +.text .quote:after, .text blockquote:after, +.quote-blizz:after, .quote-wh:after { display:block; } + +.quote.continue-reading { margin-top:0; } + +.entryc .quote table, .comment-body .quote table, +.text .quote table, .text blockquote table, +.quote-blizz table, .quote-wh table { + border:1px solid #555; + border-collapse:collapse; +} + +.text .quote, .text blockquote { + word-wrap:break-word; + overflow:auto; +} + +/**************************************************************/ +/* CSS BELOW TO BE MOVED TO A PROPER LOCATION AND/OR REFACTOR */ +/**************************************************************/ + +.msg-success { + color: #33cc33; + font-weight: bold; + font-size: 11px; +} + +.msg-failure { + color: #cc3333; + font-weight: bold; + font-size: 11px; +} + +.random-enchantments { + float: left; + width: 47%; +} + +h1.h1-icon { + padding-top: 5px !important; +} + +div.h1-icon { + float: left; + position: relative; + top: -4px; + left: -4px; + margin-right: 2px; + margin-bottom: -4px; +} + +#description.left, #article-generic.left { clear:left; } + +a.premium-user-badge { + float: right; + position: relative; + left: 10px; + top: -25px; + width: 324px; + height: 213px; + background: url(../images/premium/user-badge.png) no-repeat; +} + +.premium-feature-icon-small { + width: 74px; + height: 22px; + background: url(../images/premium/premium-small.png) center right no-repeat; + padding-right: 74px; +} + +.notice-box { + padding: 8px; + color: #dddddd; + margin-bottom: 10px; + text-align: center; + background: #141414; + border: 1px solid #101010; + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.reputation-negative-amount span { /* The whole text has the class; the number is spanned */ + color: red; + font-weight: bold; +} + +div.announcement-pagetop div.announcement-inner { + margin-top: 10px; +} + +div.announcement-pagetop div.announcement-inner, div.announcement-contenttop div.announcement-inner { + background-color: #141414; + border: 1px solid #101010; + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +div.announcement-inner { + background-position: 0 center; + background-repeat: no-repeat; + margin-bottom: 10px; + padding: 8px; + position: relative; +} + +/* Close button */ +a.announcement-close { + display: block; + width: 16px; + height: 16px; + background: url(../images/icons/delete.gif) center center no-repeat; + position: absolute; + right: 8px; + top: 8px; +} + +/* .text overrides */ +div.announcement ul { + margin: 0.25em 0 !important; +} +div.announcement h3 { + margin-top: 0 !important; + margin-bottom: 0.25em !important; +} +div.announcement li { + line-height: 1.75em !important; +} + +/* jQuery replacement */ +.announcement { + -webkit-transition: .5s ease; + -moz-transition: .5s ease; + -o-transition: .5s ease; + -ms-transition: .5s ease; + transition: .5s ease; +} + +.comment-wrapper { + padding: 0 6px 6px 6px; +} + +.comment { + color: #dddddd; + line-height: 1.5em !important; + padding: 0 10px 10px 0; + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.comment0 { + background-color: #242424; +} + +.comment1 { + background-color: #292929; +} + +.comment2 { + background: #1B1B1B; +} + +.comment-lowrated { + background-color: #1d1d1d; +} + +.comment-lowrated:hover { + background-color: #212121; +} + +.comment-deleted { + background: #402424; +} + +.comment-deleted:hover { + background: #481b1b; +} + +.comment-outofdate { + background: #322c1c; +} + +.comment-collapsed .comment { + background: #202020; +} + +.comment-header { + margin: 0; + padding: 8px 2px 16px 2px; + font-size: 11px; + color: #bbbbbb; +} + +.comment-header var { + font-style: normal; +} + +.comment-header var a { + font-weight: bold; +} + +.comment-header var a.q0 { + color: #bbbbbb !important; + font-weight: normal; + text-decoration: none; +} + +.comment-header var a.q0:hover { + text-decoration: underline; +} + +.comment-header em { + color: #dddddd; + font-style: normal; + float: right; +} + +.comment-collapsed .comment { + padding: 0 10px; +} + +.comment-collapsed .comment-header { + padding: 8px 2px; +} + +.comment2 .comment-header { + color: #888888; +} + +.comment-rating { float: right; color: white; padding-left: 20px; } +.comment-rating b a { font-weight: bold; color: white; text-decoration: none; } +.comment-rating b a:hover { text-decoration: underline; } +.comment-rating span { font-weight: bold } +.comment-rating span a { color: #FFD100; } + +.comment-rating span a:hover { color: white; text-decoration: none; } + +.comment-body, .comment-body-indent { + overflow: auto; +} + +.comment-bt, .comment-bt ol li div, .comment-bt li div, .comment-bt ol li div, div.comment-bt li div { + color: #999999 !important; +} + +.comment-blue, .comment-blue ol li div, .comment-blue li div, .comment-blue ol li div, div.comment-blue li div { + color: #00C0FF !important; +} + +.comment-green, .comment-green ol li div, .comment-green li div { + color: #5DF644 !important; +} + +.comment-gold, .comment-gold ol li div, .comment-gold li div { + color: #D7CEA4 !important; +} + +.comment-pink, .comment-pink ol li div, .comment-pink li div { + color: #FF99FF !important; +} + +.comment-edit-modes { + font-size: 11px; +} + +.comment-edit-modes a { + padding: 0 5px; +} + +.comment-edit-buttons { + padding-top: 4px; +} + +.comment-edit-body { + font-size: 11px; +} + +.comment-edit-body textarea { + width: 98%; + height: 11em; + font-family: Arial, sans-serif; + font-size: 16px; + margin: 3px 0; +} + +.comment-lastedit { + padding-top: 4px; + font-style: italic; + color: #9d9d9d; + font-size: 11px; +} + +.comment-lastedit a { + color: #9d9d9d; +} + +.comment-links { text-align: right; font-size: 11px; padding: 0 2px 2px 0; color: #dddddd } +.comment-links a { font-weight: normal; } +.comment-links span, .comment-links span a { padding-left: 6px } + +.comment-markupdoc { + width: auto; + border-collapse: collapse; + background-color: #242424; + border: 2px solid #404040; +} +.comment-markupdoc th { + background: #404040; + text-align: center; + font-weight: bolder; +} +.comment-markupdoc tr:hover { background-color: #202020 } +.comment-markupdoc td, .comment-markupdoc th { + padding: 4px; + border-top: 1px solid #404040; + border-bottom: 1px solid #404040; + border-left: 1px solid #282828; + border-right: 1px solid #282828; +} + +.comment .text .quote { + background-color: #0C0C0C; +} + +.comment .text .quote { + border-color: #080808; +} + +#tab-comments .listview-mode-div, +#tab-english-comments .listview-mode-div { + padding-top: 6px; +} + +.listview-aci .comment-indent { + padding-left: 32px; +} + +.menu-buttons { + padding: 4px 0 0 5px; +} + +div.dialog { + font-size: 12px; + background: #303030; + padding: 10px 10px 0 10px; +} + +div.dialog .text { + padding: 10px; + background: #141414; +} + +div.dialog table { + width: 100%; + border-collapse: collapse; +} + +div.dialog th { + text-align: right; + font-weight: normal; + white-space: nowrap; + vertical-align: top; + line-height: 24px; + padding: 3px; +} + +div.dialog td { + vertical-align: top; + padding: 3px; +} + +div.dialog textarea { + font-family: Arial, sans-serif; + font-size: 16px; + margin: 3px 0; +} + +.dialog-thumbup, a.dialog-thumbdown, +a.dialog-okay, a.dialog-yes, +a.dialog-cancel, a.dialog-no, +a.dialog-question, a.dialog-arrow { + padding-right: 22px; + margin: 10px 0 10px 10px; + line-height: 22px; + height: 22px; + display: block; + float: right; + color: #a0a0a0; + text-transform: uppercase; + text-decoration: none; + font-size: 15px; + font-family: Tahoma, sans-serif !important; +} + +.dialog-thumbup:hover, a.dialog-thumbdown:hover, +a.dialog-okay:hover, a.dialog-yes:hover, +a.dialog-cancel:hover, a.dialog-no:hover, +a.dialog-question:hover, a.dialog-arrow:hover { + color: #e0e0e0; +} + +.dialog-cancel { + padding-right: 24px !important; +} + +.dialog-thumbup { + background: url(../images/icons/dialog_icons.gif) right 0 no-repeat; +} + +.dialog-thumbup:hover { + background-position: right -154px; +} + +.dialog-thumbdown { + background: url(../images/icons/dialog_icons.gif) right -22px no-repeat; +} + +.dialog-thumbdown:hover { + background-position: right -176px; +} + +.dialog-okay { + background: url(../images/icons/dialog_icons.gif) right -44px no-repeat; +} + +.dialog-okay:hover { + background-position: right -198px; +} + +.dialog-cancel { + background: url(../images/icons/dialog_icons.gif) right -66px no-repeat; +} + +.dialog-cancel:hover { + background-position: right -220px; +} + +.dialog-question { + background: url(../images/icons/dialog_icons.gif) right -88px no-repeat; +} + +.dialog-question:hover { + background-position: right -242px; +} + +.dialog-arrow { + background: url(../images/icons/dialog_icons.gif) right -132px no-repeat; +} + +.dialog-arrow:hover { + background-position: right -286px; +} + +a.dialog-left { + padding-left: 22px; + height: 22px; + display: block; + float: left; + background: url(../images/icons/dialog_icons.gif) 0 -110px no-repeat; +} + +a.dialog-right { + padding-right: 22px; + height: 22px; + display: block; + float: left; + background: url(../images/icons/dialog_icons.gif) right -264px no-repeat; +} + +/* Filters */ + +#fi { color: #cccccc; } +#fi table { border-collapse: collapse; border: 0; } +#fi table td { padding: 0; border: 0; white-space: nowrap; } +#fi .padded { padding-top: 12px; } +#fi .padded2 { padding-top: 8px; clear:both;} +#fi .rightselect { margin-top: 2px; } +#fi .rightpanel { float: right; text-align: right; } +#fi .rightpanel2 { float: right; text-align: right; padding-right: 10px; } +#fi .smalltextbox { text-align: center; width: 2em; } +#fi .smalltextbox2 { text-align: center; width: 2.3em; } +.criteria div { padding-bottom: 8px; } + +/* Weights */ + +#fi .merge { + margin-top: 10px; + padding: 10px; + border: 1px solid #363636; + background-color: #1A2924; + width: 300px; + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +#statweight-disclosure { + padding: 10px; + background-color: #141414; + float: left; + border: 1px solid #363636; + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +#statweight-help { position: relative } +#statweight-help div { position: absolute; right: -9px; top: -33px; } +#fi_weight { margin-top: 10px; padding-top: 12px; border-top: 1px solid #484848; } + +.iconsmall, +.iconmedium, +.iconlarge, +.iconblizzard { + position: relative; + z-index: 0; +} + +.iconsmall { width: 26px; height: 26px; } +.iconmedium { width: 44px; height: 44px; } +.iconlarge { width: 68px; height: 68px; } +.iconblizzard { width: 76px; height: 76px; } + +/* Background image (e.g. inv_sword_17) */ +.iconsmall ins, +.iconmedium ins, +.iconlarge ins, +.iconblizzard ins { + display: block; + position: absolute; + z-index: 5; + background-repeat: no-repeat; +} + +.iconsmall ins { width: 18px; height: 18px; left: 4px; top: 4px; } +.iconmedium ins { width: 36px; height: 36px; left: 4px; top: 4px; } +.iconlarge ins { width: 56px; height: 56px; left: 6px; top: 6px; } +.iconblizzard ins { width: 64px; height: 64px; left: 6px; top: 6px; } + +/* Border */ +.iconsmall del, .iconmedium del, .iconlarge del, .iconblizzard del { + display: block; + position: absolute; + left: 0; + top: 0; + z-index: 10; + background-repeat: no-repeat; +} + +.iconsmall del { width: 26px; height: 26px; background-image: url(../images/Icon/small/border/default.png); } +.iconmedium del { width: 44px; height: 44px; background-image: url(../images/Icon/medium/border/default.png); } +.iconlarge del { width: 68px; height: 68px; background-image: url(../images/Icon/large/border/default.png); } +.iconblizzard del { width: 76px; height: 76px; background-image: url(../images/Icon/blizzard/border/default.png); } + +/* Overlay (e.g. animated sparkles) */ +.iconsmall var, +.iconmedium var { + display: block; + position: absolute; + z-index: 15; + background-repeat: no-repeat; +} + +.iconsmall var { width: 26px; height: 26px; } +.iconmedium var { width: 44px; height: 44px; } + +/* Clickable area (w/ hilite effect) */ +.iconsmall a, +.iconmedium a, +.iconlarge a { + display: block; + position: absolute; + left: 3px; + top: 3px; + z-index: 20; +} + +.iconsmall a { width: 20px; height: 20px; background: url(../images/Icon/small/hilite/default.png) no-repeat 20px 0; } +.iconmedium a { width: 38px; height: 38px; background: url(../images/Icon/medium/hilite/default.png) no-repeat 38px 0; } +.iconlarge a { width: 62px; height: 62px; background: url(../images/Icon/large/hilite/default.png) no-repeat 62px 0; } + +.iconsmall a:hover, +.iconmedium a:hover, +.iconlarge a:hover { + background-position: 0 0; +} + +/**********/ +/* SOCKET */ +/**********/ + +.iconsmall-socket-meta-empty ins, +.iconsmall-socket-yellow-empty ins, +.iconsmall-socket-red-empty ins, +.iconsmall-socket-blue-empty ins, +.iconsmall-socket-prismatic-empty ins { + background-image: url(../images/Icon/small/socket/background.jpg); +} + +.iconsmall-socket-meta-empty ins { background-position: 0 0; } +.iconsmall-socket-yellow-empty ins { background-position: -36px 0; } +.iconsmall-socket-red-empty ins { background-position: -18px 0; } +.iconsmall-socket-blue-empty ins { background-position: -54px 0; } +.iconsmall-socket-prismatic-empty ins { background-position: -72px 0; } + +.iconmedium-socket-meta-empty ins, +.iconmedium-socket-yellow-empty ins, +.iconmedium-socket-red-empty ins, +.iconmedium-socket-blue-empty ins, +.iconmedium-socket-prismatic-empty ins { + background-image: url(../images/Icon/medium/socket/background.jpg); +} + +.iconmedium-socket-meta-empty ins { background-position: 0 0; } +.iconmedium-socket-yellow-empty ins { background-position: -72px 0; } +.iconmedium-socket-red-empty ins { background-position: -36px 0; } +.iconmedium-socket-blue-empty ins { background-position: -108px 0; } +.iconmedium-socket-prismatic-empty ins { background-position: -144px 0; } + +.iconsmall-socket-meta del { background-image: url(../images/Icon/small/socket/meta1.png); } +.iconsmall-socket-meta-empty del { background-image: url(../images/Icon/small/socket/meta0.png); } +.iconsmall-socket-red del { background-image: url(../images/Icon/small/socket/red1.png); } +.iconsmall-socket-red-empty del { background-image: url(../images/Icon/small/socket/red0.png); } +.iconsmall-socket-yellow del { background-image: url(../images/Icon/small/socket/yellow1.png); } +.iconsmall-socket-yellow-empty del { background-image: url(../images/Icon/small/socket/yellow0.png); } +.iconsmall-socket-blue del { background-image: url(../images/Icon/small/socket/blue1.png); } +.iconsmall-socket-blue-empty del { background-image: url(../images/Icon/small/socket/blue0.png); } +.iconsmall-socket-prismatic del { background-image: url(../images/Icon/small/socket/prismatic1.png); } +.iconsmall-socket-prismatic-empty del { background-image: url(../images/Icon/small/socket/prismatic0.png); } + +.iconmedium-socket-meta del { background-image: url(../images/Icon/medium/socket/meta1.png); } +.iconmedium-socket-meta-empty del { background-image: url(../images/Icon/medium/socket/meta0.png); } +.iconmedium-socket-red del { background-image: url(../images/Icon/medium/socket/red1.png); } +.iconmedium-socket-red-empty del { background-image: url(../images/Icon/medium/socket/red0.png); } +.iconmedium-socket-yellow del { background-image: url(../images/Icon/medium/socket/yellow1.png); } +.iconmedium-socket-yellow-empty del { background-image: url(../images/Icon/medium/socket/yellow0.png); } +.iconmedium-socket-blue del { background-image: url(../images/Icon/medium/socket/blue1.png); } +.iconmedium-socket-blue-empty del { background-image: url(../images/Icon/medium/socket/blue0.png); } +.iconmedium-socket-prismatic del { background-image: url(../images/Icon/medium/socket/prismatic1.png); } +.iconmedium-socket-prismatic-empty del { background-image: url(../images/Icon/medium/socket/prismatic0.png); } + +.iconsmall-socket-meta var { background-image: url(../images/Icon/small/socket/anim-meta.gif); } +.iconsmall-socket-yellow var { background-image: url(../images/Icon/small/socket/anim-yellow.gif); } +.iconsmall-socket-red var { background-image: url(../images/Icon/small/socket/anim-red.gif); } +.iconsmall-socket-blue var { background-image: url(../images/Icon/small/socket/anim-blue.gif); } +.iconsmall-socket-prismatic var { background-image: url(../images/Icon/small/socket/anim-prismatic.gif); } + +.iconmedium-socket-meta var { background-image: url(../images/Icon/medium/socket/anim-meta.gif); } +.iconmedium-socket-yellow var { background-image: url(../images/Icon/medium/socket/anim-yellow.gif); } +.iconmedium-socket-red var { background-image: url(../images/Icon/medium/socket/anim-red.gif); } +.iconmedium-socket-blue var { background-image: url(../images/Icon/medium/socket/anim-blue.gif); } +.iconmedium-socket-prismatic var { background-image: url(../images/Icon/medium/socket/anim-prismatic.gif); } + +.iconsmall-socket-meta a, +.iconsmall-socket-red a, +.iconsmall-socket-yellow a, +.iconsmall-socket-blue a, +.iconsmall-socket-prismatic a { + background-image: url(../images/Icon/small/hilite/socket1.png); +} + +.iconsmall-socket-meta-empty a, +.iconsmall-socket-red-empty a, +.iconsmall-socket-yellow-empty a, +.iconsmall-socket-blue-empty a, +.iconsmall-socket-prismatic-empty a { + background-image: url(../images/Icon/small/hilite/socket0.png); +} + +.iconmedium-socket-meta a, +.iconmedium-socket-red a, +.iconmedium-socket-yellow a, +.iconmedium-socket-blue a, +.iconmedium-socket-prismatic a { + background-image: url(../images/Icon/medium/hilite/socket1.png); +} + +.iconmedium-socket-meta-empty a, +.iconmedium-socket-red-empty a, +.iconmedium-socket-yellow-empty a, +.iconmedium-socket-blue-empty a, +.iconmedium-socket-prismatic-empty a { + background-image: url(../images/Icon/medium/hilite/socket0.png); +} + +/* TODO: Add hilite images for medium socket icons */ + +/****************/ +/* GLOWING TEXT */ +/****************/ + +.iconsmall .glow, +.iconmedium .glow, +.iconlarge .glow { + z-index: 15; + font-weight: bold; + cursor: default; + line-height: normal; +} + +.iconsmall .glow { font-size: 11px; margin: 2px 5px 2px 4px; } +.iconmedium .glow { font-size: 13px; margin: 4px 6px 4px 6px; } +.iconlarge .glow { font-size: 18px; margin: 4px 6px 4px 6px; } + +/*******************/ +/* SPECIAL BORDERS */ +/*******************/ + +/* Premium */ +.iconsmall-premium del { background-image: url(../images/Icon/small/border/premium.png); } +.iconmedium-premium del { background-image: url(../images/Icon/medium/border/premium.png); } +.iconlarge-premium del { background-image: url(../images/Icon/large/border/premium.png); } + +/* Gold */ +.iconsmall-gold del { background-image: url(../images/Icon/small/border/gold.png); } +.iconmedium-gold del { background-image: url(../images/Icon/medium/border/gold.png); } +.iconlarge-gold del { background-image: url(../images/Icon/large/border/gold.png); } + +/* Gold (selected) */ +.iconmedium-gold-selected del { background-image: url(../images/Icon/medium/border/gold-selected.png); } +.iconlarge-gold-selected del { background-image: url(../images/Icon/large/border/gold-selected.png); } + +.iconmedium-gold-selected a, +.iconlarge-gold-selected a { + background: none !important; + cursor: default; +} + +.iconsmall-red del { background-image:url(../images/Icon/small/border/red.png); } +.iconmedium-red del { background-image:url(../images/Icon/medium/border/red.png); } +.iconlarge-red del { background-image:url(../images/Icon/large/border/red.png); } + +.iconsmall-premiumred del { background-image:url(../images/Icon/small/border/premiumred.png); } +.iconmedium-premiumred del { background-image:url(../images/Icon/medium/border/premiumred.png); } +.iconlarge-premiumred del { + background-image:url(../images/logos/special/subscribe/patron-icon.png); + height:85px; +} + +.iconlarge-premiumred { + height:85px; +} + +/* Quality colors */ +.iconsmall-q0 del { background-image: url(../images/Icon/small/border/q0.png); } +.iconsmall-q1 del { background-image: url(../images/Icon/small/border/q1.png); } +.iconsmall-q2 del { background-image: url(../images/Icon/small/border/q2.png); } +.iconsmall-q3 del { background-image: url(../images/Icon/small/border/q3.png); } +.iconsmall-q4 del { background-image: url(../images/Icon/small/border/q4.png); } +.iconsmall-q5 del { background-image: url(../images/Icon/small/border/q5.png); } +.iconsmall-q6 del { background-image: url(../images/Icon/small/border/q6.png); } +.iconsmall-q7 del { background-image: url(../images/Icon/small/border/q7.png); } +.iconsmall-q8 del { background-image: url(../images/Icon/small/border/q8.png); } +.iconsmall-q9 del { background-image: url(../images/Icon/small/border/q9.png); } +.iconsmall-q10 del { background-image: url(../images/Icon/small/border/q10.png); } + +.iconmedium-q0 del { background-image: url(../images/Icon/medium/border/q0.png); } +.iconmedium-q1 del { background-image: url(../images/Icon/medium/border/q1.png); } +.iconmedium-q2 del { background-image: url(../images/Icon/medium/border/q2.png); } +.iconmedium-q3 del { background-image: url(../images/Icon/medium/border/q3.png); } +.iconmedium-q4 del { background-image: url(../images/Icon/medium/border/q4.png); } +.iconmedium-q5 del { background-image: url(../images/Icon/medium/border/q5.png); } +.iconmedium-q6 del { background-image: url(../images/Icon/medium/border/q6.png); } +.iconmedium-q7 del { background-image: url(../images/Icon/medium/border/q7.png); } +.iconmedium-q8 del { background-image: url(../images/Icon/medium/border/q8.png); } +.iconmedium-q9 del { background-image: url(../images/Icon/medium/border/q9.png); } +.iconmedium-q10 del { background-image: url(../images/Icon/medium/border/q10.png); } + +.iconlarge-q0 del { background-image: url(../images/Icon/large/border/q0.png); } +.iconlarge-q1 del { background-image: url(../images/Icon/large/border/q1.png); } +.iconlarge-q2 del { background-image: url(../images/Icon/large/border/q2.png); } +.iconlarge-q3 del { background-image: url(../images/Icon/large/border/q3.png); } +.iconlarge-q4 del { background-image: url(../images/Icon/large/border/q4.png); } +.iconlarge-q5 del { background-image: url(../images/Icon/large/border/q5.png); } +.iconlarge-q6 del { background-image: url(../images/Icon/large/border/q6.png); } +.iconlarge-q7 del { background-image: url(../images/Icon/large/border/q7.png); } +.iconlarge-q8 del { background-image: url(../images/Icon/large/border/q8.png); } +.iconlarge-q9 del { background-image: url(../images/Icon/large/border/q9.png); } +.iconlarge-q10 del { background-image: url(../images/Icon/large/border/q10.png); } + +/****************/ +/* INLINE ICONS */ +/****************/ + +.icontiny { background: left center no-repeat; } +.icontinyr { padding-right: 18px !important; background: right center no-repeat; } +.icontinyl { padding-left: 18px !important; background: left center no-repeat; } +a.icontiny { text-decoration: none; } +a.icontiny span /* span */ { text-decoration:underline; } +span.icontiny, a.tinyspecial { padding-left:18px !important; background:left center no-repeat; } + +/* +Icons +Left-aligned by default. +Variations: + * right --> Right-aligned + * padded --> Additional padding +*/ + +.icon-add { + padding-left: 20px !important; + background: url(../images/icons/add.gif) no-repeat left center; +} + +.icon-alliance { + padding-left: 12px; + background: url(../images/icons/alliance.gif) left center no-repeat; +} + +.icon-alliance-padded { + padding-left: 18px; + background: url(../images/icons/alliance.gif) 4px center no-repeat; +} + +.icon-arrowrightbullet-right { + padding-right: 16px; + background: url(../images/icons/arrow-right-bullet.gif) no-repeat right center; +} + +.icon-bc { + padding-left: 34px; + background: url(../images/icons/bc.gif) left center no-repeat; +} + +.icon-bc-right { + padding-right: 34px; + background: url(../images/icons/bc.gif) right center no-repeat; +} + +.icon-bell { + padding-left: 21px; + background: url(../images/icons/bell.gif) no-repeat left center; +} + +.icon-blizzard { + padding-left: 26px; + background: url(../images/icons/blizzard.gif) no-repeat left center; +} + +.icon-book { + padding-left: 22px; + background: url(../images/icons/book.gif) no-repeat left center; +} + +.icon-boss { + padding-left: 15px !important; + background: url(../images/icons/boss.gif) left center no-repeat; +} + +.icon-boss-padded { + padding-left: 23px !important; + background: url(../images/icons/boss.gif) 6px center no-repeat; +} + +.icon-bubble { + padding-left: 22px; + background: url(../images/icons/bubble.gif) left center no-repeat; +} + +.icon-bubble-right { + padding-right: 22px; + background: url(../images/icons/bubble.gif) right center no-repeat; +} + +.icon-star { + padding-left: 21px; + background: url(../images/icons/star.png) no-repeat left center; +} + +.icon-star-right { + padding-right: 21px; + background: url(../images/icons/star.png) no-repeat right center; +} + +.icon-delete { + padding-left: 19px !important; + background: url(../images/icons/delete.gif) no-repeat left center; +} + +.icon-edit { + padding-left: 21px; + background: url(../images/icons/edit.gif) no-repeat left center; +} + +.icon-email { + padding-left: 21px; + background: url(../images/icons/email.gif) left center no-repeat; +} + +.icon-facebook { + padding-left: 20px; + background: url(../images/icons/facebook.gif) left center no-repeat; +} + +.icon-ffa { + padding-left: 13px; + background: url(../images/icons/ffa.gif) left center no-repeat; +} + +.icon-help { + padding-left: 19px !important; + background: url(../images/icons/help.gif) left center no-repeat; +} + +.icon-heroic { + padding-left: 19px; + background: url(../images/icons/heroic.gif) left center no-repeat; +} + +.icon-horde { + padding-left: 18px; + background: url(../images/icons/horde.gif) left center no-repeat; +} + +.icon-instance1, +.icon-instance2, +.icon-instance3, +.icon-instance4, +.icon-instance5, +.icon-instance7, +.icon-instance8 { + padding-left: 19px; + background: url(../images/icons/instance.gif) no-repeat; +} + +.icon-instance1 { background-position: left center; } /* Transit (white) */ +.icon-instance2 { background-position: -152px center; } /* Dungeon (blue) */ +.icon-instance3, +.icon-instance7, +.icon-instance8 { background-position: -357px center; } /* Raid (green) */ +.icon-instance4 { background-position: -564px center; } /* Battleground (red) */ +.icon-instance5 { background-position: -734px center; } /* Heroic dungeon (purple) */ + +.icon-link { + padding-left: 19px; + background: url(../images/icons/link.gif) no-repeat left center; +} + +.icon-lock { + padding-left: 21px; + background: url(../images/icons/locked.gif) no-repeat left center; +} + +.icon-poll { + padding-left: 21px; + background: url(../images/icons/poll.png) no-repeat 1px center; +} + +.icon-print { + padding-left: 21px; + background: url(../images/icons/print.gif) left center no-repeat; +} + +.icon-refresh { + padding-left: 21px; + background: url(../images/icons/refresh.gif) no-repeat left center; +} + +.icon-report { + padding-left: 16px !important; + background: url(../images/icons/report.gif) 3px center no-repeat; +} + +.icon-return { + padding-left: 21px; + background: url(../images/icons/return.gif) no-repeat left center; +} + +.icon-rss { + padding-left: 18px; + background: url(../images/icons/rss.gif) no-repeat left center; +} + +.icon-save { + padding-left: 21px !important; + background: url(../images/icons/save.gif) no-repeat left center; +} + +.icon-sticky { + padding-left: 21px; + background: url(../images/icons/sticky.gif) no-repeat left center; +} + +.icon-twitter { + padding-left: 20px; + background: url(../images/icons/twitter.gif) left center no-repeat; +} + +.icon-unlock { + padding-left: 21px; + background: url(../images/icons/unlocked.gif) no-repeat left center; +} + +.icon-wotlk { + padding-left: 41px; + background: url(../images/icons/wotlk.gif) left center no-repeat; +} + +.icon-wotlk-right { + padding-right: 41px; + background: url(../images/icons/wotlk.gif) right center no-repeat; +} + +.icon-wowhead { + padding-left: 19px; + background: url(../images/icons/favicon.gif) left center no-repeat; +} + +.icon-male { + padding-left: 19px; + background: url(../images/icons/male.png) left center no-repeat; +} + +.icon-female { + padding-left: 19px; + background: url(../images/icons/female.png) left center no-repeat; +} + +.icon-us-right { + padding-right: 20px; + background: url(../images/icons/us.gif) right center no-repeat; +} + +.icon-eu-right { + padding-right: 20px; + background: url(../images/icons/eu.gif) right center no-repeat; +} + +.icontab { + border-collapse: collapse; + margin-top: 4px; +} + +.icontab tr { + background: none !important; +} + +.icontab th, .icontab td { + border: 0 !important; +} + +.icontab td { + padding: 0; + width: 10em; + font-size: 12px; + line-height: 1.5em; +} + +.icontab th { + padding: 0 3px 0 0; +} + +.icontab-box { + margin-top: 0; + border-spacing: 0 6px; + border-collapse: separate; +} + +.icontab-box th { + padding: 0 0 0 4px; +} + +.icontab-box td { + background-color: #141414; + padding: 0 6px; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.lightbox-outer { + position: fixed; + left: 50%; + top: 50%; + width: 1px; + height: 1px; + z-index: 60; +} + +.lightbox-inner { + position: absolute; + z-index: 70; +} + +.lightbox-overlay { + position: absolute; + left: 0; + top: 0; + width: 100%; + background: black; + opacity: 0.8; + filter: alpha(opacity=80); + z-index: 50; +} + +.listview { + border: 2px solid #404040; + clear: both; +} + +.listview-band-top, .listview-band-bottom { + background-color: #404040; + color: #cccccc; +} + +.listview-band-top { + padding: 3px 3px 6px 6px; +} + +.listview-band-bottom { + padding: 6px 3px 3px 3px; +} + +.listview-band-top input, .listview-band-bottom input, +.listview-band-top select, .listview-band-bottom select { + font-size: 11px; + margin-right: 0.5em; +} + +.listview-quicksearch { + display: block; + float: right; + position: relative; + margin-right: 1px; +} + +.listview-quicksearch a { + position: absolute; + display: block; + top: 0; + right: 0; + padding: 3px 3px 2px 2px; +} + +.listview-quicksearch a span { + display: block; + width: 12px; + height: 12px; + background: url(../images/Listview/quicksearch-cancel.gif) no-repeat; +} + +.listview-quicksearch a:hover span { + background-position: 0 -12px; +} + +.listview-quicksearch em { + position: absolute; + display: block; + right: 2px; + top: 2px; + width: 13px; + height: 13px; + background: url(../images/Listview/quicksearch.gif) no-repeat; +} + +.listview-quicksearch input { + margin: 0; + border: 1px solid #a7a6aa; + height: 13px; + padding-left: 2px; + font-size: 11px; + font-family: Arial, sans-serif; + background: white; + color: black; +} + +.listview-withselected { /* Top bar */ + clear: left; + padding-left: 33px; + background: url(../images/Listview/withselected.gif) 11px 6px no-repeat; +} + +.listview-withselected2 { /* Bottom bar */ + padding-left: 33px; + background: url(../images/Listview/withselected.gif) 11px -35px no-repeat; +} + +.listview-nav { + float: right; + padding-right: 1px; + margin-left: 36px; +} + +.listview-nav a, .listview-nav span { + margin-left: 0.5em; +} + +.listview-note { + line-height: 16px; + clear: left; +} + +.listview table { + width: 100%; + border-collapse: collapse; +} + +.listview th { + font-size: 14px; + font-weight: bold; + padding: 0; + border-bottom: 1px solid #202020; +} + +.listview .iconlist th { + border: none; +} + +.listview thead div { + position: relative; + border-top: 1px solid #707070; + border-left: 1px solid #707070; + border-right: 1px solid #303030; + border-bottom: 1px solid #303030; +} + +.listview thead a { + display: block; + padding: 5px 2px; + text-decoration: none; + color: white; + background-color: #585858; +} + +.listview thead a span { + padding: 0 4px; +} + +.listview thead a span span { + padding: 0; +} + +.listview th a:hover { + background-color: #606060; +} + +.listview th a.static { + cursor: default; +} + +.listview th a.static:hover { + background-color: #585858; +} + +.listview-mode-default, .listview-mode-div, .listview-mode-tiled, .listview-mode-calendar { + background-color: #141414; +} + +.listview-mode-default th { + white-space: nowrap; +} + +.listview-mode-default td { + padding: 4px; + color: #dddddd; + text-align: center; + border: 1px solid #404040; + font-size: 13px; +} + +.listview-clip td { + border: none; + border-bottom: 1px solid #303030; +} + +.listview-mode-default .small { + font-size: 11px; +} + +.listview-mode-default .small2 { + font-size: 11px; + padding-top: 3px; +} + +.listview-mode-default .small3 { + font-size: 11px; + color: #707070; +} + +.listview-mode-default .crop { + height: 1.33333em; + overflow: hidden; + line-height: 1.2; +} + +.listview-mode-default tbody a { + text-decoration: none; +} + +.listview-mode-default tbody a:hover { + text-decoration: underline; +} + +.listview-mode-default tbody.clickable tr { + cursor: pointer; +} + +.listview-mode-default tbody tr:hover { + background-color: #202020; +} + +.listview-mode-tiled td { + cursor: pointer; +} + +.listview-mode-tiled td:hover { + background-color: #202020; +} + +.listview-mode-tiled td.empty-cell { + cursor: default !important; +} + +.listview-mode-tiled td.empty-cell:hover { + background: none !important; +} + +.listview-mode-calendar th { + padding: 3px; + background-color: #404040; +} + +.listview-mode-calendar td { + vertical-align: top; +} + +.listview-mode-calendar .calendar-today { + background-color: #404040; + font-weight: bold; +} + +.listview-mode-calendar .calendar-date { + background-color: #242424; + padding: 3px; +} + +.listview-mode-calendar .calendar-event { + height: 88px; + padding: 3px; +} + +.listview tr.mergerow { + background-color: #131d1a; +} + +.listview tr.mergerow:hover { + background-color: #1a2924; +} + +.listview tr.checked { + background-color: #242424; +} + +.listview tr.checked:hover { + background-color: #2C2C2C; +} + +.listview tr.upgraded { + background-color: #242424; +} + +.listview tr.upgraded:hover { + background-color: #2C2C2C; +} + +.listview tr.upgraded td { + font-weight: bold; +} + +.listview-cb { + text-align: center; + cursor: default; +} + +.listview-cb input { + cursor: default; +} + +.listview-nodata { + padding: 4px; + text-align: center; + background-color: #141414; +} + +.listview-clip { + overflow: auto; + background-color: black; +} + +.listview-indicators { + padding-left: 3px; +} + +.sortasc { + padding-right: 15px !important; + background: url(../images/Listview/sort-asc.gif) no-repeat right center; +} + +.sortdesc { + padding-right: 15px !important; + background: url(../images/Listview/sort-desc.gif) no-repeat right center; +} + +td.checked { + background-color: #202020; +} + +td.checked:hover { + background-color: #2C2C2C; +} + +td.checked .listview-cb:hover { + background-color: #343434; +} + +.live-search { + position: absolute; + z-index: 100000001; + left: 0; + top: 0; + background: #484848; + border: 1px solid #202020; + padding: 0 2px 2px 2px; + white-space: nowrap; + color: #FFD100; + font-size: 12px; + + -webkit-box-shadow: 1px 1px 5px black; + -moz-box-shadow: 1px 1px 5px black; + box-shadow: 1px 1px 5px black; +} + +.live-search div { + background-color: #282828; +} + +.live-search div div { + background-color: transparent; + position: relative; + border-top: 1px solid #484848; + border-bottom: 1px solid #101010; + overflow: hidden; +} + +.live-search a { + display: block; + text-decoration: none; + padding: 4px; + padding-left: 28px; +} + +.live-search a:hover { + color: #FFD100; +} + +.live-search b { + +} + +.live-search i { + display: block; + position: absolute; + font-style: normal; + line-height: 1.5em; + top: 3px; + right: 0; + padding: 0 4px 0 4px; + font-size: 11px; + color: #808080; + background: #282828; +} + +.live-search a:hover i { + padding-right: 18px; + background-image: url(../images/LiveSearch/arrow.gif); + background-position: right center; + background-repeat: no-repeat; +} + +div.live-search-selected i { + background-color: #383838; +} + +div.live-search-selected { + background-color: #383838; +} + +div.live-search-selected div { + border-bottom: 1px solid #202020; + color: white; +} + +div.live-search-icon { + background-position: 4px 3px; + background-repeat: no-repeat; +} + +div.live-search-icon div { + background-image: url(../images/Icon/small/border/default.png); + background-position: left center; + background-repeat: no-repeat; +} + +div.live-search-icon-boss { + background-image: url(../images/icons/boss.gif); + background-position: 8px center; + background-repeat: no-repeat; +} + +div.live-search-icon-quest-alliance { + background-image: url(../images/icons/alliance.gif); + background-position: 9px 5px; + background-repeat: no-repeat; +} + +div.live-search-icon-quest-horde { + background-image: url(../images/icons/horde.gif); + background-position: 6px 5px; + background-repeat: no-repeat; +} + +.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, .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 .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 .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; +} + +/********/ +/* MENU */ +/********/ + +.menu { + position: absolute; +z-index: 100000002; +} + +.menu .menu-outer { + float: left; + border: 1px solid #181818; + + -webkit-box-shadow: 1px 1px 5px black; + -moz-box-shadow: 1px 1px 5px black; + box-shadow: 1px 1px 5px black; +} + +.menu .menu-inner { + border: 2px solid #484848; + border-top: 1px solid #484848; +} + +.menu a { + display: block; + padding: 4px 4px 4px 24px; + text-decoration: none; + border-top: 1px solid #484848; + border-bottom: 1px solid #101010; + white-space: nowrap; + font-size: 13px; +} + +.menu a span { + display: block; + padding-right: 20px; +} + +.menu a span.hassubmenu { + background: url(../images/Menu/arrow-right.gif) right center no-repeat; +} + +.menu a, .menu a span { /* Setting the background color on both the and the so the hover effect works in IE7 */ + background-color: #282828; +} + +.menu a.open, .menu a:hover, .menu a.open span, .menu a:hover span { + background-color: #383838; +} + +.menu a.open, .menu a:hover { + border-bottom: 1px solid #202020; +} + +.menu a.separator { + color: white; + font-weight: bold; + padding: 4px 8px; + background-color: #181818; +} + +.menu a.separator:hover { + text-decoration: underline; + background-color: #181818; + border-bottom: 1px solid #101010; +} + +.menu a.unlinked { + text-decoration: none !important; + cursor: default; +} + +.menu a.checked { + background-image: url(../images/Menu/check.gif); + background-position: 9px center; + background-repeat: no-repeat; +} + +.menu a.icon, .menu a.tinyicon { + background-position: 4px center; + background-repeat: no-repeat; + padding-left: 24px; +} + +.menu a.socket-meta, .menu a.socket-red, .menu a.socket-yellow, .menu a.socket-blue, .menu a.socket-prismatic, .menu a.socket-hydraulic, .menu a.socket-cogwheel { + background-position: 5px center; +} + +.menu a.icon-star-right span { + padding-right: 21px; + background: url(../images/icons/star.png) no-repeat right center; +} + +/****************/ +/* MENU BUTTONS */ +/****************/ + +span.menu-buttons a { + text-decoration: none; + color: white; + padding: 4px 11px; + font-size: 13px; + white-space: nowrap; +} + +span.menu-buttons a:hover { + text-decoration: underline; +} + +span.menu-buttons a.open { + background-color: #484848; + padding: 3px 10px; + border: 1px solid #282828; +} + +span.menu-buttons a.unlinked { + text-decoration: none !important; + cursor: default; +} + +span.menu-buttons span.hassubmenu { + padding-right: 13px; + background: url(../images/Menu/arrow-down.gif) right center no-repeat; +} + +div.modelviewer { + padding: 10px 10px 0 10px; + background-color: #303030; + font-size: 13px; +} +div.modelviewer a.dialog-cancel { + clear: right; + margin-top: 5px; +} +div.modelviewer a.dialog-question { + margin-top: 5px; +} + +div.modelviewer-animation { + float: right; + margin: 10px 0px 5px 10px; + line-height: 22px; + height: 22px; + display: block; +} + +div.modelviewer-animation var { + float: left; + height: 22px; + display: block; + color: #a0a0a0; + text-transform: uppercase; + text-decoration: none; + font-size: 15px; + font-style: normal; + margin-right: 10px; + font-family: Tahoma, sans-serif; +} + +div.modelviewer-screen { + background-color: #141414; + width: 600px; + height: 400px; + overflow: hidden; + text-align: center; + margin: 0 auto; +} + +div.modelviewer-quality { + margin: 10px 10px 5px 0; + line-height: 22px; + height: 22px; + display: block; + float: left; +} + +div.modelviewer-quality var { + float: left; + height: 22px; + display: block; + color: #a0a0a0; + text-transform: uppercase; + text-decoration: none; + font-size: 15px; + font-style: normal; + margin-right: 10px; + font-family: Tahoma, sans-serif; +} + +div.modelviewer-quality span { + float: left; + display: block; + line-height: 22px; +} + +div.modelviewer-model { +/* clear: left; + padding: 5px 0 10px 0; */ + padding: 10px 0; +} + +div.modelviewer-model var { + height: 22px; + line-height: 22px; + float: left; + margin-right: 10px; + display: block; + color: #a0a0a0; + text-transform: uppercase; + text-decoration: none; + font-size: 15px; + font-style: normal; + font-family: Tahoma, sans-serif; +} + +a.modelviewer-help { + float: right; + display: block; + padding: 10px 0 10px 10px; + margin-right: 10px; +} + +a.modelviewer-close { + float: right; + display: block; + padding: 10px 0 10px 10px; +} + +/**********/ +/* LAYOUT */ +/**********/ + +.layout { + min-width: 980px; + max-width: 1240px; + margin: 0 auto; +} + +.layout .fullwidth { + min-width: 0; + max-width: none; +} + +.layout-inner { + padding: 0 10px; +} + +/**********/ +/* HEADER */ +/**********/ + +.header { + position: relative; + height: 105px; + z-index: 1; +} + +.header h1 { /* SEO */ + position: absolute; + left: -2323px; + top: -2323px; +} + +.header a.header-logo { + position: absolute; + display: block; + border: 0; + left: 0px; + top: 20px; + width: 160px; + height: 68px; + background: url(../images/logos/header.png) no-repeat; +} + +/***********/ +/* WRAPPER */ +/***********/ + +.wrapper { + margin-right: 170px; /* Room for sidebar */ + position: relative; +} + +.layout.nosidebar .wrapper { + margin-right: 0; +} + +/*************/ +/* TOP LINKS */ +/*************/ + +.toplinks { + line-height: 32px; + height: 32px; + overflow: hidden; + position: absolute; + right: 0px; +} + +.toplinks a { + font-size: 13px; +} + +/************/ +/* TOP TABS */ +/************/ + +.toptabs, .toptabs a { + height: 32px; + background: url(../images/logos/header-lines.gif) right bottom repeat-x; +} + +.toptabs dl { + padding: 0; + margin: 0; +} + +.toptabs dt { + display: block; + float: left; + margin: 0 3px 0 0; + padding: 0; + position:relative; +} + +.toptabs a { + display: block; + overflow: hidden; + text-align: left; + white-space: nowrap; + line-height: 32px; + padding: 0 12px 0 10px; + font-family: Arial, sans-serif; + font-weight: bold; + font-size: 14px; + text-decoration: none; + text-transform: uppercase; + color: #FFCD55; + cursor: pointer; + background: url(../images/header/tabs.gif) left 0 no-repeat; +} + +.toptabs a:hover, .toptabs a.open { + background-position: left -32px; + color: #F6E6B3; +} + +.toptabs a:hover span, .toptabs a.open span { + background-position: right -32px; +} + +.toptabs a.unlinked { + cursor: default; +} + +.toptabs a.active { + position: relative; + top: 1px; + line-height: 32px; + background-position: left -64px !important; + color: white !important; +} + +.toptabs a.active span { + background-position: right -64px !important; +} + +.toptabs ins { + text-decoration: none; +} + +.toptabs a big { + font-size: 16px; +} + +.toptabs a span { + display: block; + padding-right: 10px; + width: 2px; + background: url(../images/header/tabs.gif) right 0 no-repeat; + height: 32px; + top: 0; + right: 0px; + position: absolute; +} + +/***********/ +/* TOP BAR */ +/***********/ + +.topbar { + background: #383838; + border: 1px solid #484848; + height: 30px; + overflow: hidden; + + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +.topbar-search { + float: right; + margin-left: 7px; + position: relative; + right: 14px; + top: 5px; +} + +.topbar-search a {/* Icon */ + z-index: 1; + width: 22px; + height: 22px; + display: block; + position: absolute; + right: -12px; + top: 0; + background: url(../images/header/search.gif) left top no-repeat; +} + +.topbar-search input { + font-size: 13px; + border: 1px solid #adadad; + height: 18px; + background: white url(../images/ui/form/input-textbox-bg.gif) repeat-x; + outline: 0; + padding-left: 3px; + margin: 0; + width: 250px; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.topbar-buttons { + line-height: 30px; + padding-left: 3px; +} + +.topbar-search a:hover { + background-position: left bottom; +} + +.topbar-browse { + float: right; + padding-right: 15px; + padding-top: 5px; +} + +/********/ +/* MAIN */ +/********/ + +.main { + +} + +.main-precontents { + background: #141414; + padding: 5px; + border-left: 1px solid #101010; + border-right: 1px solid #101010; +} + +.main-contents { + border: 1px solid #404040; + background-color: #242424; + padding: 10px; + min-height: 550px; + + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +/**************/ +/* BREADCRUMB */ +/**************/ + +.breadcrumb { + cursor: default; + font-size: 15px; + padding: 5px 0 5px 20px; + background: url(../images/icons/favicon.gif) left center no-repeat; +} + +span.breadcrumb-arrow { + padding-right: 17px; + background: url(../images/Menu/arrow-right.gif) right center no-repeat; +} + +span.breadcrumb-ellipsis { + padding-right: 16px; /* Makes it easier to mouseover */ +} + +/**********/ +/* FOOTER */ +/*********/ + +.footer { + font-size: 11px; + color: #666; + text-align: center; + padding: 50px 0; +} + +.footer-copy { + margin-top: 1em; + color: #666666; +} + +td.screenshot-cell { + cursor: pointer; + padding: 10px 4px; + text-align: center; +} + +td.screenshot-cell .listview-cb { + cursor: default; + padding: 2px; + margin-bottom: 4px; +} + +td.screenshot-cell .listview-cb:hover { + background-color: #282828; +} + +td.screenshot-cell img { + border: 2px solid #404040; + background-color: #080808; + margin-bottom: 3px; + + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +td.screenshot-cell:hover img { + background-color: #101010; +} + +.screenshot-cell-user { + width: 100%; + overflow: hidden; + font-size: 11px; + padding-bottom: 5px; + color: #cccccc; +} + +.screenshot-caption, .screenshot-caption-over { + width: 100%; + position: absolute; + line-height: 18px; +} + +.screenshot-caption { + overflow: hidden; + height: 1.33333em; + padding: 1px; + left: 0; + top: 0; + z-index: 0; +} + +.screenshot-caption-over { + color: white; + background-color: #505050; + border: 1px solid #303030; + padding: 0; + left: 0; + top: 0; + z-index: 1; +} + +.screenshot-caption span, .screenshot-caption-over span { + font-size: 11px; + font-weight: bold; +} + +.slider-x, .slider-y { + position: relative; +} + +.slider-x { + width: 100%; + height: 25px; +} + +.slider-y { + width: 25px; + height: 100%; +} + +.slider-x.has-labels { + height: 40px; +} + +.slider-x .track, .slider-y .track { + position: absolute; + display: block; + width: 100%; + height: 100%; + z-index: 8; +} + +.slider-x .track { + height: 25px; +} + +.slider-y .track { + width: 25px; +} + +.slider-x .handle, .slider-y .handle { + position: absolute; + top: 0; + left: 0; + z-index: 10; +} + +.slider-x .handle { + background: url(../images/ui/misc/slider.gif) no-repeat top left; + cursor: e-resize; + height: 22px; + width: 9px; +} + +.slider-y .handle { + background: url(../images/ui/misc/slider.gif) no-repeat top right; + cursor: n-resize; + height: 9px; + width: 22px; +} + +.slider-x .handle:hover { + background-position: bottom left; +} + +.slider-y .handle:hover { + background-position: bottom right; +} + +.slider-x span, .slider-y span { + position: absolute; + background: #7e7e7e; + border: 1px solid #404040; + z-index: 5; +} + +.slider-x span { + top: 9px; + left: 0; + width: 100%; + height: 2px; +} + +.slider-y span { + top: 0; + left: 9px; + width: 2px; + height: 100%; +} + +.slider-x .label { + font-size: 11px; + left: 0; + position: absolute; + top: 22px; +} + +.slider-x .label.max { + left: auto; + right: 0; +} + +.slider-y .label { + font-size: 11px; + left: 22px; + position: absolute; + top: 0; +} + +.slider-y .label.max { + top: auto; + bottom: 0; +} + +.slider-x input, .slider-y input { + background: none; + border: 1px solid transparent; + font-weight: bold; + color: #fff; + display: block; + font-size: 11px; + margin: 0 auto; + position: relative; + text-align: center; + top: 22px; + width: 50px; + z-index: 9; +} + +.slider-y input { + margin: 0 0 0 21px; + position: relative; + text-align: left; + top: 45%; + width: 30px; +} + +.slider-x input:hover, .slider-y input:hover, .slider-x input:focus, .slider-y input:focus { + background: #101010; + border-color: #303030; + outline: none; +} + +.tooltip-slider table { + width: 100%; +} + +.tabs, .text ul.tabs, ul.tabs { + margin: 0; + padding: 0; + list-style-type: none; +} + +.tabs li { + float: left; + margin-right: 3px; + height: 30px; +} + +.tabs li a div, .tabs li a b { + color: #FFD100; +} + +.tabs li a.selected div, .tabs li a:hover div, .tabs li a.selected b, .tabs li a:hover b { + color: white; +} + +.tabs a { + float: left; + font-size: 13px; + position: relative; + display: block; + height: 29px; + text-decoration: none; + white-space: nowrap; + background: #303030 url(../images/Tabs/corner-tr.gif) no-repeat top right; + border-bottom: 1px solid #282828; +} + +.tabs a:hover { + background-color: #383838; + border-bottom: 1px solid #303030; +} + +.tabs a.selected, .tabs a.selected:hover { + background-color: #404040; + border-bottom: 1px solid #404040; +} + +.tabs b { + padding: 0 5px; + display: block; + visibility: hidden; +} + +.tabs div { + position: absolute; + left: 0; + top: 0; + width: 100%; + text-align: center; + line-height: 30px; + background: url(../images/Tabs/corner-tl.gif) top left no-repeat; +} + +.tabs-container { + position: relative; + overflow: hidden; +} + +.tabs-levels { + position: absolute; + left: 0; + bottom: 0; + width: 100%; +} + +.tabs-level { + position: relative; + width: 100%; + height: 30px; + overflow: hidden; +} + +.tabs-level ul { + position: absolute; + left: 0 !important; + margin: 0px !important; + padding-left: 0px !important; +} + +.tabbed-contents { + border: 1px solid #404040; + border-top-width: 2px; + background-color: #141414; + padding: 8px; + clear: both; +} + +.listview .tabbed-contents { + border-width: 0px; +} + +.tabbed-contents .tabbed-contents { + border-width: 1px 0 0 0; +} + +.tabbed-contents .infobox, +.tabbed-contents .minibox, +.tabbed-contents .quote, +.tabbed-contents pre.code, +.tabbed-contents .listview-nodata, +.tabbed-contents .listview-mode-default, +.tabbed-contents .listview-mode-div, +.tabbed-contents .listview-mode-tiled, +.tabbed-contents .grid { + background-color: #0C0C0C !important; +} + +.tabbed-contents .infobox, +.tabbed-contents .minibox, +.tabbed-contents .quote, +.tabbed-contents pre.code { + border-color: #080808 !important; +} + +.tabbed-contents .grid tr:hover { + background-color: #181818; +} + +.text { + color: #cccccc; + line-height: 1.4em; +} + +.text b { + color: white; +} + +.text a b { + color: inherit !important; +} + +.text ul, .text ol { + margin: 1em 0; +} + +.text ol ul, .text ol ol, .text ul ol, .text ul ul { + margin-top: 0; + margin-bottom: 0; +} + +.text ul { + padding-left: 24px; +} + +.text ol { + list-style-type: decimal !important; + color: #E5CC80; +} + +.text ul { + list-style-type: square; +} + +.bluetracker ol, .bluetracker ul { + margin: 0; +} + +.bluetracker ul { + color: inherit !important; +} + +.text li { + list-style-position: outside; + line-height: 1.5em; +} + +.bluetracker li { + line-height: 1.6em; +} + +.text ol li div, .text li div { + color: #cccccc; +} + +.text .h1-links { + float: right; +} + +.text h1 { + color: white; + font-size: 19px; + font-weight: normal; + border-bottom: 1px solid #505050; + padding: 0 0 5px 0; + margin: 0 0 13px 0; + line-height: 1.1em; +} + +.text h2, .comment-body h2, .forums-post-body h2 { + color: white; + font-size: 17px; + font-weight: bold; + border-bottom: 1px solid #505050; + padding: 0 0 3px 0; + margin: 26px 0 13px 0; + line-height: 1.25em; +} + +.text h3, .comment-body h3, .forums-post-body h3 { + color: white; + font-size: 15px; + padding: 0; + margin: 1.5em 0 0.5em 0; +} + +.text h4, .comment-body h4, .forums-post-body h4 { + color: white; + font-size: 14px; + padding: 0; + margin: 1.4em 0 0.4em 0; +} + +.text h3 small { + font-weight: normal; +} + +.text h1 span.sub, .text h2 span.sub, .text h3 span.sub { + display: block; + font-weight: normal; + font-size: 12px; + color: #909090; +} + +.text h1 span.sub a, .text h2 span.sub a, .text h3 span.sub a { + font-weight: bold; +} + +.text span.rep-difficulty { + font-weight: bold; + text-shadow: 0 0 6px gray; + filter: dropshadow(color=gray,offx=0,offy=0); +} + +.text hr { + height:1px; + color: #505050; + background: #505050; + border: none; + margin-top: 13px; + margin-bottom: 13px; +} + +.text pre.code { + color: #eeeeee; + margin: 15px; + margin-top: 2px; + padding: 10px; + background-color: #141414; + border: 1px dashed #383838; + line-height: normal; + font-family: 'Bitstream Vera Sans Mono','Lucida Console','Courier New', Monaco, Courier, monospace; + word-break: break-all; + word-wrap: break-word; + white-space:pre-wrap; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.text .quote, .text blockquote { + color: #eeeeee; +} + +.text blockquote { + margin: 10px; +} + +.text blockquote .bml-quote-date { + float: right; +} + +.text blockquote div { + color: #bbb; + padding-bottom: 8px; + font-size: 11px; +} + +.text .quote .quote, .text blockquote blockquote { + border-color: #404040; +} + +.text .spoiler { + display: table; + color: #0C0C0C; + margin: 15px; + padding: 10px; + background-color: #0C0C0C; + border: 1px solid #080808; + border-collapse: separate; + line-height: normal; + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.text .spoiler:hover { + color: #DDDDDD; +} + +.text .spoiler * { + visibility: hidden; +} + +.text .spoiler:hover * { + visibility: visible; +} + +.text .minibox { + float: right; + margin: 0 0 4px 10px; + background-color: #141414; + border: 1px solid #101010; + padding: 8px; + font-size: 11px; + text-align: center; + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.text .minibox-left { + float: left; + margin-left: 0; + margin-right: 10px; +} + +.text .minibox h2 { + margin: 0 0 5px 0; + font-size: 15px; + border: none; + font-weight: bold; + padding: 0px; +} + +.text .minibox h2, .text .minibox h2 b, +.text .minibox h2 a:link, .text .minibox h2 a:visited { + color: white !important; +} + +.text .minibox h2 a:link, .text .minibox h2 a:visited { + color: white; + text-decoration: none; +} + +.text .minibox h2 a:hover { + text-decoration: underline; +} + +.text .minibox h3, +.text .minibox h3 a:link, .text .minibox h3 a:visited { + color: #9d9d9d !important; + font-size: 11px; + font-weight: normal; + margin: 0px; +} + +.text .minibox h3 img { + vertical-align: middle; +} + +.text .minibox h3 a:link, .text .minibox h3 a:visited { + text-decoration: underline; +} +.text .minibox h3 a:hover { + color: white !important; +} + +.text sup, .text sub { + font-size: 10px !important; +} + +.text h1 a.header-link, .text h2 a.header-link { + color: white; + text-decoration: none; +} + +.text h1 a.header-link:hover, .text h2 a.header-link:hover { + text-decoration: underline; +} + +.text .first { + margin-top: 0 !important; +} + +.text .last { + margin-bottom: 0 !important; +} + +/* +Reusable UI elements/features +*/ + +/********************/ +/* DISCLOSURE ARROW */ +/********************/ + +.disclosure-on, +.disclosure-off { + background: url(../images/ui/misc/arrow-disclosure.gif) no-repeat left center; + padding-left: 15px; +} + +.disclosure-off { + background-position: -740px center; +} + +a.disclosure-on, a.disclosure-off { + color: white; + text-decoration: none; + font-weight: bold; +} + +a.disclosure-on:hover, a.disclosure-off:hover { + text-decoration: underline; +} + +/******************/ +/* WOW RED BUTTON */ +/******************/ + +a.button-red { + position: relative; + display: block; + float: right; + text-decoration: none; + cursor: pointer; + line-height: 21px; + color: #FFD100; + font-weight: bold; + font-size: 11px; + background: url(../images/ui/button/wow-red.gif) left 0 no-repeat; + padding-left: 13px; + white-space: nowrap; + outline: 0; + margin-left: 8px; +} + +a.button-red span { + display: block; + position: relative; + z-index: 5; +} + +a.button-red i { + position: absolute; + left: -1px; + top: 2px; + z-index: 1; + font-style: normal; + color: black; +} + +a.button-red em { + display: block; + font-style: normal; + padding-right: 13px; + background: url(../images/ui/button/wow-red.gif) right 0 no-repeat; +} + +a.button-red b { + display: block; + position: absolute; +} + +a:hover.button-red { + color: white; + background-position: left -21px; + text-decoration: none !important; +} + +a:hover.button-red em { + background-position: right -21px; +} + +a:active.button-red { + background-position: left -63px; +} + +a:active.button-red em { + background-position: right -63px; +} + +a:active.button-red span, a:active.button-red i { + left: -2px; +} + +a:active.button-red-disabled span { + left: 0; +} + +a:active.button-red-disabled i { + left: -1px; +} + +a.button-red-disabled { + cursor: default !important; +} + +a.button-red-disabled, a:hover.button-red-disabled { + background-position: left -84px !important; + color: #A0A0A0; + cursor: default; +} + +a.button-red-disabled em, a:hover.button-red-disabled em { + background-position: right -84px !important; +} + +/*******************/ +/* BIG BLUE BUTTON */ +/*******************/ + +a.button-bigblue { + display: block; + float: left; + height: 66px; + margin-right: 30px; + background: url(../images/ui/button/big-blue.gif) no-repeat; + color: white; + white-space: nowrap; + text-decoration: none; + position: relative; +} + +a.button-bigblue:hover { + background-position: 0 -66px; +} + +a.button-bigblue:hover ins { + text-decoration: underline; +} + +a.button-bigblue:hover b { + background-position: right -66px; +} + +a.button-bigblue span { + display: block; + height: 66px; + padding: 0 30px 0 60px; + background-repeat: no-repeat; + background-position: 8px center; +} + +a.button-bigblue ins { + display: block; + padding-top: 15px; + text-decoration: none; + font-size: 18px; +} + +a.button-bigblue del { + display: block; + text-decoration: none; + font-size: 11px; + color: #eeeeee; +} + +a.button-bigblue b { + position: absolute; + top: 0; + right: -13px; + background: url(../images/ui/button/big-blue.gif) no-repeat right 0; + width: 13px; + height: 66px; +} + +/*************/ +/* LINK LIST */ +/*************/ + +.linklist { + color: #666666; + font-size: 11px; +} + +.linklist a { + margin: 0 0.8em; + text-decoration: none; + color: #FFCD55; +} + +.linklist a:hover, .linklist a.open { + color: #F6E6B3; + text-decoration: underline; +} + +.linklist a.hassubmenu { + padding-right: 13px; + background: url(../images/Menu/arrow-down-ffcd55.gif) right center no-repeat; +} + +/*************/ +/* INDICATOR */ +/*************/ + +.indicator { + float: left; + display: block; + background-color: #141414; + border: 1px solid #101010; + padding: 6px 10px; + margin: 0 5px 10px 0; + white-space: nowrap; + + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.indicator-x { + font-size: 11px; + padding: 10px; + margin-right: -10px; +} + +.listview-band-top .indicator { /* Makes it less contrasty */ + background-color: #181818; + border-color: #141414; +} + +.indicator-mode { + display: block; + margin: 0 auto; + text-align: center; +} + +.indicator-mode a { + color: #CCCCCC; +} + +.indicator-mode a span { + text-decoration: underline; + color: #FFD100; +} + +.indicator-mode a.selected span { + text-decoration: none; +} + +.indicator:hover .indicator-mode a span, +.indicator-mode a.selected, +.indicator-mode a.selected span { + color: white; +} + +.indicator-mode b { /* Placeholder text */ + display: block; + visibility: hidden; + height: 0; + overflow: hidden; + font-weight: bold; +} + +/************/ +/* INFO BOX */ +/************/ + +.infobox { + float: right; + margin: 0 0 10px 10px; + background-color: #141414; + border: 1px solid #404040; + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + padding-bottom: 12px; +} + +.infobox-spacer { + width: 174px; + height: 1px; + background-color: transparent; +} + +.infobox th { + color: white; + padding: 12px 12px 10px 12px; + font-size: 15px; + text-align: center; + font-weight: bold; +} + +.infobox th small { + font-weight: normal; +} + +.infobox th a { + text-decoration: none; + color: white; +} + +.infobox th a:hover { + text-decoration: underline; +} + +.infobox td { + padding: 0 12px; + font-size: 13px; + line-height: 1.75em; + white-space: nowrap; +} + +.infobox ul { + margin: 0; + padding: 0; +} + +.infobox li { + list-style:none; + background: url(../images/ui/redbullet.png) no-repeat left 10px; + padding-left:10px; +} + +.infobox li div { + color: white; +} + +#infobox-sticky-ss, #infobox-sticky-vi { text-align: center; } +#infobox-sticky-ss img, #infobox-sticky-vi img { margin-bottom: 4px; } + +.series { border-collapse: collapse; line-height: 1.5em; } +.series th { padding: 0.2em 10px 0 0; font-weight: normal; text-align: right; vertical-align: top; } +.series td { padding: 0; } + +/*************/ +/* INPUT BOX */ +/*************/ + +.inputbox { /* As seen on the "Sign In" page */ + width: 30em; + color: #cccccc; + background-color: #383838; + border-left: 1px solid #606060; + border-top: 1px solid #606060; + border-right: 1px solid #101010; + border-bottom: 1px solid #101010; + margin: 0 auto; + padding: 15px; + line-height: 1.7em; +} + +.inputbox table{ + border-collapse: collapse +} + +.inputbox td { + padding: 2px; +} + +.inputbox h1 { + color: white; + font-size: 16px; + text-align: center; + padding-bottom: 6px; + margin: 0; +} + +#inputbox-error { + color: #ff3333; + font-weight: bold; + font-size: 14px; + padding-bottom: 10px; + text-align: center; +} + +#inputbox-error b +{ + color: white; +} + +/********/ +/* GRID */ +/********/ + +.grid { + width: 100%; + clear: both; + border-collapse: collapse; + background-color: #141414; + border: 2px solid #404040; +} + +.grid tr:hover { background-color: #202020; } + +.grid td { + padding: 4px; + color: #dddddd; + font-size: 13px; +} + +.grid th { + vertical-align: top; + font-weight: normal; + color: white; + padding: 4px; + text-align: left; + white-space: nowrap; +} + +.grid td, .grid th { + border-top: 1px solid #404040; + border-bottom: 1px solid #404040; + border-left: 1px solid #282828; + border-right: 1px solid #282828; +} + +.grid .iconsmall, .grid .iconmedium{ + float: left; +} + +/****************/ +/* PROGRESS BAR */ +/****************/ + +.progressbar { + display: block; + border: none; + background-color: black; + font-size: 11px; + font-weight: bold; + line-height: 1.5em; + color: white; + text-decoration: none !important; + position: relative; + margin: 2px 1px 4px 1px; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar del { + text-decoration: none; +} + +.progressbar ins { + display: none; + text-decoration: none; +} + +a.progressbar { + cursor: default; +} + +a.progressbar:hover ins { + display: inline; +} + +a.progressbar:hover del { + display: none; +} + +.progressbar-text { + position: absolute; + left: 0; + top: 1px; + width: 100%; + height: 100%; + text-align: center; +} + +.progressbar-hidden { + position: relative; + visibility: hidden; + height: 1px; + width: auto; + margin-top: -1px; +} + +.progressbar-rep0 { + border-top: 1px solid #b82e21; + border-bottom: 1px solid #9c2319; + background-color: #861c10; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-rep1 { + border-top: 1px solid #c9662b; + border-bottom: 1px solid #b05421; + background-color: #994515; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-rep2 { + border-top: 1px solid #d59b31; + border-bottom: 1px solid #bf8626; + background-color: #aa7419; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-rep3 { + border-top: 1px solid #d2b130; + border-bottom: 1px solid #bb9b25; + background-color: #a68818; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-rep4 { + border-top: 1px solid #a4a201; + border-bottom: 1px solid #8d8b01; + background-color: #777601; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-rep5 { + border-top: 1px solid #74a001; + border-bottom: 1px solid #638701; + background-color: #527001; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-rep6 { + border-top: 1px solid #30a601; + border-bottom: 1px solid #288b01; + background-color: #217201; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-rep7 { + border-top: 1px solid #0aa087; + border-bottom: 1px solid #068870; + background-color: #007564; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-ach0 { + border-top: 1px solid #2b98c9; + border-bottom: 1px solid #2082af; + background-color: #157099; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-ach1 { + border-top: 1px solid #7a7a7a; + border-bottom: 1px solid #686868; + background-color: #575757; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-green { + border-top: 1px solid #3aca01; + border-bottom: 1px solid #2b9401; + background-color: #207001; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-yellow { + border-top: 1px solid #e6e200; + border-bottom: 1px solid #b1ae00; + background-color: #939000; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.progressbar-red { + border-top: 1px solid #e60f00; + border-bottom: 1px solid #b10c00; + background-color: #930900; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.listview .progressbar { + margin: 3px; +} + +/***********/ +/* TOOLBAR */ +/***********/ + +.toolbar button { + padding-left: 2px; + padding-right: 2px; + margin-right: 2px; + width: 28px; + height: 25px; +} + +.toolbar img { + width: 16px; + height: 16px; + background: url(../images/ui/misc/toolbar.png) no-repeat; +} + +.toolbar img.toolbar-b { background-position: 0 0 !important; } +.toolbar img.toolbar-i { background-position: -16px 0 !important; } +.toolbar img.toolbar-u { background-position: -32px 0 !important; } +.toolbar img.toolbar-s { background-position: -48px 0 !important; } +.toolbar img.toolbar-url { background-position: -64px 0 !important; } +.toolbar img.toolbar-small { background-position: -80px 0 !important; } +.toolbar img.toolbar-quote { background-position: -96px 0 !important; } +.toolbar img.toolbar-code { background-position: -112px 0 !important; } +.toolbar img.toolbar-ul { background-position: -128px 0 !important; } +.toolbar img.toolbar-ol { background-position: -144px 0 !important; } +.toolbar img.toolbar-li { background-position: -160px 0 !important; } +.toolbar img.toolbar-img { background-position: -176px 0 !important; } +.toolbar img.toolbar-thumb { background-position: -192px 0 !important; } +.toolbar img.toolbar-title { background-position: -208px 0 !important; } +.toolbar img.toolbar-pad { background-position: -224px 0 !important; } +.toolbar img.toolbar-winners { background-position: -240px 0 !important; } +.toolbar img.toolbar-prizes { background-position: -256px 0 !important; } +.toolbar img.toolbar-entryform { background-position: -272px 0 !important; } +.toolbar img.toolbar-fromhtml { background-position: -288px 0 !important; } + +/***********/ +/* CAPTCHA */ +/***********/ + +a.captcha { + display: block; + width: 150px; + height: 40px; + margin: 8px 1px; +} + +a.captcha:hover { + border: 1px dotted #747474; + margin: 7px 0; + background-color: #343434; +} + +.tabbed-contents a.captcha:hover { + border: 1px dotted #686868; + background-color: #282828; +} + +.inputbox a.captcha:hover { + border: 1px dotted #888; + background-color: #484848; +} + +div.captcha-center { + width: 318px; + margin: 0 auto; +} + +#recaptcha_instructions_image { + color: #cccccc; +} + +/*********/ +/* PAGES */ +/*********/ + +.pages var { + float: right; + color: #cccccc; + font-style: normal; + padding: 3px 0; + margin: 0; +} + +.pages-left var { + float: left; +} + +.pages var span { + margin: 0 6px; + color: #9d9d9d; +} + +.pages .gotopage { + margin-right: 6px; + padding: 0 9px; + cursor: pointer; + background: url(../images/icons/pages.gif) no-repeat left center; +} + +.pages-numbers a, .pages-numbers span { + float: right; + margin: 0 2px; + font-size: 11px; +} + +.pages-left .pages-numbers a, .pages-left .pages-numbers span { + float: left; +} + +.pages-numbers a { + padding: 3px 6px; + border: 1px solid #404040; + background-color: #141414; + text-decoration: none; +} + +.pages-numbers a:hover { + background-color: #303030; +} + +.pages-numbers span { + padding: 3px; + font-size: 13px; +} + +.pages-numbers span.selected { + padding: 3px 6px; + color: white; + background-color: #404040; + border: 1px solid #404040; + font-weight: bold; + font-size: 11px; +} + + +/**************************************************/ +/* sarjuuk: deprecated stuff that might be of use */ +/**************************************************/ + + +.pet-model { + position: relative; + background-color: #101010; + width: 200px; + height: 150px; + border: 3px solid #404040; + margin: 0 auto; + margin-bottom: 3px; +} + +a.pet-zoom { + position: absolute; + display: block; + left: 0; + top: 0; + width: 200px; + height: 150px; + background: url(../images/icons/pet-zoom2.gif) 180px 130px no-repeat; +} + +a:hover.pet-zoom { + background-position: 180px -70px; +} + +/* still used by filter-disclosure */ +.path-right { + float: right; + font-size: 14px; + margin-right: 4px; + padding: 5px 0 5px 0px; +} + +/* still in use */ +a#toplinks-language { + padding: 0 0 0 21px; + background: url(../images/icons/language.gif) left center no-repeat; +} + +/* the search.css is basicly empty without the styles for googleseach */ +.search-noresults { + background:url(../images/search/noresults.jpg) left no-repeat; + width:254px; + height:215px; + float:right; + margin-top:10px; +} + +/* no idea.. */ +.article-footer { + background: url(../images/icons/edit.gif) left 3px no-repeat; + color: #9d9d9d; + margin-top: 1em; + font-size: 11px; + padding: 3px 0 3px 20px; +} diff --git a/static/css/basic.css b/static/css/basic.css index 7a090d04..a66bced4 100644 --- a/static/css/basic.css +++ b/static/css/basic.css @@ -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; diff --git a/static/css/global.css b/static/css/global.css index d3c50bc6..4df30a25 100644 --- a/static/css/global.css +++ b/static/css/global.css @@ -1,234 +1,571 @@ -body -{ - background: black; - margin: 0; - padding: 0; - font-family: Arial, sans-serif; - font-size: 13px; - color: #ccc; - min-height: 650px; - height: 90%; +.nowrap { + white-space: nowrap; + overflow: visible; } -form -{ - padding: 0; - margin: 0; - display: inline; -} - -p -{ - margin: 0px; - padding: 0px; -} - -img, iframe -{ - border: 0; -} - -.border -{ - border: 3px solid #404040; -} - -a:hover img.border -{ - border-color: #505050; -} - -.caption -{ - padding-top: 2px; - font-size: 11px; - text-align: right; -} - -pre.code -{ - color: #eee; - margin: 15px; - margin-top: 2px; - padding: 10px; - background-color: #1c1c1c; - border: 1px dashed #383838; - line-height: normal; - font-family: 'Bitstream Vera Sans Mono','Lucida Console','Courier New', Monaco, Courier, monospace; - overflow: auto; - white-space:pre-wrap; -} - -div.quote -{ - color: #eee; - margin: 2px 15px 15px; - padding: 10px; - background-color: #1c1c1c; - border: 1px solid #383838; - line-height: normal; -} - -.text div.quote -{ - display: table; -} - -div.quote ol li div, div.quote li div, pre.code ol li div, pre.code li div -{ - color: #ddd !important; -} - -.msg-success -{ - color: #3c3; - font-weight: bold; - font-size: 11px; -} - -.msg-failure -{ - color: #c33; - font-weight: bold; - font-size: 11px; -} - -.minipad -{ - padding-bottom: 1px; - height: 1px; - overflow: hidden; - background: transparent; -} - -.pad -{ - padding-bottom: 10px; -} - -.pad2 -{ - padding-bottom: 1em; -} - -.pad3 -{ - padding-bottom: 2em; -} - -.clear -{ - clear: both; -} - -a -{ - color: #FFD100; +/* Generic - Sprites */ +.vote-column .upvote, .vote-column .downvote, .reply-upvote, .reply-downvote, .reply-detach, .reply-delete, .reply-report, .reply-edit { + background: url(../images/ui/sprite3.png); + text-indent: -10000px; cursor: pointer; - outline: none; } -a.selected, a.selected:hover -{ - cursor: default; - color: white; +.vote-column { + width: 60px; + vertical-align: top; +} + +.main-body { + vertical-align: top; +} + +.vote-column .upvote, .vote-column .downvote { + margin: 5px auto; + width: 30px; + height: 16px; +} + +.vote-column .upvote { + margin-top: 10px !important; + filter:alpha(opacity=60); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + opacity:.6; +} + +.vote-column .upvote:hover { + filter:alpha(opacity=100); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity:1; +} + +.vote-column .upvote[data-hasvoted=true] { + background-position: 0 -16px; + filter:alpha(opacity=100); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity:1; +} + +.vote-column .downvote { + background-position: 0 -48px; + filter:alpha(opacity=60); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + opacity:.6; +} + +.vote-column .downvote:hover { + filter:alpha(opacity=100); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity:1; +} + +.vote-column .downvote[data-hasvoted=true] { + background-position: 0 -32px; + filter:alpha(opacity=100); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity:1; +} + +.vote-column .rating, .vote-column .rating-up, .vote-column .rating-down { + color: #A8A8A8; + font-size: 18px; + margin: 3px 0; + text-align: center; font-weight: bold; +} + +.vote-column .rating-up { + color: Green; +} + +.vote-column .rating-down { + color: #bb5b26; +} + +.vote-column .rating-separator { + border-top: 1px solid silver; + width: 20px; + margin: 0 auto; +} + +.vote-column .rating { + cursor: pointer; +} + +.comment-controls { + text-align: right; + color: #DDDDDD; + font-size: 11px; +} + +.comment-controls span, .comment-controls span a { + padding-left: 3px; +} + +.comment-header .comment-author { + font-style: normal; +} + +.comment-header .comment-author a { + font-weight: bold; +} + +.comment-header .comment-author a.q0 { + color: #bbbbbb !important; + font-weight: normal; text-decoration: none; } -.text -{ - color: #ccc; - line-height: 1.4em; +.comment-header .comment-author a.q0:hover { + text-decoration: underline; } -.text ul.last, .text ol.last -{ - margin-bottom: 0; -} - -.text .h1-links -{ - float: right; -} - -.text h1 -{ - color: white; - font-size: 19px; - font-weight: normal; - border-bottom: 1px solid #505050; - padding: 1px 0 5px; - margin: 0 0 13px; - line-height: 1.1em; -} - -.text h2 -{ - color: white; - font-size: 18px; - font-weight: normal; - border-bottom: 1px solid #505050; - padding: 26px 0 3px; - margin: 0 0 13px; - line-height: 1.25em; - clear: both; -} - -.text h3, .comment-body h3, .forums-post-body h3 -{ - color: white; - font-size: 14px; - padding: 0; - margin: 1.5em 0 .5em; -} - -.text h1.first, .text h2.first, .text h3.first -{ - padding-top: 0; - margin-top: 0; -} - -.text h1 span.sub, .text h2 span.sub, .text h3 span.sub -{ - display: block; - font-weight: normal; +.comment-replies-control { + margin-top: 10px; font-size: 12px; - color: #909090; + color: white; + cursor: pointer; + float: left; + background: #444; + border: 1px solid #555; + padding: 4px 8px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + text-transform: capitalize; } -.text span.rep-difficulty { - font-weight: bold; - text-shadow: 0 0 6px gray; - filter: dropshadow(color=gray,offx=0,offy=0); +.comment-replies-control:hover { + background-color: #555; } -h1 a, h2 a, h3 a, h4 a, h5 a, h1 a.icontiny span, h2 a.icontiny span, h3 a.icontiny span, h4 a.icontiny span, h5 a.icontiny span -{ - text-decoration:none !important; -} - -.tip -{ - border-bottom: 1px dotted #808080; +.comment-sticky { + display: block; + background-color: green; + border-radius: 5px; cursor: help; + font-family: Verdana; + font-size: 10px; + font-weight: bold; + margin-left: 5px; + margin-right: 5px; + margin-top: 10px; + text-align: center; } -#noscript-bg -{ +.comment-replies { + margin-top: 10px; + border-top: 1px dotted #646464; +} + +.comment-replies form .ajax-loader { + display: block; + margin-left: 13px; + margin-top: 10px; + display: none; +} + +.comment-replies textarea { + width: 100%; +} + +.comment-replies form input { + display: block; + margin-left: 10px; + margin-top: 5px; +} + +.comment-replies td { + vertical-align: top; +} + +.comment-replies .q11 { + color: #AA8968 !important; +} + +.comment-reply-row { + border-bottom: 1px dotted #454545; +} + +.reply-controls { + width: 12px; + padding-top: 10px; + white-space: nowrap; +} + +.reply-text { + padding: 6px; + overflow:auto; + word-wrap:break-word; +} + +.reply-rating { + font-size: 10px; + width: 100%; + text-align: center; +} + +.q12 { + color: #BD5F00 !important; +} + +.reply-rating-fair { + color: #008200; +} + +.reply-rating-good { + color: #1EC000; +} + +.reply-rating-great { + color: #1EFF00; +} + +.comment-reply-author { + color: #888888; + white-space: nowrap; + font-size: 11px; +} + +.comment-reply-author a.when, .comment-reply-author a.when:hover { + color: #888888; + white-space: nowrap; + text-decoration: none; +} + +.comment-reply-author a.when:hover { + text-decoration: underline; +} + +.comment-blue b { + color: White !important; +} + +.reply-detach, .reply-delete, .reply-report, .reply-edit { + display: inline-block; + height: 13px; + width: 13px; + line-height: 12px; + opacity: 0.35; + visibility: hidden; +} + +.reply-upvote { + background-position:-43px 0; +} + +.reply-downvote { + background-position:-43px -18px; +} + +.reply-upvote, .reply-downvote { + width: 13px; + height: 6px; + cursor: default; + margin: 0 auto; + opacity: 0.7; +} + +.reply-detach { + background-position: -30px -13px; +} + +.reply-delete { + background-position: -30px 0; +} + +.reply-report { + background-position: -30px -39px; + height: 10px; + width: 11px; +} + +.reply-edit { + height: 14px; + width: 13px; + background-position: -30px -25px; + position: relative; + top: -1px; +} + +.reply-upvote[data-hasvoted=true] { + background-position:-43px -6px; +} + +.reply-downvote[data-hasvoted=true] { + background-position:-43px -12px; +} + +.reply-detach[data-hover=true], .reply-delete[data-hover=true], .reply-report[data-hover=true], .reply-edit[data-hover=true] { + visibility: visible; +} + +.reply-upvote[data-canvote=true]:hover, .reply-upvote[data-hasvoted=true], .reply-downvote[data-canvote=true]:hover, .reply-downvote[data-hasvoted=true], .reply-detach:hover, .reply-delete:hover, .reply-report:hover, .reply-edit:hover { + opacity: 1; +} + +.reply-upvote[data-canvote=true], .reply-downvote[data-canvote=true] { + cursor: pointer; +} + +.dragged { + z-index: 1000; + opacity: 0.35; + filter: alpha(opacity=35); +} + +.dragged .iconsmall, .dragged .iconmedium { + float: left; +} + +.stars {display:block;font-size:13px;margin:0 auto;white-space:normal;overflow:hidden;position:relative} +.infobox .stars {margin:0} +.stars.rated {padding-right:14px} +.stars.max-5 {width:66px} +.stars.max-10 {width:131px} +.stars b {background:url(../images/ui/stars-ondark.png) 0 -96px no-repeat;float:right;height:16px;line-height:16px} +.stars.ratable span {cursor:pointer} +.stars.ratable span:hover b, .stars.rated b {background-position:0 -32px} /* maybe remove 3rd? */ +.stars i {padding:0 0 0 18px} +.stars i i {margin-left:-5px;padding:0;visibility:hidden} +.stars.ratable span:hover b, .stars.ratable span:hover b.half {background-position:0 -96px !important} +.stars.ratable span b:hover, .stars.ratable span b.half:hover {background-position:0 -32px !important} +.stars .clear {background:url(../images/ui/gray-x.png);display:block;height:10px;;position:absolute;right:0;top:4px;width:9px} +.stars .clear:hover {background-position:bottom} +.stars .info {clear:both;font-size:11px} +.stars.rated .info {margin-right:-14px} + +.stars-1 b {background-position:0 0} +.stars-1 b b {background-position:0 -96px !important} +.stars-2 b {background-position:0 0} +.stars-2 b b b {background-position:0 -96px !important} +.stars-3 b {background-position:0 0} +.stars-3 b b b b {background-position:0 -96px !important} +.stars-4 b {background-position:0 0} +.stars-4 b b b b b {background-position:0 -96px !important} +.stars-5 b {background-position:0 0} +.stars-5 b b b b b b {background-position:0 -96px !important} +.stars-6 b {background-position:0 0} +.stars-6 b b b b b b b {background-position:0 -96px !important} +.stars-7 b {background-position:0 0} +.stars-7 b b b b b b b b {background-position:0 -96px !important} +.stars-8 b {background-position:0 0} +.stars-8 b b b b b b b b b {background-position:0 -96px !important} +.stars-9 b {background-position:0 0} +.stars-9 b b b b b b b b b b {background-position:0 -96px !important} +.stars-10 b {background-position:0 0} +.stars-10 b b b b b b b b b b b {background-position:0 -96px !important} +.stars b.half {background-position:0 -16px !important} +.stars.rated b.half {background-position:0 -48px !important} + +.ie6 .stars {_margin-bottom:-2px;zoom:100%} +.ie6 .stars * {zoom:100%} +.ie7 .stars {_margin-bottom:-2px;zoom:100%} +.ie7 .stars * {zoom:100%} +.ie8 .stars {_margin-bottom:-2px;zoom:100%} +.ie8 .stars * {zoom:100%} + +.guide-sticky { + background: url(../images/icons/sticky.gif) left center no-repeat; + padding-left: 21px; +} + +.guide-new { + background: url(../images/icons/new.png) left center no-repeat; + padding-left: 21px; +} + +.infobox .guide-sticky { + position: relative; + left: -6px; +} + +#guiderating { + display: block; + margin: 0 auto; + width: 80px; +} + +.iconlist-col { + float: left; + width: 31%; + margin-right: 2%; +} + +.iconlist { + border-collapse: collapse; + margin-top: 4px; +} + +.iconlist ul { + list-style-type: none; + margin: 0 !important; + padding: 0 !important; +} + +.iconlist th { + padding: 0; +} + +.iconlist ul li { + list-style-position: inside; + list-style-type: square; + padding-left: 13px; +} + +.iconlist td { + padding: 4px 0 6px 0; +} + +.iconlist var { + font-size: 1px; +} + +.iconlist .iconsmall { + margin-right: 4px; +} + +.iconlist a.disclosure-on, .iconlist a.disclosure-off { + font-weight: normal; + text-decoration: underline; +} + +.iconlist .iconlist ul li { + padding-left: 10px; +} + +.iconlist .iconlist th, .iconlist .iconlist td { + font-size: 11px; +} + +.iconlist-col table th li { list-style-position:outside;padding:0;margin-left:20px; } + +/* +Note: For IE6, only include things that break/distort the site in a major way, as we're not supposed to support IE6 anymore. +*/ + +/*******/ +/* IE6 */ +/*******/ + +html.ie6 .layout { + width: 1240px; +} + +html.ie6 .toptabs dt { + width: 1px; +} + +html.ie6 .menu .menu-outer, +html.ie6 .home-featuredbox-links a { + background: url(../images/deprecated/pixel.gif) no-repeat; +} + +html.ie6 .menu a { + position: relative; +} + + + +/*******/ +/* IE7 */ +/*******/ + +/* html.ie7 ... */ + + + +/*******/ +/* IE8 */ +/*******/ + +/* html.ie8 ... */ + + + +/*************/ +/* IE6 + IE7 */ +/*************/ + +/* html.ie67 ... */ + + + +/*******************/ +/* IE6 + IE7 + IE8 */ +/*******************/ + +/* html.ie678 ... */ + +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; } + +.message-box { + position: absolute; + z-index: 1000; + cursor: pointer; + border:2px solid #666; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + padding:15px 15px 10px 15px; + background:url(../images/ui/blk.png) repeat; +} + +.message-box .message { + margin-bottom: 5px; +} + +#noscript-bg { position: fixed; left: 0; top: 0; width: 100%; height: 100%; background-color: black; - -moz-opacity: .7; - opacity: .7; + opacity: 0.8; + filter: alpha(opacity=80); z-index: 9999; } -#noscript-text -{ +#noscript-text { position: absolute; text-align: center; left: 0; @@ -241,2926 +578,86 @@ h1 a, h2 a, h3 a, h4 a, h5 a, h1 a.icontiny span, h2 a.icontiny span, h3 a.icont background: url(../images/logos/header.png) center top no-repeat; } -#noscript-text b -{ +#noscript-text b { font-size: 22px; } -#home -{ - text-align: center; - margin-top: 40px; - padding-top: 140px; - background: url(../images/logos/logo.png) top center no-repeat; -} - -#home input -{ - margin-right: 2px; -} - -#home p -{ - margin: 0; - padding: 40px 0; - color: #ccc; - line-height: 1.75em; - font-size: 12px; -} - -#layout -{ - min-width: 998px; - max-width: 1240px; - margin: 0 auto; -} - -#layout.fullwidth -{ - min-width: 0; - max-width: none; - margin: 0 10px; -} - -#header-logo -{ - position: absolute; - left: 0; - top: 20px; - background: url(../images/logos/header.png) left center no-repeat; -} - -#header-logo a -{ - display: block; - width: 160px; - height: 68px; - border: 0; -} - -/************/ -/* TOP TABS */ -/************/ - -#toptabs -{ - text-align: left; - white-space: nowrap; - background: url(../images/logos/header-lines.gif) right bottom repeat-x; -} - -#toptabs dl -{ - padding: 0; - margin: 0; -} - -#toptabs dt -{ - display: block; - float: left; - margin-right: 5px; - padding: 0; -} - -#toptabs dl a -{ - display: block; - height: 32px; - line-height: 32px; - padding: 0 8px 0 10px; - font-family: Arial, sans-serif; - font-weight: bold; - font-size: 14px; - text-decoration: none; - text-transform: uppercase; - color: #FFCD55; - cursor: pointer; - position: relative; - background: url(../images/header/tabs.gif) left top no-repeat; -} - -#toptabs dl a big -{ - font-size: 16px; -} - -#toptabs dl a span -{ - display: block; - width: 2px; - height: 32px; - top: 0; - right: -2px; - position: absolute; - background: url(../images/header/tabs.gif) right top no-repeat; -} - -#toptabs dl ins -{ - text-decoration: none; - position: relative; - top: 2px; -} - -#toptabs dl a:hover, #toptabs dl a.open -{ - background-position: left -32px; - color: #f6e6b3; -} - -#toptabs dl a:hover span, #toptabs dl a.open span -{ - background-position: right -32px; -} - -#toptabs dl a.selected -{ - top: 1px; - background-position: left bottom !important; - color: white !important; -} - -#toptabs dl a.selected span -{ - background-position: right bottom !important; -} - -#toptabs dl a.selected ins -{ - top: 0; -} - -#toptabs-inner -{ - padding-top: 105px; -} - -#toptabs-right -{ - float: right; - color: #999; - line-height: 32px; - height: 32px; - overflow: hidden; -} - -a#toplinks-language -{ - padding-left: 21px; - background: url(../images/icons/language.gif) left center no-repeat; -} - -/***********/ -/* TOP BAR */ -/***********/ - -.topbar -{ - background: #383838; - border: 1px solid #484848; - height: 30px; - overflow: hidden; - - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; -} - -.topbar-search -{ - float: right; - margin-left: 7px; - position: relative; - right: 14px; - top: 5px; -} - -.topbar-search a /* Icon */ -{ - z-index: 1; - width: 22px; - height: 22px; - display: block; - position: absolute; - right: -12px; - top: 0; - background: url(../images/header/search.gif) left top no-repeat; -} - -.topbar-search input -{ - font-size: 13px; - border: 1px solid #adadad; - height: 18px; - padding-left: 3px; - font-family: Arial, sans-serif; - background: white; - color: black; - background: white url(../images/ui/form/input-textbox-bg.gif) repeat-x; - outline: 0; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.topbar-search a:hover -{ - background-position: left bottom; -} - -.topbar-browse -{ - float: right; - padding-right: 15px; - padding-top: 5px; -} - -.topbar-buttons -{ - line-height: 30px; - padding-left: 3px; -} - -#morelink -{ - padding: 3px 0 3px 8px; -} - -#sidebar-contents -{ - position: absolute; - right: 0; - top: 96px; -} - -#sidebar-ad -{ - width: 160px; - height: 600px; - padding-top: 10px; -} - -#infobox-ad -{ - float: right; - width: 300px; - height: 250px; - background-color: #141414; - border: 3px solid #404040; - margin: 0 0 10px 10px; -} - -#contribute-ad -{ - float: right; - width: 300px; - height: 250px; - border: 3px solid #404040; - background-color: #141414; -} - -#wrapper -{ - margin-right: 170px; -} - -#main -{ - border: 1px solid #282828; - background: #141414; - min-height: 520px; - /*padding: 18px 0px 0px 0px;*/ -} - -#main-precontents -{ - background: #141414; - padding: 5px; - border-left: 1px solid #101010; - border-right: 1px solid #101010; -} - -#main-contents.main-contents -{ - border: 1px solid #404040; - background-color: #242424; - border-radius: 2px; - padding: 10px; - min-height: 550px; -} - -/**************/ -/* BREADCRUMB */ -/**************/ - -.breadcrumb { - cursor: default; - font-size: 15px; - padding: 5px 0 5px 20px; - background: url(../images/icons/favicon.gif) left center no-repeat; -} - -span.breadcrumb-arrow { - padding-right: 17px; - background: url(../images/Menu/arrow-right.gif) right center no-repeat; -} - -span.breadcrumb-ellipsis { - padding-right: 16px; /* Makes it easier to mouseover */ -} - -#wrapper.nosidebar -{ - margin: 0 8px 0 0 !important; -} - -.path-right -{ - float: right; - font-size: 14px; - margin-right: 4px; - padding: 5px 0 5px 0px; -} - -#footer -{ - font-size: 12px; - color: #666; - text-align: center; - padding-top: 32px; - margin-bottom: 3em; -} - -#beyondfooter -{ - background-color: #141414; - border-top: 3px solid #282828; - border-bottom: 3px solid #282828; - padding: 10px 10px 15px; - line-height: 1.5em; -} - -#beyondfooter h3 -{ - margin: 0 0 3px; -} - -.toplinks -{ - color: #bbb; - padding-top: 3px; - position: absolute; - height: 20px; - top: 2px; - right: 2px; -} - -/*************/ -/* INDICATOR */ -/*************/ - -.indicator { - float: left; - display: block; - background-color: #141414; - border: 1px solid #101010; - padding: 6px 10px; - margin: 0 5px 10px 0; - white-space: nowrap; - - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.indicator-x { - font-size: 11px; - padding: 10px; - margin-right: -10px; -} - -.listview-band-top .indicator { /* Makes it less contrasty */ - background-color: #181818; - border-color: #141414; -} - -.indicator-mode { - display: block; - margin: 0 auto; - text-align: center; -} - -.indicator-mode a { - color: #CCCCCC; -} - -.indicator-mode a span { - text-decoration: underline; - color: #FFD100; -} - -.indicator-mode a.selected span { - text-decoration: none; -} - -.indicator:hover .indicator-mode a span, -.indicator-mode a.selected, -.indicator-mode a.selected span { - color: white; -} - -.indicator-mode b { /* Placeholder text */ - display: block; - visibility: hidden; - height: 0; - overflow: hidden; - font-weight: bold; -} - -/************/ -/* INFO BOX */ -/************/ - -.infobox -{ - float: right; - margin: 0 0 10px 10px; - background-color: #141414; - border: 1px solid #404040; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - padding-bottom: 12px; -} - -.infobox-spacer -{ - width: 174px; - height: 1px; - background-color: #141414; -} - -.infobox th -{ - color: white; - padding: 12px 12px 10px 12px; - font-size: 14px; - text-align: center; - font-weight: bold; -} - -.infobox th small -{ - font-weight: normal; -} - -.infobox th a -{ - text-decoration: none; - color: white; -} - -.infobox th a:hover -{ - text-decoration: underline; -} - -.infobox td -{ - padding: 0 12px 12px; - font-size: 13px; - line-height: 1.75em; - white-space: nowrap; -} - -.infobox ul -{ - margin: 0; - padding: 0; -} - -.infobox li -{ - list-style:none; - background: url(../images/ui/redbullet.png) no-repeat left 10px; - padding-left:10px; -} - -.infobox li div -{ - color: white; -} - -#infobox-sticky-ss img, #infobox-sticky-vi img -{ - margin-bottom: 4px; -} - -#infobox-sticky-ss, #infobox-sticky-vi -{ - text-align: center; -} - -.series -{ - border-collapse: collapse; - line-height: 1.5em; -} - -.series th -{ - padding: .2em 10px 0 0; - font-weight: normal; - text-align: right; - vertical-align: top; -} - -.series td -{ - padding: 0; -} - -.text .minibox -{ - float: right; - margin: 0 0 4px 10px; - background-color: #141414; - border: 1px solid #101010; - padding: 8px; - font-size: 11px; - text-align: center; - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.text .minibox-left -{ - float: left; - margin-left: 0; - margin-right: 10px; -} - -.text .minibox h2 -{ - margin: 0 0 5px 0; - font-size: 15px; - border: none; - font-weight: bold; - padding: 0px; -} - -.text .minibox h2, .text .minibox h2 b, -.text .minibox h2 a:link, .text .minibox h2 a:visited { - color: white !important; -} - -.text .minibox h2 a:link, .text .minibox h2 a:visited { - color: white; - text-decoration: none; -} - -.text .minibox h2 a:hover { - text-decoration: underline; -} - -.text .minibox h3, -.text .minibox h3 a:link, .text .minibox h3 a:visited { - color: #9d9d9d !important; - font-size: 11px; - font-weight: normal; - margin: 0px; -} - -.text .minibox h3 img { - vertical-align: middle; -} - -.text .minibox h3 a:link, .text .minibox h3 a:visited { - text-decoration: underline; -} -.text .minibox h3 a:hover { - color: white !important; -} - -h1 a.header-link, h2 a.header-link -{ - color: white; - text-decoration: none; -} - -h1 a.header-link:hover, h2 a.header-link:hover -{ - text-decoration: underline; -} - -/********/ -/* MENU */ -/********/ - -.menu { - position: absolute; - z-index: 100000002; -} - -.menu .menu-outer { - float: left; - border: 1px solid #181818; - - -webkit-box-shadow: 1px 1px 5px black; - -moz-box-shadow: 1px 1px 5px black; - box-shadow: 1px 1px 5px black; -} - -.menu .menu-inner { - border: 2px solid #484848; - border-top: 1px solid #484848; -} - -.menu a { - display: block; - padding: 4px 4px 4px 24px; - text-decoration: none; - border-top: 1px solid #484848; - border-bottom: 1px solid #101010; - white-space: nowrap; - font-size: 13px; -} - -.menu a span { - display: block; - padding-right: 20px; -} - -.menu a span.hassubmenu { - background: url(../images/Menu/arrow-right.gif) right center no-repeat; -} - -.menu a, .menu a span { /* Setting the background color on both the and the so the hover effect works in IE7 */ - background-color: #282828; -} - -.menu a.open, .menu a:hover, .menu a.open span, .menu a:hover span { - background-color: #383838; -} - -.menu a.open, .menu a:hover { - border-bottom: 1px solid #202020; -} - -.menu a.separator { - color: white; - font-weight: bold; - padding: 4px 8px; - background-color: #181818; -} - -.menu a.separator:hover { - text-decoration: underline; - background-color: #181818; - border-bottom: 1px solid #101010; -} - -.menu a.unlinked { - text-decoration: none !important; - cursor: default; -} - -.menu a.checked { - background-image: url(../images/Menu/check.gif); - background-position: 9px center; - background-repeat: no-repeat; -} - -.menu a.icon, .menu a.tinyicon { - background-position: 4px center; - background-repeat: no-repeat; - padding-left: 24px; -} - -.menu a.socket-meta, .menu a.socket-red, .menu a.socket-yellow, .menu a.socket-blue, .menu a.socket-prismatic, .menu a.socket-hydraulic, .menu a.socket-cogwheel { - background-position: 5px center; -} - -.menu a.icon-star-right span -{ - padding-right: 21px; - background: url(../images/icons/star.png) no-repeat right center; -} - -/****************/ -/* MENU BUTTONS */ -/****************/ - -.menu-buttons { - padding: 4px 0 0 5px; -} - -span.menu-buttons a { - text-decoration: none; - color: white; - padding: 4px 11px; - font-size: 13px; - white-space: nowrap; -} - -span.menu-buttons a:hover { - text-decoration: underline; -} - -span.menu-buttons a.open { - background-color: #484848; - padding: 3px 10px; - border: 1px solid #282828; -} - -span.menu-buttons a.unlinked { - text-decoration: none !important; - cursor: default; -} - -span.menu-buttons span.hassubmenu { - padding-right: 13px; - background: url(../images/Menu/arrow-down.gif) right center no-repeat; -} - -.tabs, .text ul.tabs, ul.tabs -{ - margin: 0; - padding: 0; - list-style-type: none; -} - -.tabs li -{ - float: left; - margin-right: 3px; - height: 30px; -} - -.tabs li a div, .tabs li a b -{ - color: #FFD100; -} - -.tabs li a.selected div, .tabs li a:hover div, .tabs li a.selected b, .tabs li a:hover b -{ - color: white; -} - -.tabs a -{ - float: left; - font-size: 13px; - position: relative; - display: block; - height: 29px; - text-decoration: none; - white-space: nowrap; - background: #303030 url(../images/Tabs/corner-tr.gif) no-repeat top right; - border-bottom: 1px solid #282828; -} - -.tabs a:hover -{ - background-color: #383838; - border-bottom: 1px solid #303030; -} - -.tabs a.selected, .tabs a.selected:hover -{ - background-color: #404040; - border-bottom: 1px solid #404040; -} - -.tabs b -{ - padding: 0 5px; - display: block; - visibility: hidden; -} - -.tabs div -{ - position: absolute; - left: 0; - top: 0; - width: 100%; - text-align: center; - line-height: 30px; - background: url(../images/Tabs/corner-tl.gif) top left no-repeat; -} - -.tabs-container -{ - position: relative; - overflow: hidden; -} - -.tabs-levels -{ - position: absolute; - left: 0; - bottom: 0; - width: 100%; -} - -.tabs-level -{ - position: relative; - width: 100%; - height: 30px; - overflow: hidden; -} - -.tabs-level ul -{ - position: absolute; - left: 0 !important; - margin: 0px !important; - padding-left: 0px !important; -} - -.tabbed-contents -{ - border: 1px solid #404040; - border-top-width: 2px; - background-color: #141414; - padding: 8px; - clear: both; -} - -.old-tabs li -{ - display: block; - float: left; - position: relative; - padding: 0; - margin-right: 3px; -} - -.old-tabs a -{ - display: block; - float: left; - height: 29px; - text-decoration: none; - white-space: nowrap; - background: #303030 url(../images/Tabs/corner-tr.gif) no-repeat top right; - border-bottom: 1px solid #282828; - line-height: 29px; - vertical-align: middle; - padding: 0 9px 0 8px; -} - -.old-tabs div -{ - position: absolute; - left: 0; - top: 0; - width: 2px; - height: 2px; - background: url(../images/Tabs/corner-tl.gif) no-repeat; -} - -.iconlist ul li -{ - list-style-position: inside; - list-style-type: square; - padding-left: 13px; -} - -.iconlist td -{ - padding: 4px 0 6px; - /* color: white; */ -} - -.iconlist var -{ - font-size: 1px; -} - -.iconlist .iconsmall -{ - margin-right: 4px; -} - -.icontab -{ - border-collapse: collapse; - margin-top: 4px; -} - -.icontab tr -{ - background: none !important; -} - -.icontab th, .icontab td -{ - border: 0 !important; -} - -.icontab td -{ - padding: 0; - width: 10em; - font-size: 12px; - line-height: 1.5em; -} - -.icontab th -{ - padding: 0 3px 0 0; -} - -.icontab-box -{ - margin-top: 0; - border-spacing: 0 6px; - border-collapse: separate; -} - -.icontab-box th -{ - padding: 0 0 0 4px; -} - -.icontab-box td -{ - background-color: #141414; - padding: 0 6px; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.random-enchantments -{ - float: left; - width: 47%; -} - -.iconsmall, -.iconmedium, -.iconlarge, -.iconblizzard -{ - position: relative; - z-index: 0; -} - -.iconsmall { width: 26px; height: 26px; } -.iconmedium { width: 44px; height: 44px; } -.iconlarge { width: 68px; height: 68px; } -.iconblizzard { width: 76px; height: 76px; } - -/* Background image (e.g. inv_sword_17) */ -.iconsmall ins, -.iconmedium ins, -.iconlarge ins, -.iconblizzard ins -{ - display: block; - position: absolute; - z-index: 5; - background-repeat: no-repeat; -} - -.iconsmall ins { width: 18px; height: 18px; left: 4px; top: 4px; } -.iconmedium ins { width: 36px; height: 36px; left: 4px; top: 4px; } -.iconlarge ins { width: 56px; height: 56px; left: 6px; top: 6px; } -.iconblizzard ins { width: 64px; height: 64px; left: 6px; top: 6px; } - -/* Border */ -.iconsmall del, .iconmedium del, .iconlarge del, .iconblizzard del -{ - display: block; - position: absolute; - left: 0; - top: 0; - z-index: 10; - background-repeat: no-repeat; -} - -.iconsmall del { width: 26px; height: 26px; background-image: url(../images/Icon/small/border/default.png); } -.iconmedium del { width: 44px; height: 44px; background-image: url(../images/Icon/medium/border/default.png); } -.iconlarge del { width: 68px; height: 68px; background-image: url(../images/Icon/large/border/default.png); } -.iconblizzard del { width: 76px; height: 76px; background-image: url(../images/Icon/blizzard/border/default.png); } - -/* Overlay (e.g. animated sparkles) */ -.iconsmall var, .iconmedium var -{ - display: block; - position: absolute; - z-index: 15; - background-repeat: no-repeat; -} - -.iconsmall var { width: 26px; height: 26px; } -.iconmedium var { width: 44px; height: 44px; } - -/* Clickable area (w/ hilite effect) */ -.iconsmall a, .iconmedium a, .iconlarge a -{ - display: block; - position: absolute; - left: 3px; - top: 3px; - z-index: 20; -} - -.iconsmall a { width: 20px; height: 20px; background: url(../images/Icon/small/hilite/default.png) no-repeat 20px 0; } -.iconmedium a { width: 38px; height: 38px; background: url(../images/Icon/medium/hilite/default.png) no-repeat 38px 0; } -.iconlarge a { width: 62px; height: 62px; background: url(../images/Icon/large/hilite/default.png) no-repeat 62px 0; } - -.iconsmall a:hover, .iconmedium a:hover, .iconlarge a:hover -{ - background-position: 0 0; -} - -/**********/ -/* SOCKET */ -/**********/ - -.iconsmall-socket-meta-empty ins, -.iconsmall-socket-yellow-empty ins, -.iconsmall-socket-red-empty ins, -.iconsmall-socket-blue-empty ins, -.iconsmall-socket-prismatic-empty ins -{ - background-image: url(../images/Icon/small/socket/background.jpg); -} - -.iconsmall-socket-meta-empty ins { background-position: 0 0; } -.iconsmall-socket-yellow-empty ins { background-position: -36px 0; } -.iconsmall-socket-red-empty ins { background-position: -18px 0; } -.iconsmall-socket-blue-empty ins { background-position: -54px 0; } -.iconsmall-socket-prismatic-empty ins { background-position: -72px 0; } - -.iconmedium-socket-meta-empty ins, -.iconmedium-socket-yellow-empty ins, -.iconmedium-socket-red-empty ins, -.iconmedium-socket-blue-empty ins, -.iconmedium-socket-prismatic-empty ins -{ - background-image: url(../images/Icon/medium/socket/background.jpg); -} - -.iconmedium-socket-meta-empty ins { background-position: 0 0; } -.iconmedium-socket-yellow-empty ins { background-position: -72px 0; } -.iconmedium-socket-red-empty ins { background-position: -36px 0; } -.iconmedium-socket-blue-empty ins { background-position: -108px 0; } -.iconmedium-socket-prismatic-empty ins { background-position: -144px 0; } - -.iconsmall-socket-meta del { background-image: url(../images/Icon/small/socket/meta1.png); } -.iconsmall-socket-meta-empty del { background-image: url(../images/Icon/small/socket/meta0.png); } -.iconsmall-socket-red del { background-image: url(../images/Icon/small/socket/red1.png); } -.iconsmall-socket-red-empty del { background-image: url(../images/Icon/small/socket/red0.png); } -.iconsmall-socket-yellow del { background-image: url(../images/Icon/small/socket/yellow1.png); } -.iconsmall-socket-yellow-empty del { background-image: url(../images/Icon/small/socket/yellow0.png); } -.iconsmall-socket-blue del { background-image: url(../images/Icon/small/socket/blue1.png); } -.iconsmall-socket-blue-empty del { background-image: url(../images/Icon/small/socket/blue0.png); } -.iconsmall-socket-prismatic del { background-image: url(../images/Icon/small/socket/prismatic1.png); } -.iconsmall-socket-prismatic-empty del { background-image: url(../images/Icon/small/socket/prismatic0.png); } - -.iconmedium-socket-meta del { background-image: url(../images/Icon/medium/socket/meta1.png); } -.iconmedium-socket-meta-empty del { background-image: url(../images/Icon/medium/socket/meta0.png); } -.iconmedium-socket-red del { background-image: url(../images/Icon/medium/socket/red1.png); } -.iconmedium-socket-red-empty del { background-image: url(../images/Icon/medium/socket/red0.png); } -.iconmedium-socket-yellow del { background-image: url(../images/Icon/medium/socket/yellow1.png); } -.iconmedium-socket-yellow-empty del { background-image: url(../images/Icon/medium/socket/yellow0.png); } -.iconmedium-socket-blue del { background-image: url(../images/Icon/medium/socket/blue1.png); } -.iconmedium-socket-blue-empty del { background-image: url(../images/Icon/medium/socket/blue0.png); } -.iconmedium-socket-prismatic del { background-image: url(../images/Icon/medium/socket/prismatic1.png); } -.iconmedium-socket-prismatic-empty del { background-image: url(../images/Icon/medium/socket/prismatic0.png); } - -.iconsmall-socket-meta var { background-image: url(../images/Icon/small/socket/anim-meta.gif); } -.iconsmall-socket-yellow var { background-image: url(../images/Icon/small/socket/anim-yellow.gif); } -.iconsmall-socket-red var { background-image: url(../images/Icon/small/socket/anim-red.gif); } -.iconsmall-socket-blue var { background-image: url(../images/Icon/small/socket/anim-blue.gif); } -.iconsmall-socket-prismatic var { background-image: url(../images/Icon/small/socket/anim-prismatic.gif); } - -.iconmedium-socket-meta var { background-image: url(../images/Icon/medium/socket/anim-meta.gif); } -.iconmedium-socket-yellow var { background-image: url(../images/Icon/medium/socket/anim-yellow.gif); } -.iconmedium-socket-red var { background-image: url(../images/Icon/medium/socket/anim-red.gif); } -.iconmedium-socket-blue var { background-image: url(../images/Icon/medium/socket/anim-blue.gif); } -.iconmedium-socket-prismatic var { background-image: url(../images/Icon/medium/socket/anim-prismatic.gif); } - -.iconsmall-socket-meta a, -.iconsmall-socket-red a, -.iconsmall-socket-yellow a, -.iconsmall-socket-blue a, -.iconsmall-socket-prismatic a -{ - background-image: url(../images/Icon/small/hilite/socket1.png); -} - -.iconsmall-socket-meta-empty a, -.iconsmall-socket-red-empty a, -.iconsmall-socket-yellow-empty a, -.iconsmall-socket-blue-empty a, -.iconsmall-socket-prismatic-empty a -{ - background-image: url(../images/Icon/small/hilite/socket0.png); -} - -.iconmedium-socket-meta a, -.iconmedium-socket-red a, -.iconmedium-socket-yellow a, -.iconmedium-socket-blue a, -.iconmedium-socket-prismatic a -{ - background-image: url(../images/Icon/medium/hilite/socket1.png); -} - -.iconmedium-socket-meta-empty a, -.iconmedium-socket-red-empty a, -.iconmedium-socket-yellow-empty a, -.iconmedium-socket-blue-empty a, -.iconmedium-socket-prismatic-empty a -{ - background-image: url(../images/Icon/medium/hilite/socket0.png); -} - -/* TODO: Add hilite images for medium socket icons */ - -/****************/ -/* GLOWING TEXT */ -/****************/ - -.iconsmall .glow, -.iconmedium .glow, -.iconlarge .glow -{ - z-index: 15; - font-weight: bold; - cursor: default; - line-height: normal; -} - -.iconsmall .glow { font-size: 11px; margin: 2px 5px 2px 4px; } -.iconmedium .glow { font-size: 13px; margin: 4px 6px 4px 6px; } -.iconlarge .glow { font-size: 18px; margin: 4px 6px 4px 6px; } - -/*******************/ -/* SPECIAL BORDERS */ -/*******************/ - -/* Premium */ -.iconsmall-premium del { background-image: url(../images/Icon/small/border/premium.png); } -.iconmedium-premium del { background-image: url(../images/Icon/medium/border/premium.png); } -.iconlarge-premium del { background-image: url(../images/Icon/large/border/premium.png); } - -/* Gold */ -.iconsmall-gold del { background-image: url(../images/Icon/small/border/gold.png); } -.iconmedium-gold del { background-image: url(../images/Icon/medium/border/gold.png); } -.iconlarge-gold del { background-image: url(../images/Icon/large/border/gold.png); } - -/* Gold (selected) */ -.iconmedium-gold-selected del { background-image: url(../images/Icon/medium/border/gold-selected.png); } -.iconlarge-gold-selected del { background-image: url(../images/Icon/large/border/gold-selected.png); } - -.iconmedium-gold-selected a, -.iconlarge-gold-selected a -{ - background: none !important; - cursor: default; -} - -/* Quality colors */ -.iconsmall-q0 del { background-image: url(../images/Icon/small/border/q0.png); } -.iconsmall-q1 del { background-image: url(../images/Icon/small/border/q1.png); } -.iconsmall-q2 del { background-image: url(../images/Icon/small/border/q2.png); } -.iconsmall-q3 del { background-image: url(../images/Icon/small/border/q3.png); } -.iconsmall-q4 del { background-image: url(../images/Icon/small/border/q4.png); } -.iconsmall-q5 del { background-image: url(../images/Icon/small/border/q5.png); } -.iconsmall-q6 del { background-image: url(../images/Icon/small/border/q6.png); } -.iconsmall-q7 del { background-image: url(../images/Icon/small/border/q7.png); } -.iconsmall-q8 del { background-image: url(../images/Icon/small/border/q8.png); } -.iconsmall-q9 del { background-image: url(../images/Icon/small/border/q9.png); } -.iconsmall-q10 del { background-image: url(../images/Icon/small/border/q10.png); } - -.iconmedium-q0 del { background-image: url(../images/Icon/medium/border/q0.png); } -.iconmedium-q1 del { background-image: url(../images/Icon/medium/border/q1.png); } -.iconmedium-q2 del { background-image: url(../images/Icon/medium/border/q2.png); } -.iconmedium-q3 del { background-image: url(../images/Icon/medium/border/q3.png); } -.iconmedium-q4 del { background-image: url(../images/Icon/medium/border/q4.png); } -.iconmedium-q5 del { background-image: url(../images/Icon/medium/border/q5.png); } -.iconmedium-q6 del { background-image: url(../images/Icon/medium/border/q6.png); } -.iconmedium-q7 del { background-image: url(../images/Icon/medium/border/q7.png); } -.iconmedium-q8 del { background-image: url(../images/Icon/medium/border/q8.png); } -.iconmedium-q9 del { background-image: url(../images/Icon/medium/border/q9.png); } -.iconmedium-q10 del { background-image: url(../images/Icon/medium/border/q10.png); } - -.iconlarge-q0 del { background-image: url(../images/Icon/large/border/q0.png); } -.iconlarge-q1 del { background-image: url(../images/Icon/large/border/q1.png); } -.iconlarge-q2 del { background-image: url(../images/Icon/large/border/q2.png); } -.iconlarge-q3 del { background-image: url(../images/Icon/large/border/q3.png); } -.iconlarge-q4 del { background-image: url(../images/Icon/large/border/q4.png); } -.iconlarge-q5 del { background-image: url(../images/Icon/large/border/q5.png); } -.iconlarge-q6 del { background-image: url(../images/Icon/large/border/q6.png); } -.iconlarge-q7 del { background-image: url(../images/Icon/large/border/q7.png); } -.iconlarge-q8 del { background-image: url(../images/Icon/large/border/q8.png); } -.iconlarge-q9 del { background-image: url(../images/Icon/large/border/q9.png); } -.iconlarge-q10 del { background-image: url(../images/Icon/large/border/q10.png); } - -/****************/ -/* INLINE ICONS */ -/****************/ - -.icontiny { background: left center no-repeat; } -.icontinyr { padding-right: 18px !important; background: right center no-repeat; } -.icontinyl { padding-left: 18px !important; background: left center no-repeat; } -a.icontiny { text-decoration: none; } -a.icontiny span span { text-decoration:underline; } -span.icontiny, a.tinyspecial { padding-left:18px !important; background:left center no-repeat; } - /* -Icons -Left-aligned by default. -Variations: - * right --> Right-aligned - * padded --> Additional padding +CSS tweaks for Premium users */ -.icon-add -{ - padding-left: 20px !important; - background: url(../images/icons/add.gif) no-repeat left center; -} - -.icon-alliance -{ - padding-left: 12px; - background: url(../images/icons/alliance.gif) left center no-repeat; -} - -.icon-alliance-padded -{ - padding-left: 18px; - background: url(../images/icons/alliance.gif) 4px center no-repeat; -} - -.icon-arrowrightbullet-right -{ - padding-right: 16px; - background: url(../images/icons/arrow-right-bullet.gif) no-repeat right center; -} - -.icon-bc -{ - padding-left: 34px; - background: url(../images/icons/bc.gif) left center no-repeat; -} - -.icon-bc-right -{ - padding-right: 34px; - background: url(../images/icons/bc.gif) right center no-repeat; -} - -.icon-bell -{ - padding-left: 21px; - background: url(../images/icons/bell.gif) no-repeat left center; -} - -.icon-blizzard -{ - padding-left: 26px; - background: url(../images/icons/blizzard.gif) no-repeat left center; -} - -.icon-book -{ - padding-left: 22px; - background: url(../images/icons/book.gif) no-repeat left center; -} - -.icon-boss -{ - padding-left: 15px !important; - background: url(../images/icons/boss.gif) left center no-repeat; -} - -.icon-boss-padded -{ - padding-left: 23px !important; - background: url(../images/icons/boss.gif) 6px center no-repeat; -} - -.icon-bubble -{ - padding-left: 22px; - background: url(../images/icons/bubble.gif) left center no-repeat; -} - -.icon-bubble-right -{ - padding-right: 22px; - background: url(../images/icons/bubble.gif) right center no-repeat; -} - -.icon-star -{ - padding-left: 21px; - background: url(../images/icons/star.png) no-repeat left center; -} - -.icon-star-right -{ - padding-right: 21px; - background: url(../images/icons/star.png) no-repeat right center; -} - -.icon-delete -{ - padding-left: 19px !important; - background: url(../images/icons/delete.gif) no-repeat left center; -} - -.icon-edit -{ - padding-left: 21px; - background: url(../images/icons/edit.gif) no-repeat left center; -} - -.icon-email -{ - padding-left: 21px; - background: url(../images/icons/email.gif) left center no-repeat; -} - -.icon-facebook -{ - padding-left: 20px; - background: url(../images/icons/facebook.gif) left center no-repeat; -} - -.icon-ffa -{ - padding-left: 13px; - background: url(../images/icons/ffa.gif) left center no-repeat; -} - -.icon-help -{ - padding-left: 19px !important; - background: url(../images/icons/help.gif) left center no-repeat; -} - -.icon-heroic -{ - padding-left: 19px; - background: url(../images/icons/heroic.gif) left center no-repeat; -} - -.icon-horde -{ - padding-left: 18px; - background: url(../images/icons/horde.gif) left center no-repeat; -} - -.icon-instance1, -.icon-instance2, -.icon-instance3, -.icon-instance4, -.icon-instance5, -.icon-instance7, -.icon-instance8 -{ - padding-left: 19px; - background: url(../images/icons/instance.gif) no-repeat; -} - -.icon-instance1 { background-position: left center; } /* Transit (white) */ -.icon-instance2 { background-position: -152px center; } /* Dungeon (blue) */ -.icon-instance3, -.icon-instance7, -.icon-instance8 { background-position: -357px center; } /* Raid (green) */ -.icon-instance4 { background-position: -564px center; } /* Battleground (red) */ -.icon-instance5 { background-position: -734px center; } /* Heroic dungeon (purple) */ - -.icon-link -{ - padding-left: 19px; - background: url(../images/icons/link.gif) no-repeat left center; -} - -.icon-lock -{ - padding-left: 21px; - background: url(../images/icons/locked.gif) no-repeat left center; -} - -.icon-poll -{ - padding-left: 21px; - background: url(../images/icons/poll.png) no-repeat 1px center; -} - -.icon-print -{ - padding-left: 21px; - background: url(../images/icons/print.gif) left center no-repeat; -} - -.icon-refresh -{ - padding-left: 21px; - background: url(../images/icons/refresh.gif) no-repeat left center; -} - -.icon-report -{ - padding-left: 16px !important; - background: url(../images/icons/report.gif) 3px center no-repeat; -} - -.icon-return -{ - padding-left: 21px; - background: url(../images/icons/return.gif) no-repeat left center; -} - -.icon-rss -{ - padding-left: 18px; - background: url(../images/icons/rss.gif) no-repeat left center; -} - -.icon-save -{ - padding-left: 21px !important; - background: url(../images/icons/save.gif) no-repeat left center; -} - -.icon-sticky -{ - padding-left: 21px; - background: url(../images/icons/sticky.gif) no-repeat left center; -} - -.icon-twitter -{ - padding-left: 20px; - background: url(../images/icons/twitter.gif) left center no-repeat; -} - -.icon-unlock -{ - padding-left: 21px; - background: url(../images/icons/unlocked.gif) no-repeat left center; -} - -.icon-wotlk -{ - padding-left: 41px; - background: url(../images/icons/wotlk.gif) left center no-repeat; -} - -.icon-wotlk-right -{ - padding-right: 41px; - background: url(../images/icons/wotlk.gif) right center no-repeat; -} - -.icon-wowhead -{ - padding-left: 19px; - background: url(../images/icons/favicon.gif) left center no-repeat; -} - -.icon-male -{ - padding-left: 19px; - background: url(../images/icons/male.png) left center no-repeat; -} - -.icon-female -{ - padding-left: 19px; - background: url(../images/icons/female.png) left center no-repeat; -} - -.icon-us-right -{ - padding-right: 20px; - background: url(../images/icons/us.gif) right center no-repeat; -} - -.icon-eu-right -{ - padding-right: 20px; - background: url(../images/icons/eu.gif) right center no-repeat; -} - -.inputbox -{ - width: 30em; - color: #ccc; - background-color: #383838; - border-left: 1px solid #606060; - border-top: 1px solid #606060; - border-right: 1px solid #101010; - border-bottom: 1px solid #101010; - margin: 0 auto; - padding: 15px; - line-height: 1.7em; -} - -.inputbox td -{ - padding: 2px; -} - -.inputbox h1 -{ - color: white; - font-size: 16px; - text-align: center; - padding-bottom: 6px; - margin: 0; -} - -#inputbox-error -{ - color: #c33; - font-weight: bold; - font-size: 14px; - padding-bottom: 10px; - text-align: center; -} - -.listview -{ - border: 2px solid #404040; - clear: both; -} - -.listview-band-top, .listview-band-bottom -{ - background-color: #404040; - color: #cccccc; -} - -.listview-band-top -{ - padding: 3px 3px 6px 6px; -} - -.listview-band-bottom -{ - padding: 6px 3px 3px 3px; -} - -.listview-band-top input, .listview-band-bottom input, -.listview-band-top select, .listview-band-bottom select -{ - font-size: 11px; - margin-right: 0.5em; -} - -.listview-quicksearch -{ - display: block; - float: right; - position: relative; - margin-right: 1px; -} - -.listview-quicksearch a -{ - position: absolute; - display: block; - top: 0; - right: 0; - padding: 3px 3px 2px 2px; -} - -.listview-quicksearch a span -{ - display: block; - width: 12px; - height: 12px; - background: url(../images/Listview/quicksearch-cancel.gif) no-repeat; -} - -.listview-quicksearch a:hover span -{ - background-position: 0 -12px; -} - -.listview-quicksearch em -{ - position: absolute; - display: block; - right: 2px; - top: 2px; - width: 13px; - height: 13px; - background: url(../images/Listview/quicksearch.gif) no-repeat; -} - -.listview-quicksearch input -{ - margin: 0; - border: 1px solid #a7a6aa; - height: 13px; - padding-left: 2px; - font-size: 11px; - font-family: Arial, sans-serif; - background: white; - color: black; -} - -.listview-withselected -{ - /* Top bar */ - clear: left; - padding-left: 33px; - background: url(../images/Listview/withselected.gif) 11px 6px no-repeat; -} - -.listview-withselected2 -{ - /* Bottom bar */ - padding-left: 33px; - background: url(../images/Listview/withselected.gif) 11px -35px no-repeat; -} - -.listview-nav -{ - float: right; - padding-right: 1px; - margin-left: 36px; -} - -.listview-nav a, .listview-nav span -{ - margin-left: 0.5em; -} - -.listview-note -{ - line-height: 16px; - clear: left; -} - -.listview table -{ - width: 100%; - border-collapse: collapse; -} - -.listview th -{ - font-size: 14px; - font-weight: bold; - padding: 0; - border-bottom: 1px solid #202020; -} - -.listview .iconlist th -{ - border: none; -} - -.listview thead div -{ - position: relative; - border-top: 1px solid #707070; - border-left: 1px solid #707070; - border-right: 1px solid #303030; - border-bottom: 1px solid #303030; -} - -.listview thead a -{ - display: block; - padding: 5px 2px; - text-decoration: none; - color: white; - background-color: #585858; -} - -.listview thead a span -{ - padding: 0 4px; -} - -.listview thead a span span -{ - padding: 0; -} - -.listview th a:hover -{ - background-color: #606060; -} - -.listview th a.static -{ - cursor: default; -} - -.listview th a.static:hover -{ - background-color: #585858; -} - -.listview-mode-default, .listview-mode-div, .listview-mode-tiled, .listview-mode-calendar -{ - background-color: #141414; -} - -.listview-mode-default th -{ - white-space: nowrap; -} - -.listview-mode-default td -{ - padding: 4px; - color: #dddddd; - text-align: center; - border: 1px solid #404040; - font-size: 13px; -} - -.listview-clip td -{ - border: none; - border-bottom: 1px solid #303030; -} - -.listview-mode-default .small -{ - font-size: 11px; -} - -.listview-mode-default .small2 -{ - font-size: 11px; - padding-top: 3px; -} - -.listview-mode-default .small3 -{ - font-size: 11px; - color: #707070; -} - -.listview-mode-default .crop -{ - height: 1.33333em; - overflow: hidden; - line-height: 1.2; -} - -.listview-mode-default tbody a -{ - text-decoration: none; -} - -.listview-mode-default tbody a:hover -{ - text-decoration: underline; -} - -.listview-mode-default tbody.clickable tr -{ - cursor: pointer; -} - -.listview-mode-default tbody tr:hover -{ - background-color: #202020; -} - -.listview-mode-tiled td -{ - cursor: pointer; -} - -.listview-mode-tiled td:hover -{ - background-color: #202020; -} - -.listview-mode-tiled td.empty-cell -{ - cursor: default !important; -} - -.listview-mode-tiled td.empty-cell:hover -{ - background: none !important; -} - -.listview-mode-calendar th -{ - padding: 3px; - background-color: #404040; -} - -.listview-mode-calendar td -{ - vertical-align: top; -} - -.listview-mode-calendar .calendar-today -{ - background-color: #404040; - font-weight: bold; -} - -.listview-mode-calendar .calendar-date -{ - background-color: #242424; - padding: 3px; -} - -.listview-mode-calendar .calendar-event -{ - height: 88px; - padding: 3px; -} - -.listview tr.mergerow -{ - background-color: #131d1a; -} - -.listview tr.mergerow:hover -{ - background-color: #1a2924; -} - -.listview tr.checked -{ - background-color: #242424; -} - -.listview tr.checked:hover -{ - background-color: #2C2C2C; -} - -.listview tr.upgraded -{ - background-color: #242424; -} - -.listview tr.upgraded:hover -{ - background-color: #2C2C2C; -} - -.listview tr.upgraded td -{ - font-weight: bold; -} - -.listview-cb -{ - text-align: center; - cursor: default; -} - -.listview-cb input -{ - cursor: default; -} - -.listview-nodata -{ - padding: 4px; - text-align: center; - background-color: #141414; -} - -.listview-clip -{ - overflow: auto; - background-color: black; -} - -.listview-indicators -{ - padding-left: 3px; -} - -.sortasc -{ - padding-right: 15px !important; - background: url(../images/Listview/sort-asc.gif) no-repeat right center; -} - -.sortdesc -{ - padding-right: 15px !important; - background: url(../images/Listview/sort-desc.gif) no-repeat right center; -} - -td.checked -{ - background-color: #202020; -} - -td.checked:hover -{ - background-color: #2C2C2C; -} - -td.checked .listview-cb:hover -{ - background-color: #343434; -} - -.comment -{ - color: #ddd; - font-size: 13px; - line-height: 1.5em !important; - padding: 4px 4px 0; -} - -.listview-aci .comment-indent -{ - padding-left: 32px; -} - -.comment-header, .comment-header-bt -{ - font-family: Verdana, Arial, sans-serif; - font-size: 11px; - padding: 4px; - margin-bottom: 4px; -} - -.comment-header a.q0, .comment-header-bt a.q0 -{ - font-weight: normal; - color: #aaa !important; - text-decoration: none; -} - -.comment-header -{ - color: #AAA; - background: #303030; -} - -.comment-header-bt -{ - color: #888; - background: #202020; -} - -.comment-rating -{ - font-style: inherit; - float: right; - color: white; -} - -.comment-body, .comment-body-indent -{ - overflow: auto; -} - -.comment-body ol li div, .comment-body li div -{ - color: #ddd; -} - -.comment-bt, .comment-bt ol li div, .comment-bt li div -{ - color: #999; -} - -.comment-blue, .comment-blue ol li div, .comment-blue li div -{ - color: #00C0FF !important; -} - -.comment-green, .comment-green ol li div, .comment-green li div -{ - color: #5DF644 !important; -} - -.comment-gold, .comment-gold ol li div, .comment-gold li div -{ - color: #D7CEA4 !important; -} - -.comment-pink, .comment-pink ol li div, .comment-pink li div -{ - color: #F9F !important; -} - -.comment-edit-modes a -{ - padding: 0 5px; -} - -.comment-edit-buttons -{ - padding-top: 4px; -} - -.comment-edit-body textarea -{ - width: 98%; - height: 11em; - font-family: Arial, sans-serif; - font-size: 16px; - margin: 3px 0; -} - -.comment-lastedit -{ - padding-top: 4px; - font-style: italic; - color: #9d9d9d; - font-size: 11px; -} - -.comment-links -{ - font-style: inherit; - text-align: right; - font-size: 11px; - padding: 0 2px 2px 0; - color: #ddd; -} - -.comment-links span, .comment-links span -{ - padding-right: 5px; -} - -.screenshot-cell -{ - cursor: pointer; - padding: 10px 4px; - text-align: center; -} - -.screenshot-cell img -{ - border: 2px solid #404040; - background-color: #080808; - margin-bottom: 3px; -} - -.screenshot-cell-user -{ - width: 100%; - overflow: hidden; - font-size: 11px; - padding-bottom: 5px; - color: #ccc; -} - -.screenshot-caption, .screenshot-caption-over -{ - width: 100%; - position: absolute; - line-height: 18px; -} - -.screenshot-caption -{ - overflow: hidden; - height: 1.33333em; - padding: 1px; - left: 0; - top: 0; - z-index: 0; -} - -.screenshot-caption-over -{ - color: white; - background-color: #505050; - border: 1px solid #303030; - padding: 0; - left: 0; - top: 0; - z-index: 1; -} - -.screenshot-caption span, .screenshot-caption-over span -{ - font-size: 11px; - font-weight: bold; -} - -.slider-x, .slider-y { - position: relative; -} - -.slider-x { - width: 100%; - height: 25px; -} - -.slider-y { - width: 25px; - height: 100%; -} - -.slider-x.has-labels { - height: 40px; -} - -.slider-x .track, .slider-y .track { - position: absolute; - display: block; - width: 100%; - height: 100%; - z-index: 8; -} - -.slider-x .track { - height: 25px; -} - -.slider-y .track { - width: 25px; -} - -.slider-x .handle, .slider-y .handle { - position: absolute; - top: 0; - left: 0; - z-index: 10; -} - -.slider-x .handle { - background: url(../images/ui/misc/slider.gif) no-repeat top left; - cursor: e-resize; - height: 22px; - width: 9px; -} - -.slider-y .handle { - background: url(../images/ui/misc/slider.gif) no-repeat top right; - cursor: n-resize; - height: 9px; - width: 22px; -} - -.slider-x .handle:hover { - background-position: bottom left; -} - -.slider-y .handle:hover { - background-position: bottom right; -} - -.slider-x span, .slider-y span { - position: absolute; - background: #7e7e7e; - border: 1px solid #404040; - z-index: 5; -} - -.slider-x span { - top: 9px; - left: 0; - width: 100%; - height: 2px; -} - -.slider-y span { - top: 0; - left: 9px; - width: 2px; - height: 100%; -} - -.slider-x .label { - font-size: 11px; - left: 0; - position: absolute; - top: 22px; -} - -.slider-x .label.max { - left: auto; - right: 0; -} - -.slider-y .label { - font-size: 11px; - left: 22px; - position: absolute; - top: 0; -} - -.slider-y .label.max { - top: auto; - bottom: 0; -} - -.slider-x input, .slider-y input { - background: none; - border: 1px solid transparent; - font-weight: bold; - color: #fff; - display: block; - font-size: 11px; - margin: 0 auto; - position: relative; - text-align: center; - top: 22px; - width: 50px; - z-index: 9; -} - -.slider-y input { - margin: 0 0 0 21px; - position: relative; - text-align: left; - top: 45%; - width: 30px; -} - -.slider-x input:hover, .slider-y input:hover, .slider-x input:focus, .slider-y input:focus { - background: #101010; - border-color: #303030; - outline: none; -} - -.tooltip-slider table { - width: 100%; -} - -.pet-model -{ - position: relative; - background-color: #101010; - width: 200px; - height: 150px; - border: 3px solid #404040; - margin: 0 auto; - margin-bottom: 3px; -} - -a.pet-zoom -{ - position: absolute; - display: block; - left: 0; - top: 0; - width: 200px; - height: 150px; - background: url(../images/icons/pet-zoom2.gif) 180px 130px no-repeat; -} - -a:hover.pet-zoom -{ - background-position: 180px -70px; -} - -.grid -{ - width: 100%; - clear: both; - border-collapse: collapse; - background-color: #141414; - border: 3px solid #404040; -} - -.grid td -{ - padding: 4px; - color: #ddd; - font-size: 13px; -} - -.grid th -{ - vertical-align: top; - font-weight: normal; - color: white; - padding: 4px; - text-align: left; - white-space: nowrap; -} - -.grid td, .grid th -{ - border-top: 1px solid #404040; - border-bottom: 1px solid #404040; - border-left: 1px solid #282828; - border-right: 1px solid #282828; -} - -/****************/ -/* PROGRESS BAR */ -/****************/ - -.progressbar -{ - display: block; - border: none; - background-color: black; - font-size: 11px; - font-weight: bold; - line-height: 1.5em; - color: white; - text-decoration: none !important; - position: relative; - margin: 2px 1px 4px 1px; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar del -{ - text-decoration: none; -} +/* +body.premium ... +*/ -.progressbar ins -{ - display: none; - text-decoration: none; +body.premium-logo .home-logo, body.premium-logo .home-logo a { + background-image: url(../images/logos/special/premium/home.jpg) !important; + width: 261px !important; + height: 139px !important; + margin: 0 auto 20px auto !important; } -a.progressbar -{ - cursor: default; +body.premium-logo .header-logo { + background-image: url(../images/logos/special/premium/header.gif) !important; + width: 179px !important; + height: 96px !important; + top: 5px !important; } -a.progressbar:hover ins -{ +.linklist .repcount { + color: #666666; display: inline; -} - -a.progressbar:hover del -{ - display: none; -} - -.progressbar-text -{ - position: absolute; - left: 0; - top: 1px; - width: 100%; - height: 100%; - text-align: center; -} - -.progressbar-hidden -{ - position: relative; - visibility: hidden; - height: 1px; - width: auto; - margin-top: -1px; -} - -.progressbar-rep0 -{ - border-top: 1px solid #b82e21; - border-bottom: 1px solid #9c2319; - background-color: #861c10; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-rep1 -{ - border-top: 1px solid #c9662b; - border-bottom: 1px solid #b05421; - background-color: #994515; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-rep2 -{ - border-top: 1px solid #d59b31; - border-bottom: 1px solid #bf8626; - background-color: #aa7419; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-rep3 -{ - border-top: 1px solid #d2b130; - border-bottom: 1px solid #bb9b25; - background-color: #a68818; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-rep4 -{ - border-top: 1px solid #a4a201; - border-bottom: 1px solid #8d8b01; - background-color: #777601; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-rep5 -{ - border-top: 1px solid #74a001; - border-bottom: 1px solid #638701; - background-color: #527001; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-rep6 -{ - border-top: 1px solid #30a601; - border-bottom: 1px solid #288b01; - background-color: #217201; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-rep7 -{ - border-top: 1px solid #0aa087; - border-bottom: 1px solid #068870; - background-color: #007564; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-ach0 -{ - border-top: 1px solid #2b98c9; - border-bottom: 1px solid #2082af; - background-color: #157099; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-ach1 -{ - border-top: 1px solid #7a7a7a; - border-bottom: 1px solid #686868; - background-color: #575757; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-green -{ - border-top: 1px solid #3aca01; - border-bottom: 1px solid #2b9401; - background-color: #207001; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-yellow -{ - border-top: 1px solid #e6e200; - border-bottom: 1px solid #b1ae00; - background-color: #939000; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.progressbar-red -{ - border-top: 1px solid #e60f00; - border-bottom: 1px solid #b10c00; - background-color: #930900; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.listview .progressbar -{ - margin: 3px; -} - -.article-footer -{ - background: url(../images/icons/edit.gif) left 3px no-repeat; - color: #9d9d9d; - margin-top: 1em; font-size: 11px; - padding: 3px 0 3px 20px; + margin: 0 0.8em 0 0; } -/* -Reusable UI elements/features -*/ +.linklist .repcount a, .linklist .repcount a:hover { + color: #0C9722; + font-size: 11px; + margin: 0; +} -/********************/ -/* DISCLOSURE ARROW */ -/********************/ - -.disclosure-on, .disclosure-off -{ - background: url(../images/ui/misc/arrow-disclosure.gif) no-repeat left center; +.linklist a.votecount, .linklist a.votecount:hover { + background: url(../images/ui/check3.png) no-repeat scroll left center transparent; + color: #FFFFFF; + font-size: 11px; + margin: 0; padding-left: 15px; } -.disclosure-off -{ - background-position: -740px center; +.vote-comment .comment-body { + border-left: 14px solid #111111; + padding: 10px; + color: #999999; + margin-bottom: 5px; } -a.disclosure-on, a.disclosure-off -{ - color: white; - text-decoration: none; - font-weight: bold; +.vote-comment { + margin-bottom: 1em; } -a.disclosure-on:hover, a.disclosure-off:hover -{ - text-decoration: underline; +.vote-comment .votes-left { + color: #AAAAAA; + margin-bottom: 5px; + font-size: 90%; } -/******************/ -/* WOW RED BUTTON */ -/******************/ - -a.button-red -{ - position: relative; - display: block; - float: right; - text-decoration: none; - cursor: pointer; - line-height: 21px; - color: #FFD100; - font-weight: bold; - font-size: 11px; - background: url(../images/ui/button/wow-red.gif) left 0 no-repeat; - padding-left: 13px; - white-space: nowrap; - outline: 0; - margin-left: 8px; +.vote-comment .vote-reason { + margin-bottom: 5px; } -a.button-red span -{ - display: block; - position: relative; - z-index: 5; +div.screenshotviewer { + padding: 10px 10px 0 10px; + background-color: #303030; } -a.button-red i -{ - position: absolute; - left: -1px; - top: 2px; - z-index: 1; - font-style: normal; - color: black; -} - -a.button-red em -{ - display: block; - font-style: normal; - padding-right: 13px; - background: url(../images/ui/button/wow-red.gif) right 0 no-repeat; -} - -a.button-red b -{ - display: block; - position: absolute; -} - -a:hover.button-red -{ - color: white; - background-position: left -21px; - text-decoration: none !important; -} - -a:hover.button-red em -{ - background-position: right -21px; -} - -a:active.button-red -{ - background-position: left -63px; -} - -a:active.button-red em -{ - background-position: right -63px; -} - -a:active.button-red span, a:active.button-red i -{ - left: -2px; -} - -a:active.button-red-disabled span -{ - left: 0; -} - -a:active.button-red-disabled i -{ - left: -1px; -} - -a.button-red-disabled -{ - cursor: default !important; -} - -a.button-red-disabled, a:hover.button-red-disabled -{ - background-position: left -84px !important; - color: #A0A0A0; - cursor: default; -} - -a.button-red-disabled em, a:hover.button-red-disabled em -{ - background-position: right -84px !important; -} - -/*******************/ -/* BIG BLUE BUTTON */ -/*******************/ - -a.button-bigblue -{ - display: block; - float: left; - height: 66px; - margin-right: 30px; - background: url(../images/ui/button/big-blue.gif) no-repeat; - color: white; - white-space: nowrap; - text-decoration: none; - position: relative; -} - -a.button-bigblue:hover -{ - background-position: 0 -66px; -} - -a.button-bigblue:hover ins -{ - text-decoration: underline; -} - -a.button-bigblue:hover b -{ - background-position: right -66px; -} - -a.button-bigblue span -{ - display: block; - height: 66px; - padding: 0 30px 0 60px; - background-repeat: no-repeat; - background-position: 8px center; -} - -a.button-bigblue ins -{ - display: block; - padding-top: 15px; - text-decoration: none; - font-size: 18px; -} - -a.button-bigblue del -{ - display: block; - text-decoration: none; - font-size: 11px; - color: #eeeeee; -} - -a.button-bigblue b -{ - position: absolute; - top: 0; - right: -13px; - background: url(../images/ui/button/big-blue.gif) no-repeat right 0; - width: 13px; - height: 66px; -} - -.live-search -{ - position: absolute; - z-index: 100000001; - left: 0; - top: 0; - background: #484848; - border: 1px solid #202020; - padding: 0 2px 2px; - white-space: nowrap; - color: #FFD100; - font-size: 12px; -} - -.live-search div -{ - background-color: #282828; -} - -.live-search div div -{ - background-color: transparent; - position: relative; - border-top: 1px solid #484848; - border-bottom: 1px solid #101010; - overflow: hidden; -} - -.live-search a -{ - display: block; - text-decoration: none; - padding: 4px; - padding-left: 28px; -} - -.live-search a:hover -{ - color: #FFD100; -} - -.live-search i -{ - display: block; - position: absolute; - font-style: normal; - line-height: 1.5em; - top: 3px; - right: 0; - padding: 0 4px; - font-size: 11px; - color: #808080; - background: #282828; -} - -.live-search a:hover i -{ - padding-right: 18px; - background-image: url(../images/LiveSearch/arrow.gif); - background-position: right center; - background-repeat: no-repeat; -} - -div.live-search-selected div -{ - border-bottom: 1px solid #202020; - color: white; -} - -div.live-search-icon -{ - background-position: 4px 3px; - background-repeat: no-repeat; -} - -div.live-search-icon div -{ - background-image: url(../images/Icon/small/border/default.png); - background-position: left center; - background-repeat: no-repeat; -} - -div.live-search-icon-boss - { - background-image: url(../images/icons/boss.gif); - background-position: 8px center; - background-repeat: no-repeat; -} - -div.live-search-icon-quest-alliance -{ - background-image: url(../images/icons/alliance.gif); - background-position: 9px 5px; - background-repeat: no-repeat; -} - -div.live-search-icon-quest-horde -{ - background-image: url(../images/icons/horde.gif); - background-position: 6px 5px; - background-repeat: no-repeat; -} - -div.lightbox-outer -{ - position: fixed; - left: 50%; - top: 50%; - width: 1px; - height: 1px; - font-size: 1px; - z-index: 60; -} - -div.lightbox-inner -{ - position: absolute; - z-index: 70; -} - -div.lightbox-overlay -{ - position: absolute; - left: 0; - top: 0; - width: 100%; - background: black; - opacity: .8; - z-index: 50; -} - -div.modelviewer-screen -{ - background-color: #141414; - width: 600px; - height: 400px; - overflow: hidden; - text-align: center; -} - -div.modelviewer-quality -{ - float: left; - padding: 10px 0; -} - -div.modelviewer-quality span -{ - float: left; - display: block; - line-height: 22px; -} - -div.modelviewer-model -{ - padding: 10px 0; -} - -div.screenshotviewer-screen -{ +div.screenshotviewer-screen { background-color: black; position: relative; text-align: center; } -div.screenshotviewer-screen a -{ +div.screenshotviewer-screen a { display: block; position: absolute; z-index: 100; @@ -3168,26 +665,22 @@ div.screenshotviewer-screen a height: 100%; } -a.screenshotviewer-prev -{ +a.screenshotviewer-prev { left: 0; width: 50%; } -a.screenshotviewer-next -{ +a.screenshotviewer-next { left: 50.5%; width: 50%; } -a.screenshotviewer-cover -{ +a.screenshotviewer-cover { left: 0; width: 100%; } -div.screenshotviewer-screen a span -{ +div.screenshotviewer-screen a span { display: none; position: absolute; top: 10%; @@ -3195,781 +688,48 @@ div.screenshotviewer-screen a span background-color: #303030; } -div.screenshotviewer-screen a:hover span -{ - display: block; +div.screenshotviewer-screen a:hover span { + display: inline-block; } -a.screenshotviewer-next span -{ +a.screenshotviewer-prev span { + left: 0; +} + +a.screenshotviewer-next span { right: 0; } -a.screenshotviewer-cover span -{ +a.screenshotviewer-cover span { position: static !important; margin: 0 auto; } -div.screenshotviewer-from -{ +a.screenshotviewer-original { + float: right; + display: block; + padding: 10px 0 10px 10px; + margin-right: 10px; +} + +a.screenshotviewer-close { + float: right; + display: block; + padding: 10px 0 10px 10px; +} + +div.screenshotviewer-from { padding-top: 10px; font-size: 11px; - color: #ccc; -} - -div.screenshotviewer-caption -{ - font-size: 11px; - font-weight: bold; - padding: 5px 0 10px; -} - -div.dialog -{ - font-size: 12px; - background: #303030; - padding: 10px 10px 0; -} - -div.dialog .text -{ - padding: 10px; - background: #141414; -} - -div.dialog th -{ - text-align: right; - font-weight: normal; - white-space: nowrap; - vertical-align: top; - line-height: 24px; - padding: 3px; -} - -div.dialog td -{ - vertical-align: top; - padding: 3px; -} - -div.dialog textarea -{ - font-family: Arial, sans-serif; - font-size: 16px; - margin: 3px 0; -} - -/***********/ -/* TOOLBAR */ -/***********/ - -.toolbar button -{ - padding-left: 2px; - padding-right: 2px; - margin-right: 2px; -} - -.toolbar img -{ - width: 16px; - height: 16px; - background: url(../images/ui/misc/toolbar.png) no-repeat; -} - -.toolbar img.toolbar-b { background-position: 0 0 !important; } -.toolbar img.toolbar-i { background-position: -16px 0 !important; } -.toolbar img.toolbar-u { background-position: -32px 0 !important; } -.toolbar img.toolbar-s { background-position: -48px 0 !important; } -.toolbar img.toolbar-url { background-position: -64px 0 !important; } -.toolbar img.toolbar-small { background-position: -80px 0 !important; } -.toolbar img.toolbar-quote { background-position: -96px 0 !important; } -.toolbar img.toolbar-code { background-position: -112px 0 !important; } -.toolbar img.toolbar-ul { background-position: -128px 0 !important; } -.toolbar img.toolbar-ol { background-position: -144px 0 !important; } -.toolbar img.toolbar-li { background-position: -160px 0 !important; } -.toolbar img.toolbar-img { background-position: -176px 0 !important; } -.toolbar img.toolbar-thumb { background-position: -192px 0 !important; } -.toolbar img.toolbar-title { background-position: -208px 0 !important; } -.toolbar img.toolbar-pad { background-position: -224px 0 !important; } -.toolbar img.toolbar-winners { background-position: -240px 0 !important; } -.toolbar img.toolbar-prizes { background-position: -256px 0 !important; } -.toolbar img.toolbar-entryform { background-position: -272px 0 !important; } -.toolbar img.toolbar-fromhtml { background-position: -288px 0 !important; } - -/***********/ -/* CAPTCHA */ -/***********/ - -a.captcha -{ - display: block; - width: 150px; - height: 40px; - margin: 8px 1px; -} - -a.captcha:hover -{ - border: 1px dotted #747474; - margin: 7px 0; - background-color: #343434; -} - -.tabbed-contents a.captcha:hover -{ - border: 1px dotted #686868; - background-color: #282828; -} - -.inputbox a.captcha:hover -{ - border: 1px dotted #888; - background-color: #484848; -} - -div.captcha-center -{ - width: 318px; - margin: 0 auto; -} - -#recaptcha_instructions_image -{ color: #cccccc; } -#description.left, #article-generic.left -{ - clear:left; -} - -h1.h1-icon -{ - padding-top: 5px; -} - -div.h1-icon -{ - float: left; - position: relative; - top: -4px; - left: -4px; - margin-right: 2px; - margin-bottom: -4px; -} - -.dragged -{ - z-index: 1000; - opacity: .35; - -moz-opacity: .35; -} - -.pages var -{ - float: right; - color: #ccc; - font-style: normal; - padding: 3px 0; - margin: 0; -} - -.pages var span -{ - margin: 0 6px; - color: #9d9d9d; -} - -.pages .gotopage -{ - margin-right: 6px; - padding: 0 9px; - cursor: pointer; - background: url(../images/icons/pages.gif) no-repeat left center; -} - -.pages-numbers a, .pages-numbers span -{ - float: right; - margin: 0 2px; - font-size: 11px; -} - -.pages-numbers a -{ - padding: 3px 6px; - border: 1px solid #404040; - background-color: #141414; - text-decoration: none; -} - -.pages-numbers a:hover -{ - background-color: #303030; -} - -.pages-numbers span -{ - padding: 3px; - font-size: 13px; -} - -.pages-numbers span.selected -{ - padding: 3px 6px; - color: white; - background-color: #404040; - border: 1px solid #404040; - font-weight: bold; - font-size: 11px; -} - -.rcorners -{ - border-radius:3px; -} - -#fi -{ - color: #ccc; -} - -#fi table -{ - border-collapse: collapse; - border: 0; -} - -#fi table td -{ - padding: 0; - border: 0; -} - -#fi .padded -{ - padding-top: 12px; - white-space: nowrap; -} - -#fi .padded2 -{ - padding-top: 8px; -} - -#fi .rightselect -{ - margin-top: 2px; -} - -#fi .rightpanel -{ - float: right; - text-align: right; -} - -#fi .rightpanel2 -{ - float: right; - text-align: right; - padding-right: 10px; -} - -#fi .smalltextbox -{ - text-align: center; - width: 2em; -} - -#fi .smalltextbox2 -{ - text-align: center; - width: 2.3em; -} - -.criteria div -{ - padding-bottom: 4px; -} - -#statweight-disclosure -{ - padding: 10px; - border: 1px solid #363636; - background-color: #141414; - float: left; -} - -#statweight-help div -{ - position: absolute; - right: -9px; - top: -33px; -} - -#fi_weight -{ - margin-top: 10px; - padding-top: 12px; - border-top: 1px solid #484848; -} - -small, .listview-mode-default .small, .comment-edit-modes, .comment-edit-body -{ - font-size: 11px; -} - -.text ol li div, .text li div, .minibox h3 a, .comment-body b, .comment-body h3 -{ - color: #cccccc; -} - -a:hover, a.open, .infobox li div, .text b -{ - color: white; -} - -.text ul, .text ol, .comment-body ul, .comment-body ol -{ - margin: 1em 0; - padding-left: 26px; -} - -.text ol ul, .text ol ol, .text ul ol, .text ul ul { - margin-bottom: 0px; - margin-top: 0px; -} - -.text ul.first, .text ol.first, .comment-body h3.first -{ - margin-top: 0; -} - -.text ol li, .comment-body ol li -{ - color: #E5CC80; -} - -.text ul, .comment-body ul -{ - /* color: #c3030b; */ - list-style-type: square; -} - -.text li, .comment-body li -{ - list-style-position: outside; - line-height: 1.75em; -} - -.text h3 small, .infobox th small, .comment-links a -{ - font-weight: normal; -} - -#home h1, #header-logo h1 -{ - position: absolute; - left: -2323px; - top: -2323px; -} - -#header, #sidebar, .rcorners, #statweight-help -{ - position: relative; -} - -#toptabs-right a, .toplinks a -{ - margin: 0 6px; -} - -.menu-buttons a:hover, .listview-mode-default tbody a:hover, .comment-header a.q0:hover, .comment-header-bt a.q0:hover, a.disclosure-on:hover, a.disclosure-off:hover -{ - text-decoration: underline; -} - -/* probably unnessecary -#wrapper.nosidebar #main, #wrapper.nosidebar -{ - min-height: 0; -} -*/ - -#footer a, #beyondfooter a -{ - margin: 0 .5em; -} - -#infobox-sticky, .listview-cb -{ - text-align: center; -} - -.series td, .iconlist th, .listview thead a span span -{ - padding: 0; -} - -.minibox small, .minibox small a, .comment-lastedit a -{ - color: #9d9d9d; -} - -.menu table, .inputbox table -{ - border-collapse: collapse; -} - -.menu em, .menu var, .menu strong, .live-search em, .live-search var, .live-search strong -{ - display: block; - position: absolute; - background: url(../images/Menu/shadow.png) no-repeat; -} - -.menu em, .live-search em -{ - width: 5px; - top: 0; - bottom: 0; - right: -5px; - background-position: right top; -} - -.menu var, .live-search var -{ - width: 5px; - height: 6px; - right: -5px; - bottom: -6px; - background-position: right bottom; -} - -.menu strong, .live-search strong -{ - height: 6px; - left: 0; - right: 0; - bottom: -6px; - background-position: left bottom; -} - -.tabs, .old-tabs, .iconlist ul -{ - list-style-type: none; - margin: 0; - padding: 0; -} - -.tabs a:hover, .old-tabs a:hover -{ - background-color: #383838; - border-bottom: 1px solid #303030; -} - -.tabs a.selected, .tabs a.selected:hover, .old-tabs a.selected, .tabs a.selected:hover -{ - background-color: #404040; - border-bottom: 1px solid #404040; -} - -.iconlist -{ - border-collapse: collapse; - margin-top: 4px; -} - -.listview-mode-tiled td.empty-cell:hover -{ - background: none !important; -} - -.q6, .q6 a, .q7, .q7 a -{ - color: #e5cc80 !important; -} - -.listview-mode-default tbody a -{ - text-decoration: none; -} - -.listview-void -{ - display: none; -} - -.listview table, div.dialog table -{ - width: 100%; - border-collapse: collapse; -} - -a.modelviewer-help, a.screenshotviewer-original -{ - float: right; - display: block; - padding: 10px 0 10px 10px; - margin-right: 10px; -} - -a.dialog-yes, a.dialog-okay -{ - float: right; - display: block; - padding-left: 10px; - margin-right: 10px; -} - -a.modelviewer-close, a.screenshotviewer-close -{ - float: right; - display: block; - padding: 10px 0 10px 10px; -} - -a.dialog-no, a.dialog-cancel -{ - float: right; - display: block; - padding-left: 10px; -} - -.dialog-thumbup, a.dialog-thumbdown, a.dialog-okay, a.dialog-cancel, a.dialog-question, a.dialog-arrow -{ - padding-right: 22px; - margin: 10px 0 10px 10px; - line-height: 22px; - height: 22px; - display: block; - float: right; - color: #a0a0a0; - text-transform: uppercase; - text-decoration: none; - font-size: 15px; - font-family: Tahoma, sans-serif !important; -} - -.dialog-thumbup:hover, a.dialog-thumbdown:hover, a.dialog-okay:hover, a.dialog-cancel:hover, a.dialog-question:hover, a.dialog-arrow:hover -{ - color: #e0e0e0; -} - -.dialog-cancel -{ - padding-right: 24px !important; -} - -.dialog-thumbup -{ - background: url(../images/icons/dialog_icons.gif) right 0 no-repeat; -} - -.dialog-thumbup:hover -{ - background-position: right -154px; -} - -.dialog-thumbdown -{ - background: url(../images/icons/dialog_icons.gif) right -22px no-repeat; -} - -.dialog-thumbdown:hover -{ - background-position: right -176px; -} - -.dialog-okay -{ - background: url(../images/icons/dialog_icons.gif) right -44px no-repeat; -} - -.dialog-okay:hover -{ - background-position: right -198px; -} - -.dialog-cancel -{ - background: url(../images/icons/dialog_icons.gif) right -66px no-repeat; -} - -.dialog-cancel:hover -{ - background-position: right -220px; -} - -.dialog-question -{ - background: url(../images/icons/dialog_icons.gif) right -88px no-repeat; -} - -.dialog-question:hover -{ - background-position: right -242px; -} - -.dialog-arrow -{ - background: url(../images/icons/dialog_icons.gif) right -132px no-repeat; -} - -.dialog-arrow:hover -{ - background-position: right -286px; -} - -a.dialog-left -{ - padding-left: 22px; - height: 22px; - display: block; - float: left; - background: url(../images/icons/dialog_icons.gif) 0 -110px no-repeat; -} - -a.dialog-right -{ - padding-right: 22px; - height: 22px; - display: block; - float: left; - background: url(../images/icons/dialog_icons.gif) right -264px no-repeat; -} - -div.modelviewer a.dialog-cancel -{ - clear: right; - margin-top: 5px; -} - -div.modelviewer a.dialog-question -{ - margin-top: 5px; -} - -.listview-mode-default tbody tr, .listview-mode-tiled td, .listview-cb input -{ - cursor: pointer; -} - -.listview-mode-default tbody tr:hover, .listview-mode-tiled td:hover, .grid tr:hover -{ - background-color: #202020; -} - -.listview-mode-tiled td.empty-cell, a.button-red-disabled -{ - cursor: default !important; -} - -.comment-header a, .comment-header-bt a, .comment-rating span, .screenshot-cell-user a -{ +div.screenshotviewer-from a { font-weight: bold; } -.grid .iconsmall, .grid .iconmedium, .dragged .iconsmall, .dragged .iconmedium, .pages-left var, .pages-left .pages-numbers a, .pages-left .pages-numbers span -{ - float: left; -} - -a:active.button-red-disabled span, a.screenshotviewer-prev span -{ - left: 0; -} - -div.live-search-selected i, div.live-search-selected -{ - background-color: #383838; -} - -div.modelviewer, div.screenshotviewer -{ - padding: 10px 10px 0; - background-color: #303030; - font-size: 13px; -} - -.notice-box { - padding: 8px; - color: #dddddd; - margin-bottom: 10px; - text-align: center; - background: #141414; - border: 1px solid #101010; - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.reputation-negative-amount span { - color: red; +div.screenshotviewer-caption { + font-size: 11px; font-weight: bold; -} - -div.announcement-pagetop div.announcement-inner { - margin-top: 10px; -} - -div.announcement-pagetop div.announcement-inner, div.announcement-contenttop div.announcement-inner { - background-color: #141414; - border: 1px solid #101010; - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -div.announcement-inner { - background-position: 0 center; - background-repeat: no-repeat; - margin-bottom: 10px; - padding: 8px; - position: relative; -} - -/* Close button */ -a.announcement-close { - display: block; - width: 16px; - height: 16px; - background: url(../images/icons/delete.gif) center center no-repeat; - position: absolute; - right: 8px; - top: 8px; -} - -/* .text overrides */ -div.announcement ul { - margin: 0.25em 0 !important; -} -div.announcement h3 { - margin-top: 0 !important; - margin-bottom: 0.25em !important; -} -div.announcement li { - line-height: 1.75em !important; -} - -/* jQuery replacement */ -.announcement { - -webkit-transition: .5s ease; - -moz-transition: .5s ease; - -o-transition: .5s ease; - -ms-transition: .5s ease; - transition: .5s ease; -} - -.search-noresults { - background:url(../images/search/noresults.jpg) left no-repeat; - width:254px; - height:215px; - float:right; - margin-top:10px; + padding: 5px 0 10px 0; } diff --git a/static/css/global_ie.css b/static/css/global_ie.css deleted file mode 100644 index 424be548..00000000 --- a/static/css/global_ie.css +++ /dev/null @@ -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%; -} diff --git a/static/css/global_ie6.css b/static/css/global_ie6.css deleted file mode 100644 index 653b44f3..00000000 --- a/static/css/global_ie6.css +++ /dev/null @@ -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'); -} diff --git a/static/css/global_ie67.css b/static/css/global_ie67.css deleted file mode 100644 index 4c811a15..00000000 --- a/static/css/global_ie67.css +++ /dev/null @@ -1,9 +0,0 @@ -#topbar-right a -{ - top: 1px; -} - -.tooltip th -{ - height: 8px; -} diff --git a/static/css/home.css b/static/css/home.css new file mode 100644 index 00000000..75b36e65 --- /dev/null +++ b/static/css/home.css @@ -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; +} diff --git a/static/css/locale_dede.css b/static/css/locale_dede.css index 8d0aec14..1f67b8f6 100644 --- a/static/css/locale_dede.css +++ b/static/css/locale_dede.css @@ -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; } */ diff --git a/static/css/locale_enus.css b/static/css/locale_enus.css index 660060ec..dc8952d5 100644 --- a/static/css/locale_enus.css +++ b/static/css/locale_enus.css @@ -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; } diff --git a/static/css/locale_eses.css b/static/css/locale_eses.css index ddd32d45..0aa7aa60 100644 --- a/static/css/locale_eses.css +++ b/static/css/locale_eses.css @@ -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; } - */ \ No newline at end of file + */ + \ No newline at end of file diff --git a/static/css/locale_frfr.css b/static/css/locale_frfr.css index a0b26092..7e18b9a9 100644 --- a/static/css/locale_frfr.css +++ b/static/css/locale_frfr.css @@ -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; } - */ \ No newline at end of file + */ + \ No newline at end of file diff --git a/static/css/locale_ruru.css b/static/css/locale_ruru.css index f8c070af..70614368 100644 --- a/static/css/locale_ruru.css +++ b/static/css/locale_ruru.css @@ -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; } - */ \ No newline at end of file + */ + \ No newline at end of file diff --git a/static/css/petcalc.css b/static/css/petcalc.css index 656a24dd..ea0720ea 100644 --- a/static/css/petcalc.css +++ b/static/css/petcalc.css @@ -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; } diff --git a/static/css/staff.css b/static/css/staff.css new file mode 100644 index 00000000..4133fb39 --- /dev/null +++ b/static/css/staff.css @@ -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%; +} diff --git a/static/css/talent.css b/static/css/talent.css index 9ec4f02e..0d547ca6 100644 --- a/static/css/talent.css +++ b/static/css/talent.css @@ -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); -} \ No newline at end of file + filter:alpha(opacity=100); +} diff --git a/static/css/talentcalc.css b/static/css/talentcalc.css index b5e02624..2e738570 100644 --- a/static/css/talentcalc.css +++ b/static/css/talentcalc.css @@ -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; -} \ No newline at end of file +} diff --git a/static/images/header/search2.gif b/static/images/header/search2.gif new file mode 100644 index 00000000..f5b263e0 Binary files /dev/null and b/static/images/header/search2.gif differ diff --git a/static/images/logos/logo.png b/static/images/logos/home.png similarity index 100% rename from static/images/logos/logo.png rename to static/images/logos/home.png diff --git a/static/images/logos/newsbox-explained.png b/static/images/logos/newsbox-explained.png new file mode 100644 index 00000000..b2fa4efb Binary files /dev/null and b/static/images/logos/newsbox-explained.png differ diff --git a/static/js/TalentCalc.js b/static/js/TalentCalc.js index a6e145e3..52fbf211 100644 --- a/static/js/TalentCalc.js +++ b/static/js/TalentCalc.js @@ -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'); diff --git a/static/js/global.js b/static/js/global.js index a0ed3612..d6b2064f 100644 --- a/static/js/global.js +++ b/static/js/global.js @@ -34,6 +34,8 @@ var U_GROUP_PREMIUM_PERMISSIONS = U_GROUP_PREMIUM | U_GROUP_STAFF | U_GROUP_ var g_users = {}; +var g_customColors = {}; + function g_isUsernameValid(username) { return (username.match(/[^a-z0-9]/i) == null && username.length >= 4 && username.length <= 16); } @@ -140,194 +142,236 @@ var DomContentLoaded = new function() { } }; -function g_addCss(b) { - var c = $WH.ce("style"); - c.type = "text/css"; - if (c.styleSheet) { - c.styleSheet.cssText = b - } else { - $WH.ae(c, $WH.ct(b)) - } - var a = $WH.gE(document, "head")[0]; - $WH.ae(a, c) -} -function g_setTextNodes(c, b) { - if (c.nodeType == 3) { - c.nodeValue = b - } else { - for (var a = 0; a < c.childNodes.length; ++a) { - g_setTextNodes(c.childNodes[a], b) - } - } -} -function g_setInnerHtml(d, c, a) { - if (d.nodeName.toLowerCase() == a) { - d.innerHTML = c - } else { - for (var b = 0; b < d.childNodes.length; ++b) { - g_setInnerHtml(d.childNodes[b], c, a) - } - } -} -function g_getTextContent(c) { - var a = ""; - for (var b = 0; b < c.childNodes.length; ++b) { - if (c.childNodes[b].nodeValue) { - a += c.childNodes[b].nodeValue - } else { - if (c.childNodes[b].nodeName == "BR") { - if ($WH.Browser.ie67) { - a += "\r" - } else { - a += "\n" - } - } - } - a += g_getTextContent(c.childNodes[b]) - } - return a -} -function g_pickerWheel(evt) -{ - evt = $WH.$E(evt); +/* +Global functions related to DOM manipulation, events & forms that jQuery doesn't already provide +*/ - if (evt._wheelDelta < 0) - this.scrollTop += 27; - else - this.scrollTop -= 27; -} +function g_addCss(css) { + var style = $WH.ce('style'); + style.type = 'text/css'; -function g_setSelectedLink(c, b) { - if (!g_setSelectedLink.groups) { - g_setSelectedLink.groups = {} - } - var a = g_setSelectedLink.groups; - if (a[b]) { - a[b].className = a[b].className.replace("selected", "") - } - c.className += " selected"; - a[b] = c -} -function g_setCheckedRow(c, b) { - if (!g_setCheckedRow.groups) { - g_setCheckedRow.groups = {} - } - var a = g_setCheckedRow.groups; - if (a[b]) { - a[b].className = a[b].className.replace("checked", "") - } - c.className += " checked"; - a[b] = c -} -function g_toggleDisplay(a) { - if (a.style.display == "none") { - a.style.display = ""; - return true - } else { - a.style.display = "none"; - return false - } -} -function g_enableScroll(a) { - if (!a) { - $WH.aE(document, "mousewheel", g_enableScroll.F); - $WH.aE(window, "DOMMouseScroll", g_enableScroll.F) - } else { - $WH.dE(document, "mousewheel", g_enableScroll.F); - $WH.dE(window, "DOMMouseScroll", g_enableScroll.F) - } -} -g_enableScroll.F = function(a) { - if (a.stopPropagation) { - a.stopPropagation() - } - if (a.preventDefault) { - a.preventDefault() - } - a.returnValue = false; - a.cancelBubble = true; - return false -}; -function g_createRange(c, a) { - range = {}; - for (var b = c; b <= a; ++b) { - range[b] = b - } - return range -} -function g_sortIdArray(a, b, c) { - a.sort(c ? - function(e, d) { - return $WH.strcmp(b[e][c], b[d][c]) - }: function(e, d) { - return $WH.strcmp(b[e], b[d]) - }) -} -function g_sortJsonArray(e, d, f, a) { - var c = []; - for (var b in e) { - if (d[b] && (a == null || a(d[b]))) { - c.push(b) - } - } - if (f != null) { - c.sort(f) - } else { - g_sortIdArray(c, d) - } - return c -} - -function g_urlize(str, allowLocales, profile) { - var ta = $WH.ce('textarea'); - ta.innerHTML = str.replace(//g,">"); - str = ta.value; - - str = $WH.str_replace(str, ' / ', '-'); - str = $WH.str_replace(str, "'", ''); - - if (profile) { - str = $WH.str_replace(str, '(', ''); - str = $WH.str_replace(str, ')', ''); - var accents = { - "": "ss", - "": "a", "": "a", "": "a", "": "a", - "": "e", "": "e", "": "e", "": "e", - "": "i", "": "i", "": "i", "": "i", - "": "n", - "": "o", "": "o", "": "o", "": "o", - "": "u", "": "u", "": "u", "": "u", - "": "oe", - "": "A", "": "A", "": "A", "": "A", - "": "E", "": "E", "": "E", "": "E", - "": "I", "": "I", "": "I", "": "I", - "": "N", - "": "O", "": "O", "": "O", "": "O", - "": "U", "": "U", "": "U", "": "U", - "": "Oe" - }; - for (var character in accents) { - str = str.replace(new RegExp(character, "g"), accents[character]); - } - } - - str = $WH.trim(str); - if (allowLocales) { - str = $WH.str_replace(str, ' ', '-'); + if (style.styleSheet) { // ie + style.styleSheet.cssText = css; } else { - str = str.replace(/[^a-z0-9]/ig, '-'); + $WH.ae(style, $WH.ct(css)); } - str = $WH.str_replace(str, '--', '-'); - str = $WH.str_replace(str, '--', '-'); - str = $WH.rtrim(str, '-'); - str = str.replace(/[A-Z]/g, function(x) { - return x.toLowerCase(); - }); + var a = $WH.gE(document, 'head')[0]; + $WH.ae(a, style); +} - return str; +function g_setTextNodes(n, text) { + if (n.nodeType == 3) { + n.nodeValue = text; + } + else { + for (var i = 0; i < n.childNodes.length; ++i) { + g_setTextNodes(n.childNodes[i], text); + } + } +} + +function g_setInnerHtml(n, text, nodeType) { + if (n.nodeName.toLowerCase() == nodeType) { + n.innerHTML = text; + } + else { + for (var i = 0; i < n.childNodes.length; ++i) { + g_setInnerHtml(n.childNodes[i], text, nodeType); + } + } +} + +function g_getTextContent(el) { + var txt = ''; + for (var i = 0; i < el.childNodes.length; ++i) { + if (el.childNodes[i].nodeValue) { + txt += el.childNodes[i].nodeValue; + } + else if (el.childNodes[i].nodeName == 'BR') { + if ($WH.Browser.ie67) { + txt += '\r'; + } + else { + txt += '\n'; + } + } + txt += g_getTextContent(el.childNodes[i]); + } + return txt; +} + +function g_toggleDisplay(el) { + el = $(el); + el.toggle(); + if (el.is(':visible')) { + return true; + } + + return false; +} + +function g_enableScroll(enabled) { + if (!enabled) { + $WH.aE(document, 'mousewheel', g_enableScroll.F); + $WH.aE(window, 'DOMMouseScroll', g_enableScroll.F) + } + else { + $WH.dE(document, 'mousewheel', g_enableScroll.F); + $WH.dE(window, 'DOMMouseScroll', g_enableScroll.F) + } +} +g_enableScroll.F = function(e) { + if (e.stopPropagation) { + e.stopPropagation(); + } + if (e.preventDefault) { + e.preventDefault(); + } + + e.returnValue = false; + e.cancelBubble = true; + + return false; +}; + +// from http://blog.josh420.com/archives/2007/10/setting-cursor-position-in-a-textbox-or-textarea-with-javascript.aspx +function g_setCaretPosition(elem, caretPos) { + if (!elem) { + return; + } + + if (elem.createTextRange) { + var range = elem.createTextRange(); + range.move('character', caretPos); + range.select(); + } + else if (elem.selectionStart != undefined) { + elem.focus(); + elem.setSelectionRange(caretPos, caretPos); + } + else { + elem.focus(); + } +} + +function g_insertTag(where, tagOpen, tagClose, repFunc) { + var n = $WH.ge(where); + + n.focus(); + if (n.selectionStart != null) { + var + s = n.selectionStart, + e = n.selectionEnd, + sL = n.scrollLeft, + sT = n.scrollTop; + + var selectedText = n.value.substring(s, e); + if (typeof repFunc == 'function') { + selectedText = repFunc(selectedText); + } + + n.value = n.value.substr(0, s) + tagOpen + selectedText + tagClose + n.value.substr(e); + n.selectionStart = n.selectionEnd = e + tagOpen.length; + + n.scrollLeft = sL; + n.scrollTop = sT; + } + else if (document.selection && document.selection.createRange) { + var range = document.selection.createRange(); + + if (range.parentElement() != n) { + return; + } + + var selectedText = range.text; + if (typeof repFunc == 'function') { + selectedText = repFunc(selectedText); + } + + range.text = tagOpen + selectedText + tagClose; +/* + range.moveEnd("character", -tagClose.length); + range.moveStart("character", range.text.length); + + range.select(); +*/ + } + + if (n.onkeyup) { + n.onkeyup(); + } +} + +function g_onAfterTyping(input, func, delay) { + var timerId; + var ldsgksdgnlk623 = function() { + if (timerId) { + clearTimeout(timerId); + timerId = null; + } + timerId = setTimeout(func, delay); + }; + input.onkeyup = ldsgksdgnlk623; +} + +function g_onClick(el, func) { + var firstEvent = 0; + + function rightClk(n) { + if (firstEvent) { + if (firstEvent != n) { + return; + } + } + else { + firstEvent = n; + } + + func(true); + } + + el.onclick = function(e) { + e = $WH.$E(e); + + if (e._button == 2) { // middle click + return true; + } + + return false; + } + + el.oncontextmenu = function() { + rightClk(1); + + return false; + }; + + el.onmouseup = function(e) { + e = $WH.$E(e); + + if (e._button == 3 || e.shiftKey || e.ctrlKey) { // Right/Shift/Ctrl + rightClk(2); + } + else if (e._button == 1) { // Left + func(false); + } + + return false; + } +} + +function g_isLeftClick(e) { + e = $WH.$E(e); + return (e && e._button == 1); +} + +function g_preventEmptyFormSubmission() { // Used on the homepage and in the top bar + if (!$.trim(this.elements[0].value)) { + return false; + } } var PageTemplate = new function() @@ -625,7 +669,7 @@ var PageTemplate = new function() function initTopTabs() { - var $topTabs = $('#toptabs-generic'); + var $topTabs = $('#toptabs'); if(!$topTabs.length) return; @@ -818,10 +862,10 @@ var PageTemplate = new function() break; case 6: // Guides - var entries = [ [ 1, 'List of guides', '/guides' ], [ 2, 'Write new guide', '/guide=new' ] ]; + var entries = [ [ 1, 'List of guides', '?guides' ], [ 2, 'Write new guide', '?guide=new' ] ]; if(g_user.id) - entries.push([ 3, 'My guides', '/my-guides' ]); + entries.push([ 3, 'My guides', '?my-guides' ]); Menu.addButtons($buttons, entries); break; @@ -931,6 +975,37 @@ var PageTemplate = new function() construct(); } + +/* +Global functions related to UI elements and effects +*/ + +function g_getReputationPlusAchievementText(gold, silver, copper, reputation) { + // var achievements = g_getAchievementText(gold, silver, copper, true); + var repText = $('').addClass('wsach-pts'); + + repText.mouseover(function(event) { + $WH.Tooltip.showAtCursor(event, LANG.reputationtip, 0, 0, 'q'); + }).mousemove(function(event) { + $WH.Tooltip.cursorUpdate(event); + }).mouseout(function() { + $WH.Tooltip.hide(); + }); + + repText.css('color', 'white'); + repText.text($WH.number_format(reputation)); + + var ret = $(''); + + ret.append(' ('); + ret.append(repText); + // ret.append(' – '); + // ret.append(achievements); + ret.append(')'); + + return ret; +} + function g_addTooltip(element, text, className) { if (!className && text.indexOf('') == -1) { className = 'q'; @@ -1404,278 +1479,6 @@ function g_getMoneyHtml(money, side, costItems, costCurrency, achievementPoints) return html; } -function g_insertTag(where, tagOpen, tagClose, repFunc) { - var n = $WH.ge(where); - - n.focus(); - if (n.selectionStart != null) { - var - s = n.selectionStart, - e = n.selectionEnd, - sL = n.scrollLeft, - sT = n.scrollTop; - - var selectedText = n.value.substring(s, e); - if (typeof repFunc == 'function') { - selectedText = repFunc(selectedText); - } - - n.value = n.value.substr(0, s) + tagOpen + selectedText + tagClose + n.value.substr(e); - n.selectionStart = n.selectionEnd = e + tagOpen.length; - - n.scrollLeft = sL; - n.scrollTop = sT; - } - else if (document.selection && document.selection.createRange) { - var range = document.selection.createRange(); - - if (range.parentElement() != n) { - return; - } - - var selectedText = range.text; - if (typeof repFunc == 'function') { - selectedText = repFunc(selectedText); - } - - range.text = tagOpen + selectedText + tagClose; -/* - range.moveEnd("character", -tagClose.length); - range.moveStart("character", range.text.length); - - range.select(); -*/ - } - - if (n.onkeyup) { - n.onkeyup(); - } -} - -function g_isDateValid(date) { - var match = /^(20[0-2]\d)-([01]\d)-([0-3]\d) ([0-2]\d):([0-5]\d):([0-5]\d)$/.exec(date); - return match; -} - -function g_isIpAddress(str) { - return /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/.test(str); -} - -function g_isEmailValid(email) { - return email.match(/^([a-z0-9._-]+)(\+[a-z0-9._-]+)?(@[a-z0-9.-]+\.[a-z]{2,4})$/i) != null; -} - -function g_getCurrentDomain() { - if (g_getCurrentDomain.CACHE) { - return g_getCurrentDomain.CACHE; - } - - var hostname = location.hostname; - - if (!g_isIpAddress(hostname)) { - // Only keep the last 2 parts - var parts = hostname.split('.'); - if (parts.length > 2) { - parts.splice(0, parts.length - 2); - } - hostname = parts.join('.'); - } - - g_getCurrentDomain.CACHE = hostname; - - return hostname; -} - -function g_onAfterTyping(input, func, delay) { - var timerId; - var ldsgksdgnlk623 = function() { - if (timerId) { - clearTimeout(timerId); - timerId = null; - } - timerId = setTimeout(func, delay); - }; - input.onkeyup = ldsgksdgnlk623; -} - -function g_onClick(el, func) { - var firstEvent = 0; - - function rightClk(n) { - if (firstEvent) { - if (firstEvent != n) { - return; - } - } - else { - firstEvent = n; - } - - func(true); - } - - el.onclick = function(e) { - e = $WH.$E(e); - - if (e._button == 2) { // middle click - return true; - } - - return false; - } - - el.oncontextmenu = function() { - rightClk(1); - - return false; - }; - - el.onmouseup = function(e) { - e = $WH.$E(e); - - if (e._button == 3 || e.shiftKey || e.ctrlKey) { // Right/Shift/Ctrl - rightClk(2); - } - else if (e._button == 1) { // Left - func(false); - } - - return false; - } -} - -function g_isLeftClick(e) { - e = $WH.$E(e); - return (e && e._button == 1); -} - -function g_preventEmptyFormSubmission() { // Used on the homepage and in the top bar - if (!$.trim(this.elements[0].value)) { - return false; - } -} - -function g_isExternalUrl(url) { - if (!url) { - return false; - } - - if (url.indexOf('http') != 0 && url.indexOf('//') != 0) { - return false; - } - else if (url.indexOf(g_getCurrentDomain()) != -1) { - return false; - } - - return true; -} - -function g_createOrRegex(search, negativeGroup) { - search = search.replace(/(\(|\)|\|\+|\*|\?|\$|\^)/g, '\\$1'); - var - parts = search.split(' '), - strRegex= ''; - - for (var j = 0, len = parts.length; j < len; ++j) { - if (j > 0) { - strRegex += '|'; - } - strRegex += parts[j]; - } - - // The additional group is necessary so we dont replace %s - return new RegExp((negativeGroup != null ? '(' + negativeGroup + ')?' : '') + '(' + strRegex + ')', 'gi'); -} - -function g_getHash() { - return '#' + decodeURIComponent(location.href.split('#')[1] || ''); -} - -// Lets you add/remove/edit the query parameters in the passed URL -function g_modifyUrl(url, params, opt) { - if (!opt) { - opt = $.noop; - } - - // Preserve existing hash - var hash = ''; - if (url.match(/(#.+)$/)) { - hash = RegExp.$1; - url = url.replace(hash, ''); - } - - $.each(params, function(paramName, newValue) { - var needle; - var paramPrefix; - var paramValue; - - var matches = url.match(new RegExp('(&|\\?)?' + paramName + '=?([^&]+)?')); - if (matches != null) { - needle = matches[0]; - paramPrefix = matches[1]; - paramValue = decodeURIComponent(matches[2]); - } - - // Remove - if (newValue == null) { - if (!needle) { - return; // If param wasn't there, no need to remove anything - } - paramValue = null; - } - // Append - else if (newValue.substr(0, 2) == '+=') { - if (paramValue && opt.onAppendCollision) { - paramValue = opt.onAppendCollision(paramValue, newValue.substr(2), opt.menuUrl); - } - else if (!paramValue && opt.onAppendEmpty) { - paramValue = opt.onAppendEmpty(newValue.substr(2), opt.menuUrl); - } - else { - if (!paramValue) { - paramValue = ''; - } - paramValue += $.trim(newValue.substr(2)); - } - } - // Set - else { - paramValue = newValue; - } - - // Replace existing param - if (needle) { - var replacement = ''; - if (paramPrefix) { // Preserve existing prefix - replacement += paramPrefix; - } - if (paramValue != null) { - replacement += paramName; - if (paramValue) { - replacement += '=' + $WH.urlencode2(paramValue); - } - } - - url = url.replace(needle, replacement); - } - // Add new param - else if (paramValue || newValue == null || newValue.substr(0,2) != '+=') { - url += (url.indexOf('?') == -1 ? '?' : '&') + paramName; - if (paramValue) { - url += '=' + $WH.urlencode2(paramValue); - } - } - }); - - // Polish - url = url.replace('?&', '?'); - url = url.replace(/&&/g, '&'); - url = url.replace(/\/\?/g, '/'); - url = url.replace(/(&|\?)+$/, ''); // Remove trailing & and ? characters - - return url + hash; -} - function g_GetExpansionClassName(expansion) { switch (expansion) { case 0: @@ -1689,6 +1492,45 @@ function g_GetExpansionClassName(expansion) { return null; } +function g_pickerWheel(evt) { + evt = $WH.$E(evt); + + if (evt._wheelDelta < 0) { + this.scrollTop += 27; + } + else { + this.scrollTop -= 27; + } +} + +function g_setSelectedLink(n, group) { + if (!g_setSelectedLink.groups) { + g_setSelectedLink.groups = {}; + } + + var _ = g_setSelectedLink.groups; + if (_[group]) { + _[group].className = _[group].className.replace('selected', ''); + } + + n.className += ' selected'; + _[group] = n; +} + +function g_setCheckedRow(n, group) { + if (!g_setCheckedRow.groups) { + g_setCheckedRow.groups = {}; + } + + var _ = g_setCheckedRow.groups; + if (_[group]) { + _[group].className = _[group].className.replace('checked', ''); + } + + n.className += ' checked'; + _[group] = n; +} + function g_addPages(d, opt) { function createPageSquare(n, customText) { var foo; @@ -1912,6 +1754,422 @@ DomContentLoaded.addEvent(function () { }); + +function SetupReplies(post, comment) +{ + SetupAddEditComment(post, comment, false); + SetupShowMoreComments(post, comment); + + post.find('.comment-reply-row').each(function () { SetupRepliesControls($(this), comment); }); + post.find('.comment-reply-row').hover(function () { $(this).find('span').attr('data-hover', 'true'); }, function () { $(this).find('span').attr('data-hover', 'false'); }); +} + +function SetupAddEditComment(post, comment, edit) +{ + /* Variables that will be set by Initialize() */ + var Form = null; + var Body = null; + var AddButton = null; + var TextCounter = null; + var AjaxLoader = null; + var FormContainer = null; + var DialogTableRowContainer = null; + + /* Constants */ + var MIN_LENGTH = 15; + var MAX_LENGTH = 600; + + /* State keeping booleans */ + var Initialized = false; + var Active = false; + var Flashing = false; + var Submitting = false; + + /* Shortcuts */ + var CommentsTable = post.find('.comment-replies > table'); + var AddCommentLink = post.find('.add-reply'); + var CommentsCount = comment.replies.length; + + if(edit) + Open(); + else + AddCommentLink.click(function () { Open(); }); + + function Initialize() + { + if (Initialized) + return; + + Initialized = true; + + var row = $(''); + + if(edit) + row.addClass('comment-reply-row').addClass('reply-edit-row'); + + row.html('' + + ''); + + /* Set up the various variables for the controls we just created */ + Body = row.find('.comment-form textarea'); + AddButton = row.find('.comment-form input[type=submit]'); + TextCounter = row.find('.comment-form span.text-counter'); + Form = row.find('.comment-form form'); + AjaxLoader = row.find('.comment-form .ajax-loader'); + FormContainer = row.find('.comment-form'); + + /* Intercept submits */ + Form.submit(function () { Submit(); return false; }); + + UpdateTextCounter(); + + /* This is kinda a mess.. Every browser seems to implement keyup, keydown and keypress differently. + * - keyup: We need to use keyup to update the text counter for the simple reason we want to update it only when the user stops typing. + * - keydown: We need to use keydown to detect the ESC key because it's the only one that works in all browsers for ESC + * - keypress: We need to use keypress to detect Enter because it's the only one that 1) Works 2) Allows us to prevent a new line from being entered in the textarea + * I find it very funny that in each scenario there is only one of the 3 that works, and that that one is always different from the others. + */ + + Body.keyup(function (e) { UpdateTextCounter(); }); + Body.keydown(function (e) { if (e.keyCode == 27) { Close(); return false; } }); // ESC + Body.keypress(function (e) { if (e.keyCode == 13) { Submit(); return false; } }); // ENTER + + if(edit) + { + post.after(row); + post.hide(); + Form.find('textarea').text(comment.replies[post.attr('data-idx')].body); + } + else + CommentsTable.append(row); + + DialogTableRowContainer = row; + Form.find('textarea').focus(); + } + + function Open() + { + if (!Initialized) + Initialize(); + + Active = true; + + if(!edit) + { + AddCommentLink.hide(); + post.find('.comment-replies').show(); + FormContainer.show(); + FormContainer.find('textarea').focus(); + } + } + + function Close() + { + Active = false; + + if(edit) + { + if(DialogTableRowContainer) + DialogTableRowContainer.remove(); + post.show(); + return; + } + + AddCommentLink.show(); + FormContainer.hide(); + + if (CommentsCount == 0) + post.find('.comment-replies').hide(); + } + + function Submit() + { + if (!Active || Submitting) + return; + + if (Body.val().length < MIN_LENGTH || Body.val().length > MAX_LENGTH) + { + /* Flash the char counter to attract the attention of the user. */ + if (!Flashing) + { + Flashing = true; + TextCounter.animate({ opacity: '0.0' }, 150); + TextCounter.animate({ opacity: '1.0' }, 150, null, function() { Flashing = false; }); + } + + return false; + } + + SetSubmitState(); + $.ajax({ + type: 'POST', + url: edit ? '?comment=edit-reply' : '?comment=add-reply', + data: { commentId: comment.id, replyId: (edit ? post.attr('data-replyid') : 0), body: Body.val() }, + success: function (newReplies) { OnSubmitSuccess(newReplies); }, + dataType: 'json', + error: function (jqXHR) { OnSubmitFailure(jqXHR.responseText); } + }); + return true; + } + + function SetSubmitState() + { + Submitting = true; + AjaxLoader.show(); + AddButton.attr('disabled', 'disabled'); + FormContainer.find('.message-box').remove(); + } + + function ClearSubmitState() + { + Submitting = false; + AjaxLoader.hide(); + AddButton.removeAttr('disabled'); + } + + function OnSubmitSuccess(newReplies) + { + comment.replies = newReplies; + Listview.templates.comment.updateReplies(comment); + } + + function OnSubmitFailure(error) + { + ClearSubmitState(); + MessageBox(FormContainer, error); + } + + function UpdateTextCounter() + { + var text = '(error)'; + var cssClass = 'q0'; + var chars = Body.val().replace(/(\s+)/g, ' ').replace(/^\s*/, '').replace(/\s*$/, '').length; + var charsLeft = MAX_LENGTH - chars; + + if (chars == 0) + text = $WH.sprintf(LANG.replylength1_format, MIN_LENGTH); + else if (chars < MIN_LENGTH) + text = $WH.sprintf(LANG.replylength2_format, MIN_LENGTH - chars); + else + { + text = $WH.sprintf(charsLeft == 1 ? LANG.replylength4_format : LANG.replylength3_format, charsLeft); + + if (charsLeft < 120) + cssClass = 'q10'; + else if (charsLeft < 240) + cssClass = 'q5'; + else if (charsLeft < 360) + cssClass = 'q11'; + } + + TextCounter.html(text).attr('class', cssClass); + } +} + +function SetupShowMoreComments(post, comment) +{ + var ShowMoreCommentsLink = post.find('.show-more-replies'); + var CommentCell = post.find('.comment-replies'); + + ShowMoreCommentsLink.click(function () { ShowMoreComments(); }); + + function ShowMoreComments() + { + /* Replace link with ajax loader */ + ShowMoreCommentsLink.hide(); + CommentCell.append(CreateAjaxLoader()); + + $.ajax({ + type: 'GET', + url: '?comment=show-replies', + data: { id: comment.id }, + success: function (replies) { comment.replies = replies; Listview.templates.comment.updateReplies(comment); }, + dataType: 'json', + error: function () { OnFetchFail(); } + }); + } + + function OnFetchFail() + { + ShowMoreCommentsLink.show(); + CommentCell.find('.ajax-loader').remove(); + + MessageBox(CommentCell, "There was an error fetching the comments. Try refreshing the page."); + } +} + +function SetupRepliesControls(post, comment) +{ + var CommentId = post.attr('data-replyid'); + var VoteUpControl = post.find('.reply-upvote'); + var VoteDownControl = post.find('.reply-downvote'); + var FlagControl = post.find('.reply-report'); + var CommentScoreText = post.find('.reply-rating'); + var CommentActions = post.find('.reply-controls'); + var DetachButton = post.find('.reply-detach'); + var DeleteButton = post.find('.reply-delete'); + var EditButton = post.find('.reply-edit'); + var Container = comment.repliesCell; + var Voting = false; + var Detaching = false; + var Deleting = false; + + EditButton.click(function() { + SetupAddEditComment(post, comment, true); + }); + + FlagControl.click(function () + { + if (Voting || !confirm(LANG.replyreportwarning_tip)) + return; + + Voting = true; + $.ajax({ + type: 'POST', + url: '?comment=flag-reply', + data: { id: CommentId }, + success: function () { OnFlagSuccessful(); }, + error: function (jqXHR) { OnError(jqXHR.responseText); } + }); + }); + + VoteUpControl.click(function () + { + if (VoteUpControl.attr('data-hasvoted') == 'true' || VoteUpControl.attr('data-canvote') != 'true' || Voting) + return; + + Voting = true; + $.ajax({ + type: 'POST', + url: '?comment=upvote-reply', + data: { id: CommentId }, + success: function () { OnVoteSuccessful(1); }, + error: function (jqXHR) { OnError(jqXHR.responseText); } + }); + }); + + VoteDownControl.click(function () + { + if (VoteDownControl.attr('data-hasvoted') == 'true' || VoteDownControl.attr('data-canvote') != 'true' || Voting) + return; + + Voting = true; + $.ajax({ + type: 'POST', + url: '?comment=downvote-reply', + data: { id: CommentId }, + success: function () { OnVoteSuccessful(-1); }, + error: function (jqXHR) { OnError(jqXHR.responseText); } + }); + }); + + DetachButton.click(function () + { + if (Detaching) { + MessageBox(CommentActions, LANG.message_cantdetachcomment); + return; + } + + if (!confirm(LANG.confirm_detachcomment)) { + return; + } + + Detaching = true; + $.ajax({ + type: 'POST', + url: '?comment=detach-reply', + data: { id: CommentId }, + success: function () { OnDetachSuccessful(); }, + error: function (jqXHR) { OnError(jqXHR.responseText); } + }); + }); + + DeleteButton.click(function () + { + if (Deleting) + return; + + if (!confirm(LANG.deletereplyconfirmation_tip)) + return; + + Deleting = true; + $.ajax({ + type: 'POST', + url: '?comment=delete-reply', + data: { id: CommentId }, + success: function () { OnDeleteSuccessful(); }, + error: function (jqXHR) { OnError(jqXHR.responseText); } + }); + }); + + function OnVoteSuccessful(ratingChange) + { + var rating = parseInt(CommentScoreText.text()); + + rating += ratingChange; + + CommentScoreText.text(rating); + + if(ratingChange > 0) + VoteUpControl.attr('data-hasvoted', 'true'); + else + VoteDownControl.attr('data-hasvoted', 'true'); + + VoteUpControl.attr('data-canvote', 'false'); + VoteDownControl.attr('data-canvote', 'false'); + + if(ratingChange > 0) + FlagControl.remove(); + Voting = false; + } + + function OnFlagSuccessful() + { + Voting = false; + FlagControl.remove(); + } + + function OnDetachSuccessful() + { + post.remove(); + MessageBox(Container, LANG.message_commentdetached); + Detaching = false; + } + + function OnDeleteSuccessful() + { + post.remove(); + Deleting = false; + } + + function OnError(text) + { + Voting = false; + Detaching = false; + Deleting = false; + + if (!text) + text = LANG.genericerror; + + MessageBox(CommentActions, text); + } +} + /* Global comment-related functions */ @@ -1922,11 +2180,6 @@ function co_addYourComment() { ta.focus(); } -function co_cancelReply() { - $WH.ge('replybox-generic').style.display = 'none'; - document.forms.addcomment.elements.replyto.value = ''; -} - function co_validateForm(f) { var ta = $WH.gE(f, 'textarea')[0]; @@ -2144,13 +2397,15 @@ var ScreenshotViewer = new function() { var postedOn = new Date(screenshot.date), elapsed = (g_serverTime - postedOn) / 1000; + var a = divFrom.firstChild.childNodes[1]; a.href = '?user=' + screenshot.user; a.innerHTML = screenshot.user; var s = divFrom.firstChild.childNodes[3]; + $WH.ee(s); - Listview.funcBox.coFormatDate(s, elapsed, postedOn); + g_formatDate(s, elapsed, postedOn); divFrom.firstChild.style.display = ''; } @@ -2734,8 +2989,10 @@ var VideoViewer = new function() { a.innerHTML = video.user; var s = divFrom.firstChild.childNodes[3]; + $WH.ee(s); - Listview.funcBox.coFormatDate(s, elapsed, postedOn); + g_formatDate(s, elapsed, postedOn); + divFrom.firstChild.style.display = ''; } else { @@ -8268,1045 +8525,815 @@ Listview.funcBox = { return null; }, - coReport: function(d, b, f) { - if (!g_user.id || !g_report_reasons[f]) { - return - } - var a = ""; - if (f == 4 || f == 7) { - a = prompt(LANG.prompt_details, "") - } else { - if (d == 2) { - if (!confirm((f == 5 ? LANG.confirm_report3: LANG.confirm_report4))) { - return - } - } else { - if (!confirm($WH.sprintf((d == 0 ? LANG.confirm_report: LANG.confirm_report2), g_report_reasons[f]))) { - return - } - } - } - if (a != null) { - var e = "?report&type=" + d + "&typeid=" + b + "&reason=" + f; - if (a) { - e += "&reasonmore=" + $WH.urlencode(a) - } - new Ajax(e); - var c = $WH.ce("span"); - $WH.ae(c, $WH.ct(LANG.lvcomment_reported)); - this.parentNode.replaceChild(c, this) - } - }, - coReportClick: function(b, a, c) { - this.menu = [ - [2, g_report_reasons[2], Listview.funcBox.coReport.bind(this, a, b.id, 2)], - [1, g_report_reasons[1], Listview.funcBox.coReport.bind(this, a, b.id, 1)], - [3, g_report_reasons[3], Listview.funcBox.coReport.bind(this, a, b.id, 3)], - [4, g_report_reasons[4], Listview.funcBox.coReport.bind(this, a, b.id, 4)] - ]; - if (a == 1 && b.op && typeof g_pageInfo != "undefined" && !g_pageInfo.sticky) { - this.menu.splice(3, 0, [0, g_report_reasons[0], Listview.funcBox.coReport.bind(this, a, b.id, 0)]) - } - if (a == 1 && g_users[b.user].avatar == 2) { - this.menu.push([5, g_report_reasons[5], Listview.funcBox.coReport.bind(this, 2, g_users[b.user].avatarmore, 5)]) - } (Menu.showAtCursor.bind(this, c))() - }, - coGetColor: function(c, a, d) { - switch (a) { - case -1 : - var b = null; - if (!d) { + coGetColor: function(comment, mode, blog) + { + if(comment.user && g_customColors[comment.user]) + return ' comment-' + g_customColors[comment.user]; - b = c.divPost.childNodes[1].className.match(/comment-([a-z]+)/); - } else { - b = c.divBody[0].className.match(/comment-([a-z]+)/) - } - if (b != null) { - return " comment-" + b[1] - } - break; - case 3: - case 4: - if (c.roles & (U_GROUP_ADMIN | U_GROUP_BUREAU)) { - return " comment-blue" - } - if (c.roles & U_GROUP_GREEN_TEXT) { - return " comment-green" - } else { - if (c.roles & U_GROUP_VIP) { - return " comment-gold" - } - } - break + switch(mode) + { + case -1: // Edit forum post + var foo = null; + if(!blog) + foo = comment.divPost.childNodes[1].className.match(/comment-([a-z]+)/); + else + foo = comment.divBody[0].className.match(/comment-([a-z]+)/); + if(foo != null) + return ' comment-' + foo[1]; + break; + + case 3: // Post reply (forums) + case 4: // Signature (account settings) + if(comment.roles & U_GROUP_ADMIN) + return ' comment-blue'; + if(comment.roles & U_GROUP_GREEN_TEXT) // Mod, Bureau, Dev + return ' comment-green'; + else if(comment.roles & U_GROUP_VIP) // VIP + return ' comment-gold'; + break; } - if (c.roles & (U_GROUP_ADMIN | U_GROUP_BUREAU)) { - return " comment-blue" - } else { - if (c.rating >= 10) { - return " comment-green" - } else { - if (c.rating < 0) { - return " comment-bt" - } - } - } - return "" + + if(comment.roles & U_GROUP_ADMIN) + return ' comment-blue'; + else if((comment.commentv2 && comment.sticky) || (comment.roles & U_GROUP_GREEN_TEXT) || (comment.rating >= 10)) + return ' comment-green'; + else if(comment.rating < -2) + return ' comment-bt'; + + return ''; }, - coToggleVis: function(b) { - var c = g_toggleDisplay(b.divBody); - this.firstChild.nodeValue = (c ? LANG.lvcomment_hide: LANG.lvcomment_show); - b.__div.className = $WH.trim(b.__div.className.replace("comment-collapsed", "")) + (c ? "": " comment-collapsed"); - var a = b.divHeader.firstChild.lastChild; - if (b.ratable) { - a.style.display = "" - } else { - if (b.deleted || b.purged) { - a.style.fontWeight = "normal"; - a.className = "q10"; - a.innerHTML = (b.deleted ? LANG.lvcomment_deleted: LANG.lvcomment_purged); - a.style.display = "" - } + + coFlagUpOfDate: function(comment) + { + var notificationDiv = comment.commentCell.find('.comment-notification'); + var god = comment.user == g_user.name || ((g_user.roles & (U_GROUP_ADMIN|U_GROUP_MOD)) != 0); + + if (!god) { + return; } - g_toggleDisplay(b.divLinks); - if (b.lastEdit != null) { - g_toggleDisplay(b.divLastEdit) - } - }, - coDisplayRating: function(d, c) { - if (typeof(d._ratingMode) == "undefined") { - d._ratingMode = 0 - } - if (typeof(Listview._ratings) == "undefined") { - Listview._ratings = {} - } - var a = c; - var e = d._ratingMode; - if (e == 0) { - if (d.rating < 0) { - a.innerHTML = d.rating - } else { - a.innerHTML = "+" + d.rating - } - } - if (e == 1) { - if (Listview._ratings[d.id] !== undefined) { - var b = Listview._ratings[d.id]; - a.innerHTML = "+" + b.up + " / -" + b.down - } else { - new Ajax("?comment=rating&id=" + d.id, { - method: "get", - onSuccess: function(i, g) { - var f = JSON.parse(g.responseText); - if (f.success) { - Listview._ratings[i] = f; - this.innerHTML = "+" + f.up + " / -" + f.down - } else { - this.innerHTML = "Error!" - } - }.bind(a, d.id) - }); - a.innerHTML = ''; - } - } - }, - coToggleRating: function(b, a) { - if (typeof(b._ratingMode) == "undefined") { - b._ratingMode = 0 - } - if (++b._ratingMode > 1) { - b._ratingMode = 0 - } - Listview.funcBox.coDisplayRating(b, a) - }, - coRate: function(e, a) { - if (a == 0) { - var c = 5; - if (g_user.roles & U_GROUP_ADMIN) { - c = 25 - } else { - if (g_user.roles & U_GROUP_BUREAU) { - c = 15 - } - } - var d = prompt($WH.sprintf(LANG.prompt_customrating, c, c), 0); - if (d == null) { - return - } else { - d |= 0; - if (d != 0 && Math.abs(d) <= c) { - a = d - } - } - if (a == 0) { - return - } - } else { - if (g_user.roles & U_GROUP_COMMENTS_MODERATOR) { - a *= 5 - } - } - e.rating += a; - e.raters.push([g_user.id, a]); - var b = e.divHeader.firstChild; - $WH.Tooltip.hide(); - b = b.childNodes[b.childNodes.length - 3]; - var f = $WH.ge("commentrating" + e.id); - Listview.funcBox.coDisplayRating(e, f); - $WH.de(b.nextSibling); - $WH.de(b.nextSibling); - new Ajax("?comment=rate&id=" + e.id + "&rating=" + a, { - method: "get", - onSuccess: function(e) { - if (e.responseText == "0") {} else { - if (e.responseText == "1") { - b.innerHTML = LANG.tooltip_banned_rating; + + if (confirm('Mark comment ' + comment.id + ' as up to date?')) { + comment.container.removeClass('comment-outofdate'); + $.post('?comment=out-of-date', { id: comment.id, remove: 1 }, function(data) { + if (data == 'ok') { + comment.outofdate = false; + Listview.templates.comment.updateCommentCell(comment); + MessageBox(notificationDiv, LANG.lvcomment_uptodateresponse); } else { - if (e.responseText == "3") { - b.innerHTML = LANG.tooltip_too_many_votes; - } else { - b.innerHTML = LANG.genericerror; - } + MessageBox(notificationDiv, 'Error: ' + data); } } - } - }); + ); + } + return; }, - coDelete: function(a) { - if (a.purged) { - alert(LANG.message_cantdeletecomment) - } else { - if (confirm(LANG.confirm_deletecomment)) { - new Ajax("?comment=delete&id=" + a.id); - this.deleteRows([a]) + + coFlagOutOfDate: function(comment) + { + var notificationDiv = comment.commentCell.find('.comment-notification'); + var god = comment.user == g_user.name || ((g_user.roles & (U_GROUP_ADMIN|U_GROUP_BUREAU)) != 0); + + // SpiffyJr, God users don't require a reason + if (god) { + if (confirm('Mark comment ' + comment.id + ' as out of date?')) { + comment.container.addClass('comment-outofdate'); + $.post('?comment=out-of-date', { id: comment.id }, function(data) { + if (data == 'ok') { + comment.outofdate = true; + Listview.templates.comment.updateCommentCell(comment); + MessageBox(notificationDiv, LANG.lvcomment_outofdateresponse); + } else { + MessageBox(notificationDiv, 'Error: ' + data); + } + } + ); } + return; } - }, - coDetach: function(a) { - if (a.replyTo == 0) { - alert(LANG.message_cantdetachcomment) - } else { - if (confirm(LANG.confirm_detachcomment)) { - new Ajax("?comment=detach&id=" + a.id); - a.replyTo = 0; - alert(LANG.message_commentdetached) + + var reason = null; + + while(true) { + reason = prompt(LANG.lvcomment_outofdate_tip); + + // null value indicates that the confirm box was cancelled + if (reason == null || reason == false) { + return; + } else if (reason.toString().length > 0) { + break; } + + alert(LANG.youmustprovideareason_stc); } - }, - coEdit: function(g, e, c) { - if (!c) { - g.divBody.style.display = "none"; - g.divResponse.style.display = "none"; - g.divLinks.firstChild.style.display = "none" - } else { - g.divBody.hide(); - g.divResponse.hide() - } - var f = $WH.ce("div"); - f.className = "comment-edit"; - g.divEdit = f; - if (e == -1) { - if (g_users[g.user] != null) { - g.roles = g_users[g.user].roles - } - } - var a = Listview.funcBox.coEditAppend(f, g, e, c); - var b = $WH.ce("div"); - b.className = "comment-edit-buttons"; - var d = $WH.ce("input"); - d.type = "button"; - d.value = LANG.compose_save; - d.onclick = Listview.funcBox.coEditButton.bind(d, g, true, e, c); - $WH.ae(b, d); - $WH.ae(b, $WH.ct(" ")); - d = $WH.ce("input"); - d.type = "button"; - d.value = LANG.compose_cancel; - d.onclick = Listview.funcBox.coEditButton.bind(d, g, false, e, c); - $WH.ae(b, d); - $WH.ae(f, b); - var c = f; - if ($WH.Browser.ie6) { - c = $WH.ce("div"); - c.style.width = "99%"; - $WH.ae(c, f) - } - $WH.ae(g.divBody.parentNode, f) - a.focus() - }, - coEditAppend: function(m, b, l, X, x) { - var f = Listview.funcBox.coGetCharLimit(l); - if (l == 1 || l == 3 || l == 4) { - b.user = g_user.name; - b.roles = g_user.roles; - b.rating = 1 - } else { - if (l == 2) { - b.roles = g_user.roles; - b.rating = 1 - } - } - if (x) { - b.roles &= ~U_GROUP_PENDING - } - if (l == -1 || l == 0) { - var j = $WH.ce("div"); - j.className = "comment-edit-modes"; - $WH.ae(j, $WH.ct(LANG.compose_mode)); - var p = $WH.ce("a"); - p.className = "selected"; - p.onclick = Listview.funcBox.coModeLink.bind(p, 1, l, b); - p.href = "javascript:;"; - $WH.ae(p, $WH.ct(LANG.compose_edit)); - $WH.ae(j, p); - $WH.ae(j, $WH.ct("|")); - var w = $WH.ce("a"); - w.onclick = Listview.funcBox.coModeLink.bind(w, 2, l, b); - w.href = "javascript:;"; - $WH.ae(w, $WH.ct(LANG.compose_preview)); - $WH.ae(j, w); - $WH.ae(m, j) - } - var a = $WH.ce("div"); - a.style.display = "none"; - a.className = "comment-body" + Listview.funcBox.coGetColor(b, l); - $WH.ae(m, a); - var h = $WH.ce("div"); - h.className = "comment-edit-body"; - var e = $WH.ce("div"); - e.className = "toolbar"; - e.style.cssFloat = "left"; - var i = $WH.ce("div"); - i.className = "menu-buttons"; - i.style.cssFloat = "left"; - var g = $WH.ce("textarea"); - g.className = "comment-editbox"; - g.rows = 10; - g.style.clear = "left"; - g.value = b.body; - switch (l) { - case 1: - g.name = "commentbody"; - break; - case 2: - g.name = "desc"; - g.originalValue = b.body; - break; - case 3: - g.name = "body"; - break; - case 4: - g.name = "sig"; - g.originalValue = b.body; - g.rows = ($WH.Browser.firefox ? 2 : 3); - g.style.height = "auto"; - break - } - if (l != -1 && l != 0) { - var d = $WH.ce("h3"), - y = $WH.ce("a"), - v = $WH.ce("div"), - u = $WH.ce("div"); - var c = Listview.funcBox.coLivePreview.bind(g, b, l, v); - if (b.body) { - y.className = "disclosure-off"; - v.style.display = "none" - } else { - y.className = "disclosure-on" - } - $WH.ae(y, $WH.ct(LANG.compose_livepreview)); - $WH.ae(d, y); - y.href = "javascript:;"; - y.onclick = function() { - c(1); - y.className = "disclosure-" + (g_toggleDisplay(v) ? "on": "off") - }; - $WH.ns(y); - d.className = "first"; - u.className = "pad"; - $WH.ae(a, d); - $WH.ae(a, v); - $WH.ae(a, u); - g_onAfterTyping(g, c, 50); - $WH.aE(g, "focus", function() { - c(); - a.style.display = ""; - if (l != 4) { - g.style.height = "22em" - } - }) - } else { - if (l != 4) { - $WH.aE(g, "focus", function() { - g.style.height = "22em" - }) - } - } - var t = [{ - id: "b", - title: LANG.markup_b, - pre: "[b]", - post: "[/b]" - }, - { - id: "i", - title: LANG.markup_i, - pre: "[i]", - post: "[/i]" - }, - { - id: "u", - title: LANG.markup_u, - pre: "[u]", - post: "[/u]" - }, - { - id: "s", - title: LANG.markup_s, - pre: "[s]", - post: "[/s]" - }, - { - id: "small", - title: LANG.markup_small, - pre: "[small]", - post: "[/small]" - }, - { - id: "url", - title: LANG.markup_url, - onclick: function() { - var i = prompt(LANG.prompt_linkurl, "http://"); - if (i) { - g_insertTag(g, "[url=" + i + "]", "[/url]") - } - } - }, - { - id: "quote", - title: LANG.markup_quote, - pre: "[quote]", - post: "[/quote]" - }, - { - id: "code", - title: LANG.markup_code, - pre: "[code]", - post: "[/code]" - }, - { - id: "ul", - title: LANG.markup_ul, - pre: "[ul]\n[li]", - post: "[/li]\n[/ul]", - rep: function(i) { - return i.replace(/\n/g, "[/li]\n[li]") - } - }, - { - id: "ol", - title: LANG.markup_ol, - pre: "[ol]\n[li]", - post: "[/li]\n[/ol]", - rep: function(i) { - return i.replace(/\n/g, "[/li]\n[li]") - } - }, - { - id: "li", - title: LANG.markup_li, - pre: "[li]", - post: "[/li]" - }]; - if (!X) { - for (var q = 0, r = t.length; q < r; ++q) { - var k = t[q]; - if (l == 4 && k.id == "quote") { - break - } - if ((g_user.roles & U_GROUP_PENDING) && k.nopending) { - continue - } - var o = $WH.ce("button"); - o.setAttribute("type", "button"); - o.title = k.title; - if (k.onclick != null) { - o.onclick = k.onclick + + $.post('?comment=out-of-date', { id: comment.id, reason: reason }, function(data) { + if (data == 'ok') { + comment.outofdate = true; + Listview.templates.comment.updateCommentCell(comment); + MessageBox(notificationDiv, LANG.lvcomment_outofdateresponsequeued); } else { - o.onclick = g_insertTag.bind(0, g, k.pre, k.post, k.rep) + MessageBox(notificationDiv, 'Error: ' + data); } + } + ); + }, - var z = $WH.ce("img"); - z.src = g_staticUrl + "/images/deprecated/pixel.gif"; - z.className = "toolbar-" + k.id; - $WH.ae(o, z); - $WH.ae(e, o) - } - } else { - for (var B = 0, C = t.length; B < C; ++B) { - var q = t[B]; - if ((g_user.rolls & U_GROUP_PENDING) && q.nopending) { - continue - } - var H = "tb-" + q.id; - var V = $WH.ce('button'); - V.onclick = function(i, L) { - L.preventDefault(); - (i.onclick != null ? i.onclick: g_insertTag.bind(0, g, i.pre, i.post, i.rep))() - }; - V.bind(null, q); - V.className = H; - V.title = q.title; - V[0].setAttribute("type", "button"); - $WH.ae(V, $WH.ce('ins')); - $WH.ae(e, V); - } - e.className += " formatting button sm"; - } - var r = function(L, i) { - var M = prompt($WH.sprintf(LANG.markup_prompt, L), ""); - if (M != null) { - g_insertTag(g, "[" + i + "=" + (parseInt(M) || 0) + "]", "") - } - }; - var A = [[0, LANG.markup_links, , [ - [9, LANG.types[10][0] + "...", r.bind(null, LANG.types[10][1], "achievement")], - [11, LANG.types[13][0] + "...", r.bind(null, LANG.types[13][1], "class")], - [7, LANG.types[8][0] + "...", r.bind(null, LANG.types[8][1], "faction")], - [0, LANG.types[3][0] + "...", r.bind(null, LANG.types[3][1], "item")], - [1, LANG.types[4][0] + "...", r.bind(null, LANG.types[4][1], "itemset")], - [2, LANG.types[1][0] + "...", r.bind(null, LANG.types[1][1], "npc")], - [3, LANG.types[2][0] + "...", r.bind(null, LANG.types[2][1], "object")], - [8, LANG.types[9][0] + "...", r.bind(null, LANG.types[9][1], "pet")], - [4, LANG.types[5][0] + "...", r.bind(null, LANG.types[5][1], "quest")], - [12, LANG.types[14][0] + "...", r.bind(null, LANG.types[14][1], "race")], - [13, LANG.types[15][0] + "...", r.bind(null, LANG.types[15][1], "skill")], - [5, LANG.types[6][0] + "...", r.bind(null, LANG.types[6][1], "spell")], - [6, LANG.types[7][0] + "...", r.bind(null, LANG.types[7][1], "zone")]] - ]]; - var di = $WH.ce('div'); - $WH.ae(di, e); - $WH.ae(di, i); - $WH.ae(h, di); - $WH.ae(h, $WH.ce("div")); - $WH.ae(h, g); - $WH.ae(h, $WH.ce("br")); - Menu.addButtons(i, A); - if (l == 4) { - $WH.ae(h, $WH.ct($WH.sprintf(LANG.compose_limit2, f, 3))) - } else { - $WH.ae(h, $WH.ct($WH.sprintf(LANG.compose_limit, f))) - } - var A = $WH.ce('span'); - A.className = "comment-remaining"; - $WH.ae(A, $WH.ct($WH.sprintf(LANG.compose_remaining, l - b.body.length))); - $WH.ae(h, A); - g.onkeyup = Listview.funcBox.coUpdateCharLimit.bind(0, g, A, f); - g.onkeydown = Listview.funcBox.coUpdateCharLimit.bind(0, g, A, f); - if ((l == -1 || l == 0) && g_user.roles & U_GROUP_MODERATOR) { - var B = $WH.ce("div"); - B.classname = "pad"; - var W = $WH.ce("div"); - $WH.ae(W, $WH.ct((g_user.roles & U_GROUP_ADMIN ? "Admin": "Moderator") + " response")); - var p = $WH.ce("textarea"); - p.value = b.response; - p.rows = 3; - p.style.height = "6em"; - $WH.ae(h, B); - $WH.ae(h, w); - $WH.ae(h, p) - } - $WH.ae(m, h); - $WH.ae(m, $WH.ce('div')); - $WH.ae(m, a); + coDelete: function(comment) + { + var god = comment.user == g_user.name || ((g_user.roles & (U_GROUP_ADMIN|U_GROUP_MOD|U_GROUP_BUREAU)) != 0); + var notificationDiv = comment.commentCell.find('.comment-notification'); - return g - }, -/* - coEditAppend: function(m, b, l) { - var f = Listview.funcBox.coGetCharLimit(l); - if (l == 1 || l == 3 || l == 4) { - b.user = g_user.name; - b.roles = g_user.roles; - b.rating = 1 - } else { - if (l == 2) { - b.roles = g_user.roles; - b.rating = 1 - } - } - if (l == -1 || l == 0) { - var j = $WH.ce("div"); - j.className = "comment-edit-modes"; - $WH.ae(j, $WH.ct(LANG.compose_mode)); - var p = $WH.ce("a"); - p.className = "selected"; - p.onclick = Listview.funcBox.coModeLink.bind(p, 1, l, b); - p.href = "javascript:;"; - $WH.ae(p, $WH.ct(LANG.compose_edit)); - $WH.ae(j, p); - $WH.ae(j, $WH.ct("|")); - var w = $WH.ce("a"); - w.onclick = Listview.funcBox.coModeLink.bind(w, 2, l, b); - w.href = "javascript:;"; - $WH.ae(w, $WH.ct(LANG.compose_preview)); - $WH.ae(j, w); - $WH.ae(m, j) - } - var a = $WH.ce("div"); - a.style.display = "none"; - a.className = "comment-body" + Listview.funcBox.coGetColor(b, l); - $WH.ae(m, a); - var h = $WH.ce("div"); - h.className = "comment-edit-body"; - var e = $WH.ce("div"); - e.className = "toolbar"; - var g = $WH.ce("textarea"); - g.className = "comment-editbox"; - g.rows = 10; - g.value = b.body; - switch (l) { - case 1: - g.name = "commentbody"; - g.onfocus = g_revealCaptcha; - break; - case 2: - g.name = "desc"; - g.originalValue = b.body; - break; - case 3: - g.name = "body"; - g.onfocus = g_revealCaptcha; - break; - case 4: - g.name = "sig"; - g.originalValue = b.body; - g.rows = ($WH.Browser(gecko ? 2 : 3); - g.style.height = "auto"; - break - } - if (l != -1 && l != 0) { - var d = $WH.ce("h3"), - y = $WH.ce("a"), - v = $WH.ce("div"), - u = $WH.ce("div"); - var c = Listview.funcBox.coLivePreview.bind(g, b, l, v); - if (b.body) { - y.className = "disclosure-off"; - v.style.display = "none" - } else { - y.className = "disclosure-on" - } - $WH.ae(y, $WH.ct(LANG.compose_livepreview)); - $WH.ae(d, y); - y.href = "javascript:;"; - y.onclick = function() { - c(1); - y.className = "disclosure-" + (g_toggleDisplay(v) ? "on": "off") - }; - $WH.ns(y); - d.className = "first"; - u.className = "pad"; - $WH.ae(a, d); - $WH.ae(a, v); - $WH.ae(a, u); - g_onAfterTyping(g, c, 50); - $WH.aE(g, "focus", function() { - c(); - a.style.display = ""; - if (l != 4) { - g.style.height = "22em" - } - }) - } else { - if (l != 4) { - $WH.aE(g, "focus", function() { - g.style.height = "22em" - }) - } - } - var t = [{ - id: "b", - title: LANG.markup_b, - pre: "[b]", - post: "[/b]" - }, + if(god) { - id: "i", - title: LANG.markup_i, - pre: "[i]", - post: "[/i]" - }, - { - id: "u", - title: LANG.markup_u, - pre: "[u]", - post: "[/u]" - }, - { - id: "s", - title: LANG.markup_s, - pre: "[s]", - post: "[/s]" - }, - { - id: "small", - title: LANG.markup_small, - pre: "[small]", - post: "[/small]" - }, - { - id: "url", - title: LANG.markup_url, - onclick: function() { - var i = prompt(LANG.prompt_linkurl, "http://"); - if (i) { - g_insertTag(g, "[url=" + i + "]", "[/url]") - } + if(!confirm(LANG.confirm_deletecomment)) + return; + $.post('?comment=delete', { id: comment.id }); + + if(!comment.commentv2) + { + this.deleteRows([comment]); + return; } - }, - { - id: "quote", - title: LANG.markup_quote, - pre: "[quote]", - post: "[/quote]" - }, - { - id: "code", - title: LANG.markup_code, - pre: "[code]", - post: "[/code]" - }, - { - id: "ul", - title: LANG.markup_ul, - pre: "[ul]\n[li]", - post: "[/li]\n[/ul]", - rep: function(i) { - return i.replace(/\n/g, "[/li]\n[li]") - } - }, - { - id: "ol", - title: LANG.markup_ol, - pre: "[ol]\n[li]", - post: "[/li]\n[/ol]", - rep: function(i) { - return i.replace(/\n/g, "[/li]\n[li]") - } - }, - { - id: "li", - title: LANG.markup_li, - pre: "[li]", - post: "[/li]" - }]; - for (var q = 0, r = t.length; q < r; ++q) { - var k = t[q]; - if (l == 4 && k.id == "quote") { - break - } - var o = $WH.ce("button"); - var z = $WH.ce("img"); - o.setAttribute("type", "button"); - o.title = k.title; - if (k.onclick != null) { - o.onclick = k.onclick - } else { - o.onclick = g_insertTag.bind(0, g, k.pre, k.post, k.rep) - } - z.src = "template/images/pixel.gif"; - z.className = "toolbar-" + k.id; - $WH.ae(o, z); - $WH.ae(e, o) - } - $WH.ae(h, e); - $WH.ae(h, g); - $WH.ae(h, $WH.ce("br")); - if (l == 4) { - $WH.ae(h, $WH.ct($WH.sprintf(LANG.compose_limit2, f, 3))) - } else { - $WH.ae(h, $WH.ct($WH.sprintf(LANG.compose_limit, f))) - } - $WH.ae(m, h); - return g - }, -*/ - coLivePreview: function(f, e, a, b) { - if (b != 1 && a.style.display == "none") { - return - } - var c = this, - i = Listview.funcBox.coGetCharLimit(e), - g = (c.value.length > i ? c.value.substring(0, i) : c.value); - if (e == 4) { - var h; - if ((h = g.indexOf("\n")) != -1 && (h = g.indexOf("\n", h + 1)) != -1 && (h = g.indexOf("\n", h + 1)) != -1) { - g = g.substring(0, h) - } - } - var d = Markup.toHtml(g, { - mode: Markup.MODE_COMMENT, - roles: f.roles - }); - if (d) { - a.innerHTML = d - } else { - a.innerHTML = '...' - } - }, - coEditButton: function(f, d, e, k) { - if (d) { - var a = $WH.gE(f.divEdit, "textarea"); - var g = a[0]; - if (!Listview.funcBox.coValidate(a, e)) { - return - } - if (g.value != f.body || (a[1] && a[1].value != f.response)) { - var c = 0; - if (f.lastEdit != null) { - c = f.lastEdit[1] - }++c; - f.lastEdit = [g_serverTime, c, g_user.name]; - Listview.funcBox.coUpdateLastEdit(f); - var b = Listview.funcBox.coGetCharLimit(e); - var i = Markup.toHtml((g.value.length > b ? g.value.substring(0, b) : g.value), { - mode: Markup.MODE_COMMENT, - roles: f.roles + + comment.container.addClass('comment-deleted'); + MessageBox(notificationDiv, LANG.commentdeleted_tip); + comment.deletedInfo = [g_serverTime, g_user.name]; + Listview.templates.comment.updateCommentCell(comment); + comment.deleted = true; + + // sarjuuk: lets see.... + comment.voteCell.hide(); + comment.repliesCell.hide(); + comment.commentBody.hide(); + comment.repliesControl.hide(); + Listview.templates.comment.updateRepliesControl(comment); + Listview.templates.comment.updateCommentControls(comment, comment.commentControls); + if (comment.rating >= -4 && !comment.headerCell.data('events')) { + comment.headerCell.css('cursor', 'pointer'); + comment.headerCell.bind('click', function(e) { + if ($WH.$E(e)._target.nodeName == 'A') { + return; + } + + comment.voteCell.toggle(); + comment.repliesCell.toggle(); + comment.commentBody.toggle(); + comment.repliesControl.toggle(); }); - var h = ((a[1] && a[1].value.length > 0) ? Markup.toHtml("[div][/div][wowheadresponse=" + g_user.name + " roles=" + g_user.roles + "]" + a[1].value + "[/wowheadresponse]", { - mode: Markup.MODE_COMMENT, - roles: g_user.roles - }) : ""); - if (!k) { - f.divBody.innerHTML = i; - f.divResponse.innerHTML = h - } else { - f.divBody.html(i); - f.divResponse.html(h) - } - f.body = g.value; - if (g_user.roles & U_GROUP_MODERATOR && e[1]) { - f.response = e[1].value - } - var j = "body=" + $WH.urlencode(f.body); - if (f.response !== undefined) { - j += "&response=" + $WH.urlencode(f.response) - } - if (e == -1) { - new Ajax("?forums=editpost&id=" + f.id, { - method: "POST", - params: j - }) - } else { - new Ajax("?comment=edit&id=" + f.id, { - method: "POST", - params: j - }) + } + // nothing more to see here + + return; + } + }, + + coUndelete: function(comment) + { + var god = comment.user == g_user.name || ((g_user.roles & (U_GROUP_ADMIN|U_GROUP_MOD)) != 0); + var notificationDiv = comment.commentCell.find('.comment-notification'); + + if(confirm(LANG.votetoundelete_tip)) + { + $.post('?comment=undelete', { id: comment.id }); + + if(god) + { + MessageBox(notificationDiv, 'This comment has been restored.'); + + if(comment.commentv2) + { + comment.container.removeClass('comment-deleted'); + comment.deletedInfo = null; + comment.deleted = false; + Listview.templates.comment.updateCommentCell(comment); + + // sarjuuk: lets see.... + comment.voteCell.show(); + comment.repliesCell.show(); + comment.commentBody.show(); + comment.repliesControl.show(); + Listview.templates.comment.updateRepliesControl(comment); + if (comment.rating >= -4) { + comment.headerCell.css('cursor', 'auto'); + comment.headerCell.unbind('click'); + } + // nothig mor to see here } } - } - if (!k) { - f.divBody.style.display = ""; - f.divResponse.style.display = ""; - f.divLinks.firstChild.style.display = ""; - } else { - f.divBody.show(); - f.divResponse.show() - } - $WH.de(f.divEdit); - f.divEdit = null - }, - coGetCharLimit: function(a) { - if (a == 2) { - return 7500 - } - if (a == 4) { - return 250 - } - if (g_user.roles & U_GROUP_STAFF) { - return 16000000 - } - var b = 1; - if (g_user.premium) { - b = 3 - } - switch (a) { - case 0: - case 1: - return 7500 * b; - case -1 : case 3: - return 15000 * b + else + MessageBox(notificationDiv, LANG.votedtodelete_tip); } }, - coUpdateCharLimit: function(a, b, c) { - var d = a.value; - if (d.length > c) { - a.value = d.substring(0, c); - } else { - b.innerHTML = (" " + $WH.sprintf(LANG.compose_remaining, c - d.length)) - b.className.replace(/(?:^|\s)q10(?!\S)/g , ''); - if (d.length == c) { - b.className += " q10"; + + coEdit: function(comment, mode, blog) + { + // sarjuuk: already editing + if (comment.commentCell.find('.comment-edit')[0]) { + return; + } + + if(blog) { + comment.divBody.hide(); + comment.divResponse.hide(); + } + + var divEdit = $('
'); + divEdit.addClass('comment-edit'); + comment.divEdit = divEdit[0]; + + if(mode == -1) // edit post (forums) + { + if(g_users[comment.user] != null) + comment.roles = g_users[comment.user].roles; + } + + var ta = Listview.funcBox.coEditAppend(divEdit, comment, mode, blog); + + var divButtons = $('
'); + divButtons.addClass('comment-edit-buttons'); + + var ip = $('
' + + '' + + '
' + + '' + + '' + + '' + + '
' + + '' + + '' + + '' + + '' + + '
' + + 'Text counter placeholder' + + '
' + + '
' + + '