-RewriteEngine On\r
-RewriteRule ^([a-zA-Z0-9_]+)$ user.php?id=$1 [L,QSA]\r
-RewriteRule ^(\d+)$ status.php?id=$1 [L,QSA]\r
-<IfModule mod_expires.c>\r
-ExpiresActive On\r
-ExpiresByType image/gif A2592000\r
-ExpiresByType image/png A2592000\r
-ExpiresByType text/css A2592000\r
-ExpiresByType application/x-javascript A2592000\r
+RewriteEngine On
+RewriteRule ^([a-zA-Z0-9_]+)$ user.php?id=$1 [L,QSA]
+RewriteRule ^(\d+)$ status.php?id=$1 [L,QSA]
+<IfModule mod_expires.c>
+ExpiresActive On
+ExpiresByType image/gif A2592000
+ExpiresByType image/png A2592000
+ExpiresByType text/css A2592000
+ExpiresByType application/x-javascript A2592000
</IfModule>
\ No newline at end of file
--- /dev/null
+How to Install
+--------
+The installation of embrj is pretty much the same with embr's, you just need to get the source, rename `config.sample.php` in `/lib` to `config.php`, edit it with your own app information and upload it to your hosting directory.
+
+And here are some tips you may want to know:
+
+ * embrj requires `php-curl` and `php-bcmath`
+ * while not necessarily required, `php-mcrypt` is recommended
+ * embrj is compatible with PHP from version 5.2 to 5.5, we didn't test it on 5.1 or older versions
+
+Installing in sub-directory
+--------
+If you need to install embrj in a sub-directory of your website, say, in `/embrj`, you'll need to adjust the `.htaccess` file with `/embrj/user.php` and `/embrj/status.php` instead of `/user.php` and `/status.php`.
+
+nginx
+--------
+For nginx users, you'll need to add these lines to your nginx config file:
+
+ location / {
+ if (!-f $request_filename) {
+ rewrite ^/(\d+)$ /status.php?id=$1 last;
+ rewrite ^/(\w+)$ /user.php?id=$1 last;
+ break;
+ }
+ }
+And of course, adjust it if you are in a sub-directory.
--- /dev/null
+<?php
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ include ('../lib/twitese.php');
+ $t = getTwitter();
+ $listId = $_POST['slug'];
+ $id = $_POST['owner'];
+ $members = $_POST['add_members'];
+ $result = $t->addListMember($listId, $id, $members);
+ if ($result) {
+ $ret = 'Followers: '.$result->subsriber_count.' ';
+ $ret .= 'Members: '.$result->member_count.' ';
+ $ret .= $result->mode == "private" ? "Private" : "Public";
+ echo $ret;
+ } else
+ echo 'error';
+?>
session_start();
}
$t = getTwitter();
- $limit = $t->ratelimit();
- $reset = intval((format_time($limit->reset_time) - time())/60);
- $remaining = $limit->remaining_hits < 0 ? 0 : $limit->remaining_hits;
- $hourly = $limit->hourly_limit;
+ $limit = get_object_vars($t->ratelimit()->resources->statuses);
+ $timeline_limit = $limit["/statuses/home_timeline"];
+ $mentions_limit = $limit['/statuses/mentions_timeline'];
+ $timeline_reset = intval($timeline_limit->reset - $_SERVER['REQUEST_TIME']);
+ $mentions_reset = intval($mentions_limit->reset - $_SERVER['REQUEST_TIME']);
+ $timeline_remaining = $timeline_limit->remaining < 0 ? 0 : $timeline_limit->remaining;
+ $mentions_remaining = $mentions_limit->remaining < 0 ? 0 : $mentions_limit->remaining;
+ $timeline_qlimit = $timeline_limit->limit;
+ $mentions_qlimit = $mentions_limit->limit;
header('Content-Type: text/html');
- echo "<li><span style=\"color: #2276BB\">API: $remaining/$hourly</span></li>
- <li><span style=\"color: #2276BB\">Reset in $reset min(s)</span></li>";
+ echo "<li><span style=\"color: #2276BB\">Timeline API remains: $timeline_remaining/$timeline_qlimit</span></li>
+ <li><span style=\"color: #2276BB\">Reset in $timeline_reset sec(s)</span></li>
+ <li><span style=\"color: #2276BB\">Mentions API remains: $mentions_remaining/$mentions_qlimit</span></li>
+ <li><span style=\"color: #2276BB\">Reset in $mentions_reset sec(s)</span></li>";
?>
if ($result) echo 'success';
else echo 'error';
}
- elseif ( isset($_POST['list_id']) ) {
- $result = $t->deleteList($_POST['list_id']);
+ elseif ( isset($_POST['list_slug']) ) {
+ $result = $t->deleteList($_POST['list_slug']);
if ($result) echo 'success';
else echo 'error';
}
elseif ( isset($_POST['list_member']) ) {
- //$user = $t->showUser($_POST['list_member']);
- $result = $t->deleteListMember($_POST['id'], $_POST['list_member']);
+ $result = $t->deleteListMember($_POST['slug'], $_POST['owner'], $_POST['list_member']);
if ($result) echo 'success';
else echo 'error';
}
--- /dev/null
+<?php
+
+include_once('../lib/config.php');
+include_once('../lib/twitese.php');
+
+if (parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) != parse_url(BASE_URL, PHP_URL_HOST)) {
+ echo '{"error":"Invalid referer."}';
+ exit();
+}
+
+$url = isset($_GET['url']) ? $_GET['url'] : false;
+if (!$url || empty($url)) {
+ echo '{"error":"No URL is provided."}';
+ exit();
+}
+if (!filter_var($url, FILTER_VALIDATE_URL)) {
+ echo '{"error":"Malformed URL."}';
+ exit();
+}
+
+$thehops = array();
+$answer = expandRedirect($url, $thehops);
+if (!$answer) {
+ echo '{"error":"No URL is provided."}';
+}
+else
+ echo "{\"expanded_url\":\"$answer\"}";
+
+?>
+++ /dev/null
-<?php\r
- if(!isset($_SESSION)){\r
- session_start();\r
- }\r
- include_once("../lib/twitese.php");\r
- if(!isset($_GET['target'])){\r
- echo "error";\r
- exit;\r
- }\r
- $target = trim($_GET['target']);\r
- $t = getTwitter();\r
- $source = isset($_GET['source']) ? trim($_GET['source']) : $t->username;\r
- if($target == '' || $source == ''){\r
- echo "error";\r
- exit;\r
- }\r
- $analysis = getRelationship($target, $source);\r
- switch($analysis){\r
- case 1:\r
- $result = '<h3 style="color:#00805F;text-shadow:1px 1px #FFFFFF;">They\'re following each other. How sweet!</h3>';\r
- break;\r
- case 2:\r
- $result = '<h3 style="margin-top: 80px; text-shadow: 1px 1px rgb(255, 255, 255); color: rgb(0, 128, 95);">\r
- <a href="user.php?id='.$source.'">@'.$source.'</a> is following <a href="user.php?id='.$target.'">@'.$target.'</a>\r
- </h3>\r
- <h3 style="margin-top: 5px; color: rgb(131, 22, 31); text-shadow: 1px 1px rgb(255, 255, 255);">\r
- <a href="user.php?id='.$target.'">@'.$target.'</a> is NOT following <a href="user.php?id='.$source.'">@'.$source.'</a>\r
- </h3>';\r
- break;\r
- case 3:\r
- $result = '<h3 style="margin-top: 80px; text-shadow: 1px 1px rgb(255, 255, 255); color: rgb(0, 128, 95);">\r
- <a href="user.php?id='.$target.'">@'.$target.'</a> is following <a href="user.php?id='.$source.'">@'.$source.'</a>\r
- </h3>\r
- <h3 style="margin-top: 5px; color: rgb(131, 22, 31); text-shadow: 1px 1px rgb(255, 255, 255);">\r
- <a href="user.php?id='.$source.'">@'.$source.'</a> is NOT following <a href="user.php?id='.$target.'">@'.$target.'</a>\r
- </h3>';\r
- break;\r
- case 4:\r
- $result = '<h3 style="color: rgb(131, 22, 31); text-shadow: 1px 1px rgb(255, 255, 255);">\r
- <a href="user.php?id='.$source.'">@'.$source.'</a> is blocking <a href="user.php?id='.$target.'">@'.$target.'</a>\r
- </h3>';\r
- break;\r
- case 9:\r
- $result = '<h3 style="color:#666666;text-shadow: 1px 1px rgb(255, 255, 255);">It seems that they don\'t know each other!</h3>';\r
- break;\r
- }\r
- $html = $result;\r
- echo $html;\r
-?>
\ No newline at end of file
--- /dev/null
+<?php
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ include ('../lib/twitese.php');
+ $t = getTwitter();
+ $name = $_POST['name'];
+ $description = $_POST['description'];
+ $mode = $_POST['mode'];
+ if (isset($_POST['slug'])) {
+ $result = $t->editList($_POST['slug'], $name, $description, $mode);
+ }
+ else {
+ $result = $t->createList($name, $description, $mode);
+ }
+ if ($result) {
+ $ret = '{"result": "success"';
+ $ret .= ',"username":"'.$t->username.'"';
+ $ret .= ',"imgurl":"'.getAvatar($result->user->profile_image_url).'"';
+ $ret .= ',"contentid":"list'.$result->id_str.'"';
+ $ret .= ',"listuri":"'.substr($result->uri,1).'"';
+ $ret .= '}';
+ echo $ret;
+ }
+ else echo '{"result": "error"}';
+?>
session_start();
}
include('../lib/twitese.php');
- include('timeline_format.php');
+ include('../lib/timeline_format.php');
$t = getTwitter();
if(isset($_POST['status_id'])){
$id = trim($_POST['status_id']);
--- /dev/null
+<?php
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ include ('../lib/twitese.php');
+ $t = getTwitter();
+ if ($_GET['method'] == "list") {
+ $ss = $t->savedSearches();
+ $answer = '[';
+ $firsts = true;
+
+ foreach($ss as $onesearch){
+ if (!$firsts){
+ $answer .= ',';
+ }
+ else{
+ $firsts = false;
+ }
+ $answer .= '["'.$onesearch->id_str.'", "'.$onesearch->query.'"]';
+ }
+
+ $answer .=']';
+ echo $answer;
+ }
+ else if ($_GET['method'] == "delete") {
+ $ssid = $_GET['ssid'];
+ $dss = $t->deleteSavedSearch($ssid);
+ if (isset($dss->query))
+ echo "success";
+ else
+ echo "error";
+ }
+ else if ($_GET['method'] == "save") {
+ $query = $_GET['query'];
+ $ss = $t->saveSearch($query);
+ if (isset($ss->query))
+ echo '["'.$ss->id_str.'", "'.$ss->query.'"]';
+ else
+ echo "error";
+ }
+?>
+
</span>
<span class="status_body">
<span class="status_id">'.$status_id.'</span>
- <span class="status_word" style="font-size: 12px;"><a class="user_name" href="user.php?id='.$user->screen_name.'">'.$user->screen_name.'</a> <span class="tweet">'.$text.'</span></span>
+ <span class="status_word" style="font-size: 12px;"><a class="user_name" href="user.php?id='.$user->screen_name.'" id="'.$user->screen_name.'">'.($_COOKIE['shownick']=='true' ? $user->name : $user->screen_name).'</a> <span class="tweet">'.$text.'</span></span>
<span class="status_info" style="font-size: 11px; margin: 0px;">';
if($end && isset($status->in_reply_to_user_id)){
$html .= '<span class="in_reply_to"> <a class="ajax_reply" href="ajax/status.php?id='.$status->in_reply_to_status_id_str.'&uid='.$user->id.'">in reply to '.$status->in_reply_to_screen_name.'</a></span>';
+++ /dev/null
-<?php\r
- function format_retweet($status, $retweetByMe = false){\r
- $retweeter = $status->user;\r
- $rt_status = $status->retweeted_status;\r
- $status_owner = $rt_status->user;\r
- $date = formatDate($status->created_at);\r
- $text = formatText($rt_status->text);\r
- $html = '<li>\r
- <span class="status_author">'.initShortcutMenu($status_owner).'\r
- <a href="user.php?id='.$status_owner->screen_name.'" target="_blank"><img src="'.getAvatar($status_owner->profile_image_url).'" title="'.$status_owner->screen_name.'" /></a>\r
- </span>\r
- <span class="status_body">\r
- <span title="Retweets from people you follow appear in your timeline." class="big-retweet-icon"></span>\r
- <span class="status_id">'.$status->id.'</span>\r
- <span class="status_word">\r
- <a class="user_name" href="user.php?id='.$status_owner->screen_name.'">'.$status_owner->screen_name.'</a><span class="tweet"> '.$text.'</span></span>';\r
- $html .= recoverShortens($text);\r
- $html .= '<span class="actions">\r
- <a class="replie_btn" title="Reply" href="a_reply.php?id='.$rt_status->id.'">Reply</a>\r
- <a class="rt_btn" title="Retweet" href="a_rt.php?id='.$rt_status->id.'">Retweet</a>';\r
- if($retweetByMe != true){\r
- $html .= '<a class="retw_btn" title="New Retweet" href="javascript:void(0);">New Retweet</a>';\r
- }\r
- $html .= '<a class="favor_btn" title="Favorite" href="a_favor.php?id='.$rt_status->id.'">Favorite</a>\r
- <a class="trans_btn" title="Translate" href="javascript:void(0);">Translate</a>';\r
- if($retweetByMe == true){\r
- $html .= '<a class="delete_btn" title="Delete" href="javascript:void(0)"><span class="rt_id" style="display: none;">'.$status->id.'</span></a>';\r
- }\r
- $html .='</span>\r
- <span class="status_info"><span class="source">Retweeted by <a href="user.php?id='.$retweeter->screen_name.'">'.$retweeter->screen_name.'</a> from '.$status->source.'</span>\r
- <span class="date"><a href="status.php?id='.$rt_status->id.'" title="'.date('Y-m-d H:i:s', strtotime($status->created_at)).'" target="_blank">'.$date.'</a></span>\r
- </span>\r
- </span>\r
- </li>';\r
- return $html;\r
- }\r
-\r
- function format_retweet_of_me($status){\r
- $status_owner = $status->user;\r
- $date = formatDate($status->created_at);\r
- $text = formatText($status->text);\r
- $html = '<li>\r
- <span class="status_author">\r
- <a href="user.php?id='.$status_owner->screen_name.'" target="_blank"><img src="'.getAvatar($status_owner->profile_image_url).'" title="'.$status_owner->screen_name.'" /></a>\r
- </span>\r
- <span class="status_body">\r
- <span title="Retweets from people you follow appear in your timeline." class="big-retweet-icon"></span>\r
- <span class="status_id">'.$status->id.'</span>\r
- <span class="status_word">\r
- <a class="user_name" href="user.php?id='.$status_owner->screen_name.'">'.$status_owner->screen_name.'</a><span class="tweet"> '.$text.'</span></span>';\r
- $html .= recoverShortens($text);\r
- $html .= '<span class="actions">\r
- <a class="replie_btn" title="Reply" href="a_reply.php?id='.$status->id.'">Reply</a>\r
- <a class="rt_btn" title="Retweet" href="a_rt.php?id='.$status->id.'">Retweet</a>\r
- <a class="favor_btn" title="Favorite" href="a_favor.php?id='.$status->id.'">Favorite</a>\r
- <a class="trans_btn" title="Translate" href="javascript:void(0);">Translate</a>\r
- <a class="delete_btn" title="Delete" href="a_del.php?id='.$status->id.'&t=s">Delete</a>\r
- </span>\r
- <span class="status_info">from '.$status->source.'\r
- <span class="date"><a href="status.php?id='.$status->id.'" title="'.date('Y-m-d H:i:s', strtotime($status->created_at)).'" target="_blank">'.$date.'</a></span>\r
- </span>\r
- </span>\r
- </li>';\r
- return $html;\r
- }\r
-\r
- function getRetweeters($id, $count = 20){\r
- $t = getTwitter();\r
- $retweeters = $t->getRetweeters($id);\r
- $html = '<span class="vcard">';\r
- foreach($retweeters as $retweeter){\r
- $user = $retweeter->user;\r
- $html .= '<a class="url" title="'.$user->name.'" rel="contact" href="../user.php?id='.$user->screen_name.'">\r
- <img class="photo fn" width="24" height="24" src="'.getAvatar($user->profile_image_url).'" alt="'.$user->name.'" />\r
- </a>';\r
- }\r
- $html .= "</span>";\r
- return $html;\r
- }\r
-\r
- // $updateStatus 标识是否为发推, 是则应用指定 css\r
- function format_timeline($status, $screen_name, $updateStatus = false){\r
- $user = $status->user;\r
- $date = formatDate($status->created_at);\r
- $text = formatText($status->text);\r
-\r
- if(preg_match('/^\@'.getTwitter()->username.'/i', $text) == 1){\r
- $output = "<li class=\"reply\">";\r
- }elseif($updateStatus == true){\r
- $output = "<li class=\"mine\">";\r
- }else{\r
- $output = "<li>";\r
- }\r
-\r
- $output .= "<span class=\"status_author\">".initShortcutMenu($user)."\r
- <a href=\"user.php?id=$user->screen_name\" target=\"_blank\"><img src=\"".getAvatar($user->profile_image_url)."\" title=\"$user->screen_name\" /></a>\r
- </span>\r
- <span class=\"status_body\">\r
- <span class=\"status_id\">$status->id </span>\r
- <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$user->screen_name\">$user->screen_name</a><span class=\"tweet\"> $text </span></span>";\r
- $output .= recoverShortens($text);\r
- $output .= "<span class=\"actions\">\r
- <a class=\"replie_btn\" title=\"Reply\" href=\"a_reply.php?id=$status->id\">回复</a>\r
- <a class=\"rt_btn\" title=\"Retweet\" href=\"a_rt.php?id=$status->id\">回推</a>";\r
- if($user->screen_name != $screen_name){\r
- $output .= "<a class=\"retw_btn\" title=\"New Retweet\" href=\"javascript:void(0);\">New Retweet</a>";\r
- }\r
- $output .= "<a class=\"favor_btn\" title=\"Favorite\" href=\"a_favor.php?id=$status->id\">Favorite</a>\r
- <a class=\"trans_btn\" title=\"Translate\" href=\"javascript:void(0);\">Translate</a>";\r
- if ($user->screen_name == $screen_name) $output .= "<a class=\"delete_btn\" title=\"Delete\" href=\"a_del.php?id=$status->id&t=s\">Delete</a>";\r
- $output .= "</span><span class=\"status_info\">";\r
- if ($status->in_reply_to_status_id) $output .= "<span class=\"in_reply_to\"> <a class=\"ajax_reply\" href=\"ajax/status.php?id=$status->in_reply_to_status_id&uid=$user->id \">in reply to $status->in_reply_to_screen_name</a> </span>";\r
- $output .= "<span class=\"source\">from $status->source</span>\r
- <span class=\"date\"><a href=\"status.php?id=$status->id\" title=\"".date('Y-m-d H:i:s', strtotime($status->created_at))."\" target=\"_blank\">$date</a></span>\r
- </span>\r
- </span>\r
- </li>";\r
- return $output;\r
- }\r
-\r
- /* ---------- Sorting timeline ---------- */\r
- function cmp($a, $b)\r
- {\r
- $a_date = strtotime($a->created_at);\r
- $b_date = strtotime($b->created_at);\r
- if ($a_date == $b_date) {\r
- return 0;\r
- }\r
- return ($a_date > $b_date) ? -1 : 1;\r
- }\r
-\r
- function sort_timeline($timeline, $retweet){\r
- $status = array_merge($timeline, $retweet);\r
- usort($status, "cmp");\r
- return $status;\r
- }\r
-\r
- /* ---------- Restore shortened urls ---------- */\r
- function initShortcutMenu($user = false){\r
- return '';\r
- if(!$user && !isset($user->screen_name)){\r
- return '';\r
- }\r
-\r
- $username = getEncryptCookie('twitese_name');\r
- if($user->screen_name == $username){\r
- return '';\r
- }\r
- $relationship = getRelationship($user->screen_name, $username);\r
-\r
- $mention = $dm = $unfollow = $follow = $block = $spam = '';\r
- $mention = '<li class="rm_mention"><a href="javascript:void(0);"><i></i>Mention <span>'.$user->screen_name.'</a></li>';\r
- if($relationship == 1){\r
- $dm = '<li class="rm_dm"><a href="javascript:void(0);"><i></i>Direct message <span>'.$user->screen_name.'</span></a></li>';\r
- }\r
- if($relationship == 1 || $relationship == 2){\r
- $unfollow = '<li class="rm_unfollow"><a href="javascript:void(0);"><i></i>Unfollow <span>'.$user->screen_name.'</span></a></li>';\r
- }\r
- if($relationship == 3 || $relationship == 4 || $relationship == 9){\r
- $follow = '<li class="rm_follow"><a href="javascript:void(0);"><i></i>Follow <span>'.$user->screen_name.'</span></a></li>';\r
- }\r
- if($relationship == 4){\r
- $block = '<li class="rm_unblock"><a href="javascript:void(0);"><i></i>Unblock <span>'.$user->screen_name.'</span></a></li>';\r
- }else{\r
- $block = '<li class="rm_block"><a href="javascript:void(0);"><i></i>Block <span>'.$user->screen_name.'</span></a></li>';\r
- }\r
- $spam = '<li class="rm_spam"><a href="javascript:void(0);"><i></i>Report <span>'.$user->screen_name.'</span> for spam</a></li>';\r
- $html = '<ul class="right_menu round">'.$mention.$dm.$unfollow.$follow.$block.$spam.'</ul>';\r
- return $html;\r
- }\r
-\r
-?>
\ No newline at end of file
include('../lib/twitese.php');
$t = getTwitter();
- $MAX_COUNT = 36;
- $friends = $t->friends(false, false, $MAX_COUNT)->users;
+ $skip_status = false;
+ $friends = $t->friends(false, false, $skip_status)->users;
$html = '';
foreach($friends as $friend){
$html .= '<span class="vcard">
$t = getTwitter();
if ( isset($_GET['since_id']) && isset($_GET['id'])) {
- $statuses = $t->listStatus($_GET['id'], false, $_GET['since_id']);
+ $statuses = $t->listStatus($_GET['id'], $_GET['since_id']);
$empty = count($statuses) == 0? true: false;
</span>
<span class=\"status_body\">
<span class=\"status_id\">$status->id_str </span>
- <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$user->screen_name\">$user->screen_name</a><span class=\"tweet\"> $text </span></span>
+ <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$user->screen_name\" id=\"$user->screen_name\">".($_COOKIE['shownick']=='true' ? $user->name : $user->screen_name)."</a><span class=\"tweet\"> $text </span></span>
<span class=\"actions\">
<a class=\"replie_btn\" title=\"Reply\" href=\"a_reply.php?id=$status->id_str\">Reply</a>
<a class=\"rt_btn\" title=\"Retweet\" href=\"a_rt.php?id=$status->id_str\">RT</a>
<a class=\"favor_btn\" title=\"Favorite\" href=\"a_favor.php?id=$status->id_str\">Favor</a>";
- if ($user->screen_name == $t->username) $output .= "<a class=\"delete_btn\" title=\"Delete\" href=\"a_del.php?id=$status->id_str&t=s\">删除</a>";
+ if ($user->screen_name == $t->username) $output .= "<a class=\"delete_btn\" title=\"Delete\" href=\"a_del.php?id=$status->id_str&t=s\">Delete</a>";
$output .= "</span><span class=\"status_info\">";
if ($status->in_reply_to_status_id_str) $output .= "<span class=\"in_reply_to\"> <a class=\"ajax_reply\" href=\"ajax/status.php?id=$status->in_reply_to_status_id_str&uid=$user->id \">in reply to $status->in_reply_to_screen_name</a></span>";
$output .= "<span class=\"source\">via $status->source</span>
$t = getTwitter();
if ( isset($_GET['since_id']) ) {
- $messages = $t->directMessages(false, $_GET['since_id']);
+ $messages = $t->directMessages($_GET['since_id']);
$count = count($messages);
if ($count == 0) {
echo "empty";
$t = getTwitter();
if ( isset($_GET['since_id']) ) {
- $statuses = $t->replies(false, $_GET['since_id']);
+ $statuses = $t->replies($_GET['since_id']);
$count = count($statuses);
if ($count == 0) {
echo "empty";
include('../lib/timeline_format.php');
$t = getTwitter();
if ( isset($_GET['since_id']) ) {
- $statuses = $t->homeTimeline(false, $_GET['since_id']);
+ $statuses = $t->homeTimeline($_GET['since_id']);
$count = count($statuses);
$html = "";
if ($count <= 0) {
-<?php\r
- if(!isset($_SESSION)){\r
- session_start();\r
- }\r
- include ('../lib/twitese.php');\r
- if (isset($_FILES['image'])) {\r
- $image = "@{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}";\r
- switch($_GET['do']) {\r
- case 'image':\r
- $result = imageUpload($image);\r
- if (isset($result->url)) {\r
- echo '{"result": "success" , "url" : "' . $result->url . '"}';\r
- } else {\r
- echo '{"result": "error"}';\r
- }\r
- break;\r
- case 'profile':\r
- $t = getTwitter();\r
- $skip_status = $_POST['skip_status'];\r
- $result = $t->updateProfileImage($image,$skip_status);\r
- if ($t->http_code == 200) {\r
- echo '{"result": "success"}';\r
- } else {\r
- echo '{"result": "error"}';\r
- }\r
- break;\r
- }\r
- }\r
-?>\r
+<?php
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ include ('../lib/twitese.php');
+ switch($_GET['do']) {
+ case 'image':
+ if (!isset($_FILES['image'])) break;
+ $image = "@{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}";
+ $result = imageUpload($image);
+ if (isset($result->url)) {
+ echo '{"result": "success" , "url" : "' . $result->url . '"}';
+ } else {
+ echo '{"result": "error"}';
+ }
+ break;
+ case 'profile':
+ if (!isset($_FILES['image'])) break;
+ $image = file_get_contents($_FILES['image']['tmp_name']);
+ $image = base64_encode($image);
+ $t = getTwitter();
+ $skip_status = $_POST['skip_status'];
+ $result = $t->updateProfileImage($image,$skip_status);
+ if ($t->http_code == 200) {
+ echo '{"result": "success"}';
+ } else {
+ echo '{"result": "error"}';
+ }
+ break;
+ case 'background':
+ $t = getTwitter();
+ if (isset($_POST['tile'])) {
+ $tile = $_POST['tile'];
+ $result = $t->updateProfileBackground(false, $tile);
+ }
+ else {
+ $image = file_get_contents($_FILES['image']['tmp_name']);
+ $image = base64_encode($image);
+ $result = $t->updateProfileBackground($image);
+ }
+ if ($t->http_code == 200) {
+ echo '{"result": "success", "url": "'. getAvatar($result->profile_background_image_url) .'", "tile": "'. ($result->profile_background_tile ? "true" : "false") .'"}';
+ } else {
+ echo '{"result": "error"}';
+ }
+ break;
+ }
+?>
+++ /dev/null
-<?php\r
- if(!isset($_SESSION)){\r
- session_start();\r
- }\r
- include ('../lib/twitese.php');\r
- $t = getTwitter();\r
- if (isset($_FILES["image"])) {\r
- $image = $_FILES["image"]['tmp_name'];\r
- $result = $t->imglyUpload($image);\r
- if (isset($result->mediaurl)) {\r
- echo '{"result": "success" , "url" : "' . $result->mediaurl . '"}';\r
- } else {\r
- echo '{"result": "error"}';\r
- }\r
- }\r
-\r
-?>\r
-<?php \r
- include_once('lib/twitese.php');\r
- $title = 'Updates';\r
- include_once('inc/header.php');\r
- include_once('lib/timeline_format.php');\r
- if (!loginStatus()) header('location: login.php');\r
-?>\r
-<div id="statuses" class="column round-left">\r
-<?php\r
- include('inc/sentForm.php');\r
-?>\r
-<script src="js/all.js"></script>\r
-<style>.timeline li {border-bottom:1px solid #EFEFEF;border-top:none !important}</style>\r
- <div id="allNav">\r
- <a class="allBtn allHighLight" id="allTimelineBtn" href="#">Updates</a>\r
- <a class="allBtn" id="allRepliesBtn" href="#">Replies</a>\r
- <a class="allBtn" id="allMessageBtn" href="#">Messages</a>\r
- </div>\r
-<?php\r
- $statuses = $t->homeTimeline();\r
- if ($statuses === false) {\r
- header('location: error.php');exit();\r
- }\r
- $empty = count($statuses) == 0? true: false;\r
- if ($empty) {\r
- echo "<div id=\"empty\">No tweet to display</div>";\r
- } else {\r
- $output = '<ol class="timeline" id="allTimeline">';\r
- foreach ($statuses as $status) {\r
- if(isset($status->retweeted_status)){\r
- $output .= format_retweet($status);\r
- }else{\r
- $output .= format_timeline($status, $t->username);\r
- }\r
- }\r
-\r
- $output .= "</ol>";\r
-\r
- echo $output;\r
- }\r
-\r
- $statuses = $t->replies();\r
- if ($statuses === false) {\r
- header('location: error.php');exit();\r
- }\r
- $empty = count($statuses) == 0? true: false;\r
- if ($empty) {\r
- echo "<div id=\"empty\">No tweet to display</div>";\r
- } else {\r
- $output = '<ol class="timeline" id="allReplies">';\r
-\r
- foreach ($statuses as $status) {\r
- $output .= format_timeline($status, $t->username);\r
- }\r
-\r
- $output .= "</ol>";\r
-\r
- echo $output;\r
- }\r
-\r
-\r
- $messages = $t->directMessages();\r
- if ($messages === false) {\r
- header('location: error.php');exit();\r
- }\r
- $empty = count($messages) == 0? true: false;\r
- if ($empty) {\r
- echo "<div id=\"empty\">No tweet to display</div>";\r
- } else {\r
- $output = '<ol class="timeline" id="allMessage">';\r
-\r
- foreach ($messages as $message) {\r
- $output .= format_message($message);\r
- }\r
-\r
- $output .= "</ol>";\r
- echo $output;\r
- }\r
-?>\r
-</div>\r
-\r
-<?php \r
- include ('inc/sidebar.php');\r
- include ('inc/footer.php');\r
-?>\r
+<?php
+ include_once('lib/twitese.php');
+ $title = 'Updates';
+ include_once('inc/header.php');
+ include_once('lib/timeline_format.php');
+ if (!loginStatus()) header('location: login.php');
+?>
+<div id="statuses" class="column round-left">
+<?php
+ include('inc/sentForm.php');
+?>
+<script src="js/all.js"></script>
+<style>.timeline li {border-bottom:1px solid #EFEFEF;border-top:none !important}</style>
+ <div id="allNav">
+ <a class="allBtn allHighLight" id="allTimelineBtn" href="#">Updates</a>
+ <a class="allBtn" id="allRepliesBtn" href="#">Replies</a>
+ <a class="allBtn" id="allMessageBtn" href="#">Messages</a>
+ </div>
+<?php
+ $statuses = $t->homeTimeline();
+ if ($statuses === false) {
+ header('location: error.php');exit();
+ }
+ $empty = count($statuses) == 0? true: false;
+ if ($empty) {
+ echo "<div id=\"empty\">No tweet to display</div>";
+ } else if ($t->http_code == 429) {
+ echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+ } else {
+ $output = '<ol class="timeline" id="allTimeline">';
+ foreach ($statuses as $status) {
+ if(isset($status->retweeted_status)){
+ $output .= format_retweet($status);
+ }else{
+ $output .= format_timeline($status, $t->username);
+ }
+ }
+
+ $output .= "</ol>";
+
+ echo $output;
+ }
+
+ $statuses = $t->replies();
+ if ($statuses === false) {
+ header('location: error.php');exit();
+ }
+ $empty = count($statuses) == 0? true: false;
+ if ($empty) {
+ echo "<div id=\"empty\">No tweet to display</div>";
+ } else if ($t->http_code == 429) {
+ echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+ } else {
+ $output = '<ol class="timeline" id="allReplies">';
+
+ foreach ($statuses as $status) {
+ $output .= format_timeline($status, $t->username);
+ }
+
+ $output .= "</ol>";
+
+ echo $output;
+ }
+
+
+ $messages = $t->directMessages();
+ if ($messages === false) {
+ header('location: error.php');exit();
+ }
+ $empty = count($messages) == 0? true: false;
+ if ($empty) {
+ echo "<div id=\"empty\">No tweet to display</div>";
+ } else if ($t->http_code == 429) {
+ echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+ } else {
+ $output = '<ol class="timeline" id="allMessage">';
+
+ foreach ($messages as $message) {
+ $output .= format_message($message);
+ }
+
+ $output .= "</ol>";
+ echo $output;
+ }
+?>
+</div>
+
+<?php
+ include ('inc/sidebar.php');
+ include ('inc/footer.php');
+?>
-<?php\r
-\r
- include ('lib/twitese.php');\r
- $url = 'https://api.twitter.com/oauth/authorize';\r
- echo processCurl($url, http_build_query($_POST));\r
+<?php
+
+ include ('lib/twitese.php');
+ $url = 'https://api.twitter.com/oauth/authorize';
+ echo processCurl($url, http_build_query($_POST));
?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-/* from http://www.rooftopsolutions.nl/blog/223 */\r
-\r
- $validUser = BASIC_AUTH_USER;\r
- $validPass = BASIC_AUTH_PW;\r
- \r
- $realm = 'input your speicial username and password here from your sitemaster';\r
- $nonce = uniqid(); \r
- $digest = getDigest();\r
- if (is_null($digest)) requireLogin($realm,$nonce); \r
- $digestParts = digestParse($digest);\r
- $A1 = md5("{$validUser}:{$realm}:{$validPass}");\r
- $A2 = md5("{$_SERVER['REQUEST_METHOD']}:{$digestParts['uri']}");\r
- $validResponse = md5("{$A1}:{$digestParts['nonce']}:{$digestParts['nc']}:{$digestParts['cnonce']}:{$digestParts['qop']}:{$A2}");\r
- \r
- if ($digestParts['response']!=$validResponse) requireLogin($realm,$nonce);\r
- function getDigest() {\r
- if (isset($_SERVER['PHP_AUTH_DIGEST'])) {\r
- $digest = $_SERVER['PHP_AUTH_DIGEST'];\r
- } elseif (isset($_SERVER['HTTP_AUTHENTICATION'])) {\r
- if (strpos(strtolower($_SERVER['HTTP_AUTHENTICATION']),'digest')===0) \r
- $digest = substr($_SERVER['HTTP_AUTHORIZATION'], 7);\r
- }\r
- return $digest;\r
- }\r
-\r
-function requireLogin($realm,$nonce) {\r
- header('WWW-Authenticate: Digest realm="' . $realm . '",qop="auth",nonce="' . $nonce . '",opaque="' . md5($realm) . '"');\r
- header('HTTP/1.0 401 Unauthorized');\r
- die();\r
-}\r
-\r
-function digestParse($digest) {\r
- $needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);\r
- $data = array();\r
- preg_match_all('@(\w+)=(?:(?:")([^"]+)"|([^\s,$]+))@', $digest, $matches, PREG_SET_ORDER);\r
- foreach ($matches as $m) {\r
- $data[$m[1]] = $m[2] ? $m[2] : $m[3];\r
- unset($needed_parts[$m[1]]);\r
- }\r
- return $needed_parts ? false : $data;\r
-}\r
-?>
\ No newline at end of file
-<?php\r
-include('lib/twitese.php');\r
-$title = "Blocking";\r
-include('inc/header.php');\r
-if(!loginStatus()){\r
- header('location: login.php');\r
-}\r
-$type = 'blocks';\r
-include('inc/userlist.php');\r
-include('inc/sidebar.php');\r
-include('inc/footer.php');\r
-?>\r
+<?php
+include('lib/twitese.php');
+$title = "Blocking";
+include('inc/header.php');
+if(!loginStatus()){
+ header('location: login.php');
+}
+$type = 'blocks';
+include('inc/userlist.php');
+include('inc/sidebar.php');
+include('inc/footer.php');
+?>
+++ /dev/null
-<?php
- include ('lib/twitese.php');
- $title = "Public";
- include ('inc/header.php');
- if (!loginStatus()) header('location: login.php');
-?>
-
-<script src="js/browse.js"></script>
-
-<div id="statuses" class="column round-left">
- <h2 id="browse_title">See what people are saying about…</h2>
- <div class="clear"></div>
-
- <?php
- // selected from top 50 freqently used Han Chracter in http://www.cslog.cn/Content/word-frequency-list-of-chinese/
- $seed = array(
- '的', '一', '是', '不', '了', '我', '人', '在', '有', '这', '他', '来', '个', '上', '说', '中', '大', '为', '到', '道', '你', '们', '出', '就', '时', '以', '之', '那', '和', '子', '地', '得', '自', '要', '下', '可', '而', '学', '过', '对', '么', '然', '她', '国', '去', '里'
- );
- if(!isset($_COOKIE['browse_seed'])) {
- $browse_seed = $seed[mt_rand(0,48)];
- setcookie('browse_seed', $browse_seed, $_SERVER['REQUEST_TIME']+300, '/');
- } else {
- $browse_seed = $_COOKIE['browse_seed'];
- }
- $t = getTwitter();
- $p = 1;
- if (isset($_GET['p'])) {
- $p = (int) $_GET['p'];
- if ($p <= 0) $p = 1;
- }
-
- $statuses = $t->search($browse_seed, $p, 50);
- $resultCount = count($statuses->results);
- if ($resultCount <= 0) {
- echo "<div id=\"empty\">No tweet to display.</div>";
- } else {
- include_once('lib/timeline_format.php');
- $output = '<ol class="timeline" id="allTimeline">';
- foreach ($statuses->results as $status) {
- if(!preg_match('/[\p{Hiragana}\p{Katakana}\p{Hangul}]+/u', $status->text) ) { // filter the Japanese and Korean tweets since some of Han Character included.
- $output .= format_search($status);
- }
- }
- $output .= "</ol><div id=\"pagination\">";
-
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"browse.php?p=" . ($p-1) . "\">Back</a>";
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"browse.php?p=" . ($p+1) . "\">Next</a>";
-
- $output .= "</div>";
- echo $output;
- }
- ?>
-</div>
-
-<?php
- include ('inc/sidebar.php');
- include ('inc/footer.php');
-?>
#side hr{float:left;width:177px;display:block;border:0;height:1px;margin:7px 0 6px 11px;opacity:.7;background:#C0DEED;color:#C0DEED}
.notify{text-align:center;line-height:1;padding:5px 0;background-repeat:no-repeat;background-position:left center;margin-bottom:8px}
.notify div{background-color:#edffe5;font-size:.9em;margin:0 12px 0 24px;padding:10px 5px;border-radius:5px}
-#trend_entries, #apiquota_list{display:none;width:198px;float:left;margin-top:5px!important}
+#trend_entries, #apiquota_list{display:none;width:177px;float:left;margin-top:5px!important}
+#trend_entries li{word-break:break-all}
#trends, #following, #apiquota, #version{margin-left:-2px}
#trends_title, #following_title, #apiquota_title,#version_title{background:transparent url(../img/toggle_down_dark.png) no-repeat scroll right center;font-weight:400;font-size:110%;padding-left:3px;margin-bottom:0;margin-top:0;width:177px;cursor:pointer}
#version_title{background:none!important}
/*actions button*/
.actions{border-width:0;bottom:8px;line-height:1.25em;position:absolute;right:0;display:none;z-index:9}
.rt_btn,.replie_btn,.favor_btn,.delete_btn,.msg_replie_btn,.msg_delete_btn,.retw_btn,.trans_btn,.unfav_btn,.unrt_btn{display:inline-block;height:16px;width:21px;margin:-7px 0;overflow:hidden;text-indent:-9999em}
+.ss_delete_btn{display:inline-block;height:16px;width:21px;overflow:hidden;text-indent:-9999em;float:right}
.replie_btn,.msg_replie_btn{background:url("../img/sprite_icons.png") no-repeat scroll 4px 1px transparent}
.replie_btn:hover,.msg_replie_btn:hover{background:url("../img/sprite_icons.png") no-repeat scroll -17px 1px transparent}
.retw_btn,.unrt_btn:hover{background:url("../img/sprite_icons.png") no-repeat scroll 0 -15px transparent}
.retw_btn:hover,.unrt_btn{background:url("../img/sprite_icons.png") no-repeat scroll -21px -15px transparent}
.favor_btn,.unfav_btn:hover{background:url("../img/sprite_icons.png") no-repeat scroll 2px -32px transparent}
.favor_btn:hover,.unfav_btn{background:url("../img/sprite_icons.png") no-repeat scroll -19px -32px transparent}
-.delete_btn,.msg_delete_btn{background:url("../img/sprite_icons.png") no-repeat scroll 0 -47px transparent}
-.delete_btn:hover,.msg_delete_btn:hover{background:transparent url(../img/sprite_icons.png) no-repeat scroll -21px -47px}
+.ss_delete_btn,.delete_btn,.msg_delete_btn{background:url("../img/sprite_icons.png") no-repeat scroll 0 -47px transparent}
+.ss_delete_btn:hover,.delete_btn:hover,.msg_delete_btn:hover{background:transparent url(../img/sprite_icons.png) no-repeat scroll -21px -47px}
.rt_btn{background:url("../img/sprite_icons.png") no-repeat scroll 0 -63px transparent}
.rt_btn:hover{background:url("../img/sprite_icons.png") no-repeat scroll -21px -63px transparent}
.trans_btn{background:url("../img/sprite_icons.png") no-repeat scroll -2px -79px transparent}
.right_menu .rm_spam:hover i, .right_menu .ul_spam:hover i{background-position:-256px -32px}
/*Twitter Buttons*/
-.btn-m,input[type=submit].btn-m,input[type=button].btn-m{background-position:0 -200px;font-size:15px;line-height:20px;padding:5px 15px 6px;border-radius:5px}.btn-l,input[type=submit].btn-l,input[type=button].btn-l{background-position:0 -400px;font-size:20px;line-height:26px;padding:7px 20px 9px;border-radius:6px}.btn-light{background-color:#add!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-light.gif")!important;border-color:#add #add #9cc!important;text-shadow:1px 1px 0 #dff!important}.btn-dark{background-color:#59a!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-dark.gif")!important;border-color:#59a #59a #489!important;color:#fff!important;text-shadow:-1px -1px 0 #59a!important}.btn-blue{background-color:#39d!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-blue.gif")!important;border-color:#39d #39d #28c!important;color:#fff!important;text-shadow:-1px -1px 0 #39d!important}.btn-chart{background-color:#9c2!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-chart.gif")!important;border-color:#9c2 #9c2 #8b1!important;text-shadow:1px 1px 0 #df6!important}.btn-mint{background-color:#a22!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-mint.gif")!important;border-color:#bdb #bdb #aca!important;text-shadow:1px 1px 0 #efe!important}.btn-green{background-color:#272!important;background-image:url("../img/bg-btn-green.gif")!important;border-color:#272 #272 #161!important;color:#fff!important;text-shadow:-1px -1px 0 #272!important}.btn-pink{background-color:#daa!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-pink.gif")!important;border-color:#daa #daa #c99!important;text-shadow:1px 1px 0 #fdd!important}.btn-red{background-color:#a22!important;background-image:url("../img/bg-btn-red.gif")!important;background-position:0 0;border-color:#a22 #a22 #911!important;text-shadow:-1px -1px 0 #a22!important;color:#fff!important}.btn:hover,.btn:focus,input[type=submit].btn:hover,input[type=submit].btn:focus,button.btn:hover,button.btn:focus{border-color:#999 #999 #888;background-position:0 -6px;color:#000}.btn-light:hover,.btn-light:focus{border-color:#7aa #7aa #699}.btn-dark:hover,.btn-dark:focus{border-color:#267 #267 #156;color:#fff}.btn-blue:hover,.btn-blue:focus{border-color:#17b #17b #06a;color:#fff}.btn-chart:hover,.btn-chart:focus{border-color:#7a1 #7a1 #690}.btn-mint:hover,.btn-mint:focus,input[type=submit].btn-mint:hover,input[type=submit].btn-mint:focus,button.btn-mint:hover,button.btn-mint:focus{border-color:#8a8 #8a8 #797!important}.btn-green:hover,.btn-green:focus,input[type=submit].btn-green:hover,input[type=submit].btn-green:focus,button.btn-green:hover,button.btn-green:focus{background-color:#272!important;border-color:#050 #050 #040!important;color:#fff}.btn-pink:hover,.btn-pink:focus,input[type=submit].btn-pink:hover,input[type=submit].btn-pink:focus,button.btn-pink:hover,button.btn-pink:focus{border-color:#a88 #a88 #977!important}.btn-red:hover,.btn-red:focus,input[type=submit].btn-red:hover,input[type=submit].btn-red:focus,button.btn-red:hover,button.btn-red:focus{background-color:#a22!important;border-color:#611 #611 #500!important;color:#fff}.btn-m:hover,.btn-m:focus,input[type=submit].btn-m:hover,input[type=submit].btn-m:focus,button.btn-m:hover,button.btn-m:focus{background-position:0 -206px}.btn-l:hover,.btn-l:focus,input[type=submit].btn-l:hover,input[type=submit].btn-l:focus,button.btn-l:hover,button.btn-l:focus{background-position:0 -406px}.dbtn,.dbtn:hover,.dbtn:focus,.dbtn:active,button.dbtn:hover,button.dbtn:focus{background:#eee;border-color:#ddd;color:#aaa;text-shadow:none}.btn-light.dbtn,.btn-light.dbtn:hover,.btn-light.dbtn:focus,.btn-light.dbtn:active{background:#dee;border-color:#cdd;color:#9aa}.btn-dark.dbtn,.btn-dark.dbtn:hover,.btn-dark.dbtn:focus,.btn-dark.dbtn:active{background:#aad5dd;border-color:#99c5cc;color:#ddf6f6}.btn-blue.dbtn,.btn-blue.dbtn:hover,.btn-blue.dbtn:focus,.btn-blue.dbtn:active{background:#bde;border-color:#acd;color:#def}.btn-chart.dbtn,.btn-chart.dbtn:hover,.btn-chart.dbtn:focus,.btn-chart.dbtn:active{background:#deb;border-color:#cda;color:#ab9}.btn-mint.dbtn,.btn-mint.dbtn:hover,.btn-mint.dbtn:focus,.btn-mint.dbtn:active{background:#ded;border-color:#cdc;color:#9a9}.btn-green.dbtn,.btn-green.dbtn:hover,.btn-green.dbtn:focus,.btn-green.dbtn:active{background:#aca;border-color:#9b9;color:#ded}.btn-pink.dbtn,.btn-pink.dbtn:hover,.btn-pink.dbtn:focus,.btn-pink.dbtn:active{background:#edd;border-color:#dcc;color:#a99}.btn-red.dbtn,.btn-red.dbtn:hover,.btn-red.dbtn:focus,.btn-red.dbtn:active{background:#caa;border-color:#b99;color:#edd}
\ No newline at end of file
+.btn-m,input[type=submit].btn-m,input[type=button].btn-m{background-position:0 -200px;font-size:15px;line-height:20px;padding:5px 15px 6px;border-radius:5px}.btn-l,input[type=submit].btn-l,input[type=button].btn-l{background-position:0 -400px;font-size:20px;line-height:26px;padding:7px 20px 9px;border-radius:6px}.btn-light{background-color:#add!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-light.gif")!important;border-color:#add #add #9cc!important;text-shadow:1px 1px 0 #dff!important}.btn-dark{background-color:#59a!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-dark.gif")!important;border-color:#59a #59a #489!important;color:#fff!important;text-shadow:-1px -1px 0 #59a!important}.btn-blue{background-color:#39d!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-blue.gif")!important;border-color:#39d #39d #28c!important;color:#fff!important;text-shadow:-1px -1px 0 #39d!important}.btn-chart{background-color:#9c2!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-chart.gif")!important;border-color:#9c2 #9c2 #8b1!important;text-shadow:1px 1px 0 #df6!important}.btn-mint{background-color:#a22!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-mint.gif")!important;border-color:#bdb #bdb #aca!important;text-shadow:1px 1px 0 #efe!important}.btn-green{background-color:#272!important;background-image:url("../img/bg-btn-green.gif")!important;border-color:#272 #272 #161!important;color:#fff!important;text-shadow:-1px -1px 0 #272!important}.btn-pink{background-color:#daa!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-pink.gif")!important;border-color:#daa #daa #c99!important;text-shadow:1px 1px 0 #fdd!important}.btn-red{background-color:#a22!important;background-image:url("../img/bg-btn-red.gif")!important;background-position:0 0;border-color:#a22 #a22 #911!important;text-shadow:-1px -1px 0 #a22!important;color:#fff!important}.btn:hover,.btn:focus,input[type=submit].btn:hover,input[type=submit].btn:focus,button.btn:hover,button.btn:focus{border-color:#999 #999 #888;background-position:0 -6px;color:#000}.btn-light:hover,.btn-light:focus{border-color:#7aa #7aa #699}.btn-dark:hover,.btn-dark:focus{border-color:#267 #267 #156;color:#fff}.btn-blue:hover,.btn-blue:focus{border-color:#17b #17b #06a;color:#fff}.btn-chart:hover,.btn-chart:focus{border-color:#7a1 #7a1 #690}.btn-mint:hover,.btn-mint:focus,input[type=submit].btn-mint:hover,input[type=submit].btn-mint:focus,button.btn-mint:hover,button.btn-mint:focus{border-color:#8a8 #8a8 #797!important}.btn-green:hover,.btn-green:focus,input[type=submit].btn-green:hover,input[type=submit].btn-green:focus,button.btn-green:hover,button.btn-green:focus{background-color:#272!important;border-color:#050 #050 #040!important;color:#fff}.btn-pink:hover,.btn-pink:focus,input[type=submit].btn-pink:hover,input[type=submit].btn-pink:focus,button.btn-pink:hover,button.btn-pink:focus{border-color:#a88 #a88 #977!important}.btn-red:hover,.btn-red:focus,input[type=submit].btn-red:hover,input[type=submit].btn-red:focus,button.btn-red:hover,button.btn-red:focus{background-color:#a22!important;border-color:#611 #611 #500!important;color:#fff}.btn-m:hover,.btn-m:focus,input[type=submit].btn-m:hover,input[type=submit].btn-m:focus,button.btn-m:hover,button.btn-m:focus{background-position:0 -206px}.btn-l:hover,.btn-l:focus,input[type=submit].btn-l:hover,input[type=submit].btn-l:focus,button.btn-l:hover,button.btn-l:focus{background-position:0 -406px}.dbtn,.dbtn:hover,.dbtn:focus,.dbtn:active,button.dbtn:hover,button.dbtn:focus{background:#eee;border-color:#ddd;color:#aaa;text-shadow:none}.btn-light.dbtn,.btn-light.dbtn:hover,.btn-light.dbtn:focus,.btn-light.dbtn:active{background:#dee;border-color:#cdd;color:#9aa}.btn-dark.dbtn,.btn-dark.dbtn:hover,.btn-dark.dbtn:focus,.btn-dark.dbtn:active{background:#aad5dd;border-color:#99c5cc;color:#ddf6f6}.btn-blue.dbtn,.btn-blue.dbtn:hover,.btn-blue.dbtn:focus,.btn-blue.dbtn:active{background:#bde;border-color:#acd;color:#def}.btn-chart.dbtn,.btn-chart.dbtn:hover,.btn-chart.dbtn:focus,.btn-chart.dbtn:active{background:#deb;border-color:#cda;color:#ab9}.btn-mint.dbtn,.btn-mint.dbtn:hover,.btn-mint.dbtn:focus,.btn-mint.dbtn:active{background:#ded;border-color:#cdc;color:#9a9}.btn-green.dbtn,.btn-green.dbtn:hover,.btn-green.dbtn:focus,.btn-green.dbtn:active{background:#aca;border-color:#9b9;color:#ded}.btn-pink.dbtn,.btn-pink.dbtn:hover,.btn-pink.dbtn:focus,.btn-pink.dbtn:active{background:#edd;border-color:#dcc;color:#a99}.btn-red.dbtn,.btn-red.dbtn:hover,.btn-red.dbtn:focus,.btn-red.dbtn:active{background:#caa;border-color:#b99;color:#edd}
-<?php \r
- include ('lib/twitese.php');\r
- $title = "Error";\r
- include ('inc/header.php');\r
-?>\r
-\r
-<div id="login_area">\r
- <div id="error">\r
- <?php\r
- if ( isset($_GET['t'])){ \r
- switch($_GET['t']){\r
- case 1:\r
- echo '<p>Fail to connect Twitter right now. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> minutes later.</p>';\r
- if(loginStatus())\r
- {\r
- echo '<p> The API will reset in '.intval((format_time(getTwitter()->ratelimit()->reset_time) - time())/60).' min(s).';\r
- break;\r
- }\r
- default:\r
- echo '<p>Ooops, an unknown error occured. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> again.</p>';\r
- }\r
- } else{\r
- echo '<p>Ooops, an unknown error occured. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> again.</p>';\r
- }\r
- ?>\r
- </div>\r
-</div> \r
-\r
-<?php include ('inc/footer.php') ?>\r
+<?php
+ include ('lib/twitese.php');
+ $title = "Error";
+ include ('inc/header.php');
+?>
+
+<div id="login_area">
+ <div id="error">
+ <?php
+ if ( isset($_GET['t'])){
+ switch($_GET['t']){
+ case 1:
+ echo '<p>Fail to connect Twitter right now. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> minutes later.</p>';
+ break;
+ default:
+ echo '<p>Ooops, an unknown error occured. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> again.</p>';
+ }
+ } else{
+ echo '<p>Ooops, an unknown error occured. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> again.</p>';
+ }
+ ?>
+ </div>
+</div>
+
+<?php include ('inc/footer.php') ?>
-<?php \r
- include ('lib/twitese.php');\r
- $title = "My Favorites";\r
- include ('inc/header.php');\r
- if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/btns.js"></script>\r
-\r
-<div id="statuses" class="column round-left">\r
-\r
- <?php include('inc/sentForm.php')?>\r
-\r
-<?php \r
- $t = getTwitter();\r
- $p = 1;\r
- if (isset($_GET['p'])) {\r
- $p = (int) $_GET['p'];\r
- if ($p <= 0) $p = 1;\r
- }\r
-\r
- $statuses = $t->getFavorites($p);\r
- if ($statuses === false) {\r
- header('location: error.php');exit();\r
- } \r
- $empty = count($statuses) == 0? true: false;\r
- if ($empty) {\r
- echo "<div id=\"empty\">No tweet to display.</div>";\r
- } else {\r
- $output = '<ol class="timeline" id="allTimeline">';\r
- include('lib/timeline_format.php');\r
- foreach ($statuses as $status) {\r
- if (isset($status->retweeted_status)) {\r
- $output .= format_retweet($status);\r
- } else { \r
- $output .= format_timeline($status,$t->username);\r
- }\r
- }\r
-\r
- $output .= "</ol><div id=\"pagination\">";\r
-\r
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"favor.php?p=" . ($p-1) . "\">Back</a>";\r
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"favor.php?p=" . ($p+1) . "\">Next</a>";\r
-\r
- $output .= "</div>";\r
-\r
- echo $output;\r
- }\r
-?>\r
-</div>\r
-\r
-<?php \r
- include ('inc/sidebar.php');\r
- include ('inc/footer.php');\r
-?>\r
+<?php
+ include ('lib/twitese.php');
+ $title = "My Favorites";
+ include ('inc/header.php');
+ if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/btns.js"></script>
+
+<div id="statuses" class="column round-left">
+
+ <?php include('inc/sentForm.php')?>
+
+<?php
+ $t = getTwitter();
+ $user_id = isset($_GET['user_id']) ? $_GET['user_id'] : false;
+ $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+ $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
+
+ $statuses = $t->getFavorites($user_id, $since_id, $max_id);
+ if ($statuses === false) {
+ header('location: error.php');exit();
+ }
+ $empty = count($statuses) == 0 ? true : false;
+ if ($empty) {
+ echo "<div id=\"empty\">No tweet to display.</div>";
+ } else if ($t->http_code == 429) {
+ echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+ } else {
+ $output = '<ol class="timeline" id="allTimeline">';
+ include('lib/timeline_format.php');
+ $firstid = false;
+ $lastid = false;
+ foreach ($statuses as $status) {
+ if (isset($status->retweeted_status)) {
+ $output .= format_retweet($status);
+ } else {
+ $output .= format_timeline($status,$t->username);
+ }
+ if(!$firstid)
+ $firstid = $status->id_str;
+ $lastid = $status->id_str;
+ }
+ $lastid = bcsub($lastid, "1");
+
+ $output .= "</ol><div id=\"pagination\">";
+
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"favor.php?since_id={$firstid}\">Back</a>";
+ $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"favor.php?max_id={$lastid}\">Next</a>";
+
+ $output .= "</div>";
+
+ echo $output;
+ }
+?>
+</div>
+
+<?php
+ include ('inc/sidebar.php');
+ include ('inc/footer.php');
+?>
-<?php \r
- include ('lib/twitese.php');\r
- $title = "Followers";\r
- include ('inc/header.php');\r
- if (!loginStatus()) header('location: login.php');\r
- \r
- $type = 'followers';\r
- include ('inc/userlist.php');\r
- include ('inc/sidebar.php');\r
- include ('inc/footer.php');\r
-?>\r
+<?php
+ include ('lib/twitese.php');
+ $title = "Followers";
+ include ('inc/header.php');
+ if (!loginStatus()) header('location: login.php');
+
+ $type = 'followers';
+ include ('inc/userlist.php');
+ include ('inc/sidebar.php');
+ include ('inc/footer.php');
+?>
-<?php \r
- include ('lib/twitese.php');\r
- $title = "Following";\r
- include ('inc/header.php');\r
- if (!loginStatus()) header('location: login.php');\r
- $type = 'friends';\r
- include ('inc/userlist.php');\r
- include ('inc/sidebar.php');\r
- include ('inc/footer.php');\r
-?>\r
+<?php
+ include ('lib/twitese.php');
+ $title = "Following";
+ include ('inc/header.php');
+ if (!loginStatus()) header('location: login.php');
+ $type = 'friends';
+ include ('inc/userlist.php');
+ include ('inc/sidebar.php');
+ include ('inc/footer.php');
+?>
+++ /dev/null
-<?php\r
- if(!isset($_SESSION)){\r
- session_start();\r
- }\r
- include('../lib/twitese.php');\r
-\r
- $t = getTwitter();\r
- $friends = $t->friends()->users;\r
- $html = '<div id="following_list">';\r
- foreach($friends as $friend){\r
- $html .= '<span class="vcard">\r
- <a class="url" title="'.$friend->name.'" rel="contact" href="../user.php?id='.$friend->screen_name.'">\r
- <img class="photo fn" width="24" height="24" src="'.getAvatar($friend->profile_image_url).'" alt="'.$friend->name.'" />\r
- </a>\r
- </span>';\r
- }\r
- echo $html.'</div>';\r
-?>\r
- </tr>\r
- </tbody>\r
- </table>\r
- <div class="clear"></div>\r
- <footer class="round">\r
- <ul>\r
- <li>© 2013 Contributors incl. <a href="profile.php" title="It is you that make it!" target="_blank"><?php echo getEncryptCookie('twitese_name')?></a></li>\r
- <?php if (BLOG_SITE) { ?><li><a href="<?php echo BLOG_SITE ?>" title="Site Owner's Blog" target="_blank">Blog</a></li><?php }?>\r
- <li><a href="http://code.google.com/p/tuite/" target="_blank" title="Embr is proundly powered by the Open Source project - Twitese & Rabr">Twitese</a></li>\r
- <li><a href="http://code.google.com/p/embr/" target="_blank">Open Source</a></li>\r
- <?php if (SITE_OWNER) { ?><li>Run by <a href="https://twitter.com/<?php echo SITE_OWNER ?>" target="_blank"><?php echo SITE_OWNER ?></a></li><?php }?>\r
- </ul>\r
- </footer>\r
- </div>\r
- </div>\r
-<script>var nav=document.getElementById("primary_nav");var links=nav.getElementsByTagName("a");var currenturl=document.location.href;for(var i=0;i<links.length;i++){var linkurl=links[i].getAttribute("href");if(currenturl==links[i]){links[i].className="active";}}</script>\r
-</body>\r
-</html>\r
+ </tr>
+ </tbody>
+ </table>
+ <div class="clear"></div>
+ <footer class="round">
+ <ul>
+ <li>© 2010-2013 Contributors incl. <a href="profile.php" title="It is you that make it!" target="_blank"><?php echo getEncryptCookie('twitese_name')?></a></li>
+ <?php if (BLOG_SITE) { ?><li><a href="<?php echo BLOG_SITE ?>" title="Site Owner's Blog" target="_blank">Blog</a></li><?php }?>
+ <li><a href="http://code.google.com/p/tuite/" target="_blank" title="Embr is proundly powered by the Open Source project - Twitese & Rabr">Twitese</a></li>
+ <li><a href="https://github.com/AstroProfundis/embrr" target="_blank">Open Source</a></li>
+ <?php if (SITE_OWNER) { ?><li>Run by <a href="https://twitter.com/<?php echo SITE_OWNER ?>" target="_blank"><?php echo SITE_OWNER ?></a></li><?php }?>
+ </ul>
+ </footer>
+ </div>
+ </div>
+<script>var nav=document.getElementById("primary_nav");var links=nav.getElementsByTagName("a");var currenturl=document.location.href;for(var i=0;i<links.length;i++){var linkurl=links[i].getAttribute("href");if(currenturl==links[i]){links[i].className="active";}}</script>
+</body>
+</html>
<?php ob_end_flush(); ?>
\ No newline at end of file
-<?php\r
- ob_start();\r
- if(!isset($_SESSION)){\r
- session_start();\r
- }\r
-?>\r
-<!DOCTYPE HTML>\r
-<html>\r
-<head>\r
-<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />\r
-<meta name="keywords" content="embr, open source, php, twitter, oauth" />\r
-<meta name="description" content="Vivid Interface for Twitter" />\r
-<meta name="author" content="Contributors" />\r
-<link rel="icon" href="img/favicon.ico" />\r
-<link id="css" href="css/main.css" rel="stylesheet" />\r
-<title>Embr / <?php echo $title ?></title>\r
-<?php \r
- $myCSS = getDefCookie("myCSS");\r
- $theme = getDefCookie("theme");\r
- $old_css = "ul.sidebar-menu li.active a";\r
- $new_css = "ul.sidebar-menu a.active";\r
- $myCSS = str_replace($old_css,$new_css,$myCSS);\r
- $fontsize = getDefCookie("fontsize","13px");\r
- $Bgcolor = getDefCookie("Bgcolor");\r
- $Bgimage = getAvatar(getDefCookie("Bgimage"));\r
- $Bgrepeat = getDefCookie("Bgrepeat","no-repeat");\r
- \r
- if ($title != 'Error' ){\r
- setcookie('loginPage',$_SERVER['PHP_SELF'],$_SERVER['REQUEST_TIME']+3600*24);\r
- }\r
-?>\r
-<style type="text/css">\r
-<?php echo $theme;echo $myCSS ?>\r
-a:active,a:focus {outline:none}\r
-body {font-size:<?php echo $fontsize ?> !important;<?php \r
- if ($Bgcolor != "") echo 'background-color:'.$Bgcolor.';';\r
- if ($Bgimage != "") echo 'background-image: url("'.$Bgimage.'");';\r
- ?>background-repeat:<?php echo $Bgrepeat ?>}\r
-</style>\r
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>\r
-<script src="js/jquery.js"></script>\r
-<script src="js/mediaPreview.js"></script>\r
-<script src="js/public.js"></script>\r
-</head>\r
-<body>\r
-<div id="shortcutTip" style="display:none"></div>\r
- <header>\r
- <div class="wrapper">\r
- <div id="sentTip" style="display:none"></div>\r
- <a href="index.php"><img id="logo" style="float:left" width="155" height="49" src="img/logo.png" /></a>\r
- <nav class="round">\r
- <ul>\r
- <?php $scheme=(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http://' : 'https://';\r
- $base_url=str_replace('http://',$scheme,BASE_URL);\r
- ?> \r
- <li><a class="share" title="Drag me to share!" href="javascript:var%20d=document,w=window,f='<?php echo $base_url."/share.php" ?>',l=d.location,e=encodeURIComponent,p='?u='+e(l.href)+'&t='+e(d.title)+'&d='+e(w.getSelection?w.getSelection().toString():d.getSelection?d.getSelection():d.selection.createRange().text)+'&s=bm';a=function(){if(!w.open(f+p,'sharer','toolbar=0,status=0,resizable=0,width=600,height=300,left=175,top=150'))l.href=f+'.new'+p};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else{a()}void(0);">Share</a></li>\r
- <li><a href="index.php">Home</a></li>\r
- <li><a href="profile.php">Profile</a></li>\r
- <li><a href="browse.php">Public</a></li>\r
- <li><a href="setting.php">Settings</a></li>\r
- <li><a href="logout.php">Logout</a></li> \r
- </ul>\r
- </nav>\r
- </div>\r
- </header>\r
- <div id="content">\r
- <div class="wrapper">\r
- <div class="content-bubble-arrow"></div>\r
- <table cellspacing="0" class="columns">\r
- <tbody>\r
- <tr>\r
+<?php
+ ob_start();
+ if(!isset($_SESSION)){
+ session_start();
+ }
+?>
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
+<meta name="keywords" content="embr, open source, php, twitter, oauth" />
+<meta name="description" content="Vivid Interface for Twitter" />
+<meta name="author" content="Contributors" />
+<link rel="icon" href="img/favicon.ico" />
+<link id="css" href="css/main.css" rel="stylesheet" />
+<title>Embr / <?php echo $title ?></title>
+<?php
+ $myCSS = getDefCookie("myCSS");
+ $theme = getDefCookie("theme");
+ $old_css = "ul.sidebar-menu li.active a";
+ $new_css = "ul.sidebar-menu a.active";
+ $myCSS = str_replace($old_css,$new_css,$myCSS);
+ $fontsize = getDefCookie("fontsize","13px");
+ $Bgcolor = getDefCookie("Bgcolor");
+ $Bgimage = getAvatar(getDefCookie("Bgimage"));
+ $Bgrepeat = getDefCookie("Bgrepeat","no-repeat");
+
+ if ($title != 'Error' ){
+ setcookie('loginPage',$_SERVER['PHP_SELF'],$_SERVER['REQUEST_TIME']+3600*24);
+ }
+?>
+<style type="text/css">
+<?php echo $theme;echo $myCSS ?>
+a:active,a:focus {outline:none}
+body {font-size:<?php echo $fontsize ?> !important;<?php
+ if ($Bgcolor != "") echo 'background-color:'.$Bgcolor.';';
+ if ($Bgimage != "") echo 'background-image: url("'.$Bgimage.'");';
+ ?>background-repeat:<?php echo $Bgrepeat ?>}
+</style>
+<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3.min.js"></script>
+<script src="js/jquery.js"></script>
+<script src="js/mediaPreview.js"></script>
+<script src="js/public.js"></script>
+</head>
+<body>
+<div id="shortcutTip" style="display:none"></div>
+ <header>
+ <div class="wrapper">
+ <div id="sentTip" style="display:none"></div>
+ <a href="index.php"><img id="logo" style="float:left" width="155" height="49" src="img/logo.png" /></a>
+ <nav class="round">
+ <ul>
+ <?php $scheme=(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http://' : 'https://';
+ $base_url=str_replace('http://',$scheme,BASE_URL);
+ ?>
+ <li><a class="share" title="Drag me to share!" href="javascript:var%20d=document,w=window,f='<?php echo $base_url."/share.php" ?>',l=d.location,e=encodeURIComponent,p='?u='+e(l.href)+'&t='+e(d.title)+'&d='+e(w.getSelection?w.getSelection().toString():d.getSelection?d.getSelection():d.selection.createRange().text)+'&s=bm';a=function(){if(!w.open(f+p,'sharer','toolbar=0,status=0,resizable=0,width=600,height=300,left=175,top=150'))l.href=f+'.new'+p};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else{a()}void(0);">Share</a></li>
+ <li><a href="index.php">Home</a></li>
+ <li><a href="profile.php">Profile</a></li>
+ <li><a href="setting.php">Settings</a></li>
+ <li><a href="logout.php">Logout</a></li>
+ </ul>
+ </nav>
+ </div>
+ </header>
+ <div id="content">
+ <div class="wrapper">
+ <div class="content-bubble-arrow"></div>
+ <table cellspacing="0" class="columns">
+ <tbody>
+ <tr>
<td id="left" class="column round-left">
\ No newline at end of file
+++ /dev/null
-<?php\r
-$online_log="rabr_online_users.txt";\r
-$timeout=300;\r
-$entries=file($online_log);\r
-$temp=array();\r
-for($i=0;$i<count($entries);$i++){\r
-$entry=explode(",",trim($entries[$i]));\r
-if(($entry[0]!=getenv('REMOTE_ADDR'))&&($entry[1]>time())){\r
-array_push($temp,$entry[0].",".$entry[1]."\n");\r
-}\r
-}\r
-array_push($temp,getenv('REMOTE_ADDR').",".(time()+($timeout))."\n");\r
-$users_online=count($temp);\r
-$entries=implode("",$temp);\r
-$fp=fopen($online_log,"w");\r
-flock($fp,LOCK_EX);\r
-fputs($fp,$entries);\r
-flock($fp,LOCK_UN);\r
-fclose($fp);\r
-if($users_online==1){\r
-echo "Just you online!";\r
-}else{\r
-echo $users_online." Users Online";\r
-}\r
-?>
\ No newline at end of file
<?php if (strrpos($_SERVER['PHP_SELF'], 'profile')) {
$t = getTwitter();
$user = $t->showUser();
+ $expanded_url = $user->entities->url->urls[0]->expanded_url ? $user->entities->url->urls[0]->expanded_url : $user->url;
?>
<ul id="user_info_profile">
<li><span>Name</span> <?php echo $user->name ?></li>
<?php if ($user->location) echo "<li><span>Location</span> $user->location</li>"; ?>
- <?php if (($user->url) and (strlen($user->url)>20)) echo '<li><span>Web</span> <a href="' .$user->url. '" target="_blank">' .substr($user->url, 0, 20). '...</a></li>'; else if (($user->url) and (strlen($user->url)<=20)) echo '<li><span>Web</span> <a href="' .$user->url. '" target="_blank">' .$user->url. '</a></li>';?>
+ <?php if (($expanded_url) and (strlen($expanded_url)>20)) echo '<li><span>Web</span> <a href="' .$expanded_url. '" target="_blank">' .substr($expanded_url, 0, 20). '...</a></li>'; else if (($expanded_url) and (strlen($expanded_url)<=20)) echo '<li><span>Web</span> <a href="' .$expanded_url. '" target="_blank">' .$expanded_url. '</a></li>';?>
<?php if ($user->description) echo "<li><span>Bio</span> ".formatText($user->description)."</li>"; ?>
</ul>
<?php }?>
</div>
</div>
<hr />
-<!--
<div id="apiquota">
<h2 id="apiquota_title">
<span>API Quota</span>
<ul id="apiquota_list" class="sidebar-menu">
</ul>
</div>
-!-->
+<hr />
+<div id="version">
+<h2 id="version_title"><span>Version: 0.6.2 (f-99)</span></h2>
+</div>
<!--Preload Start-->
<div class="preload" style="position: absolute; left: -9999em; top: -9999em;">
<img src="img/spinner.gif" width="14" height="14"/>
</td>
</tr>
</table>
-</td>
\ No newline at end of file
+</td>
-<span title="花蕾无语">╮(╯_╰)╭</span>\r
-<span title=" 嗷~~">┗|`O′|┛</span>\r
-<span title="~你给我回来!">o(°▽、°o)....+(( ̄﹏ ̄m )</span>\r
-<span title="“不明真相的围观群众”">槑槑槑槑呆槑槑槑槑槑槑槑槑……</span>\r
-<span title="『家』">~o(▽` o) =3 =3 =3</span>\r
-<span title="【TEL】"><铃铃铃~ヾ( ̄  ̄*)==3=3=3</span>\r
-<span title="【小黑屋】">ヽ( ̄︿ ̄ )—C<(/;◇;)/ </span>\r
-<span title="555~他不起来……">ヾ( ┬o┬)┌θθθθ(;;_ _).o○</span>\r
-<span title="aaa">o((>ω< ))o</span>\r
-<span title="aaa">o(≧口≦)o</span>\r
-<span title="ai">╮( ̄▽ ̄")╭ </span>\r
-<span title="bai">m(_ _)m</span>\r
-<span title="bai">ヾ( ̄▽ ̄)Bye~Bye~</span>\r
-<span title="baotou">▄︻┻┳═一…… ☆(>○<)</span>\r
-<span title="baoxiao">o(*≧▽≦)ツ</span>\r
-<span title="baoxiao">ヾ(≧▽≦*)o</span>\r
-<span title="bengkui">o(≧口≦)o</span>\r
-<span title="BINGO!">(o゜▽゜)o☆</span>\r
-<span title="biti">( ̄ ‘i  ̄;)</span>\r
-<span title="biti">( ̄ ii  ̄;) ( ̄" ̄;)</span>\r
-<span title="bizui">(⊙x⊙;)</span>\r
-<span title="bo">(*^ ^*)(^ *)</span>\r
-<span title="bqlz">(◎_x)</span>\r
-<span title="buhaoyisi">o( ̄┰ ̄*)ゞ</span>\r
-<span title="buyao">°.°·(((p(≧□≦)q)))·°.°。</span>\r
-<span title="canle">X﹏X 惨了!</span>\r
-<span title="chaoxiao">q(≧▽≦q)</span>\r
-<span title="chouyan">( ̄ c ̄)y▂ξ。。。</span>\r
-<span title="chuai"><(  ̄^ ̄)(θ(θ☆( >_< </span>\r
-<span title="dai">( ̄△ ̄;)</span>\r
-<span title="dai">( ̄旦 ̄;)</span>\r
-<span title="dai">━┳━ ━┳━</span>\r
-<span title="dao">Σ(`д′*ノ)ノ</span>\r
-<span title="dao">Σ(っ °Д °;)っ</span>\r
-<span title="dese">~( ̄▽ ̄~)(~ ̄▽ ̄)~</span>\r
-<span title="deyi"><( ̄ˇ ̄)/</span>\r
-<span title="duo">┬┴┤_·)</span>\r
-<span title="e">("▔□▔)</span>\r
-<span title="e">(⊙﹏⊙)</span>\r
-<span title="e">-________-''</span>\r
-<span title="e">o(` · ~ · ′。)o</span>\r
-<span title="EXIT">______λ......_____</span>\r
-<span title="EXIT">λ…λλ…λ…λλλ…</span>\r
-<span title="fangp">○| ̄|_ =3</span>\r
-<span title="fanzhuo">(╯′□`)╯ ┫:·'∵:.┻┻:·'.:┣∵·:. ┳┳☆</span>\r
-<span title="fanzhuo">(╯‵□′)╯""┻━┻☆))>○<)</span>\r
-<span title="fanzhuo">┻━┻︵╰(‵□′)╯︵┻━┻ </span>\r
-<span title="fei">︿( ̄︶ ̄)︿</span>\r
-<span title="fen">ヾ(≧奋≦)〃</span>\r
-<span title="fk">French (* ̄( ̄ *) Kiss!</span>\r
-<span title="fufu">( ̄ˇ ̄)v</span>\r
-<span title="fufu">fufu~ ^u^</span>\r
-<span title="gaozhuang">( σ'ω')σ </span>\r
-<span title="gaozhuang">o(>O<;; )σ</span>\r
-<span title="gfw">┳G┻┳F┳┻W┫</span>\r
-<span title="GiveMeFive!">(┘ ̄︶ ̄)┘└( ̄︶ ̄└)</span>\r
-<span title="GO!"><( ̄︶ ̄)↗</span>\r
-<span title="GO!"><( ̄OO, ̄)/</span>\r
-<span title="good">Good! o( ̄▽ ̄)d</span>\r
-<span title="gudan">______λ......_____</span>\r
-<span title="guilian">( ̄┰ ̄*)</span>\r
-<span title="ha">(#°Д°) </span>\r
-<span title="ha">O口O!</span>\r
-<span title="ha">Σ(⊙▽⊙"a...</span>\r
-<span title="haha">o(*≧▽≦)ツ</span>\r
-<span title="han">( ̄_ ̄|||)</span>\r
-<span title="han">( ̄▽ ̄")</span>\r
-<span title="han">(寒 ̄ii ̄)彡…彡…彡</span>\r
-<span title="hehe">o(* ̄▽ ̄*)o</span>\r
-<span title="heiban">【】\(·ω·`)o</span>\r
-<span title="heihei">o(* ̄▽ ̄*)ゞ</span>\r
-<span title="heng">( -з)</span>\r
-<span title="heng">(;′⌒`)</span>\r
-<span title="heng">(ε- )</span>\r
-<span title="heng">o( ̄ヘ ̄o#) </span>\r
-<span title="hh">( ̄▽ ̄")</span>\r
-<span title="hh">o(* ̄▽ ̄*)o</span>\r
-<span title="hhh">^-^</span>\r
-<span title="hhh">^O^</span>\r
-<span title="hi">Hi~ o(* ̄▽ ̄*)ブ</span>\r
-<span title="Hi~Hitler!">( ·_·)ノ_·)ノ_·)ノ_·)ノ_·)ノ</span>\r
-<span title="hiahia">○( ^皿^)っHiahiahia.... </span>\r
-<span title="hoho">( ̄y▽ ̄)╭ Ohohoho.....</span>\r
-<span title="hoho">hoho ^O^</span>\r
-<span title="huhu">(_ _)。゜zzZ</span>\r
-<span title="jing">Σ( ° △ °|||)︴</span>\r
-<span title="jing">Σ(`д′*ノ)ノ</span>\r
-<span title="jing">Σ(っ °Д °;)っ</span>\r
-<span title="jirou">┗|*`0′*|┛</span>\r
-<span title="jiujie">( -'`-; ) </span>\r
-<span title="jiujie">o(′益`)o</span>\r
-<span title="jizhang">(  ̄ー ̄)人(^▽^ )</span>\r
-<span title="keai">n(*≧▽≦*)n</span>\r
-<span title="kedou">(°°)~ (°°)~ (°°)~ (°°)~</span>\r
-<span title="Kiss!"> (* ̄( ̄ *)</span>\r
-<span title="koushui">ˋ( ° ▽、° ) 口水ing...</span>\r
-<span title="K歌"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)></span>\r
-<span title="laohu">m( =∩王∩= )m</span>\r
-<span title="lei">(┳_┳)...</span>\r
-<span title="lei">/(ㄒoㄒ)/~~</span>\r
-<span title="luanma">卐~%?…,# *'☆&℃$︿★?</span>\r
-<span title="manzu">o(* ̄︶ ̄*)o</span>\r
-<span title="manzu">o( ̄ˇ ̄)o</span>\r
-<span title="mao">o( =·ω·= )m </span>\r
-<span title="mao">o(=·ェ·=)m</span>\r
-<span title="max">MIN■■■■■□□MAX</span>\r
-<span title="miehhh">(/ ̄ˇ ̄)/</span>\r
-<span title="mimi">(。人。) </span>\r
-<span title="mmm">mmm...f('︶︿︶)o</span>\r
-<span title="mmm">mmm.....</span>\r
-<span title="mojiezuo">Capricorn</span>\r
-<span title="mua">mua! (*╯3╰)</span>\r
-<span title="niao">--\(˙<>˙)/--</span>\r
-<span title="nie">~( ̄▽ ̄)~* </span>\r
-<span title="nu">(#‵′) </span>\r
-<span title="nu">(o#゜ 曲゜)o</span>\r
-<span title="nu">MIN■■■■■□□MAX(╯‵□′)╯︵┻━┻</span>\r
-<span title="nu">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)ノ</span>\r
-<span title="o">(⊙o⊙)?</span>\r
-<span title="ohno">Oh~ no!!!!</span>\r
-<span title="ohye">Oh yeah!\(^&^)/</span>\r
-<span title="ok">OK</span>\r
-<span title="paidui">λ…λλ…λ…入λλ…</span>\r
-<span title="pao">ε = = (づ′▽`)づ</span>\r
-<span title="pao">ε=ε=ε=(~ ̄▽ ̄)~</span>\r
-<span title="pao">ヾ(*′▽`*)ノ彡☆ノヽノヽノヽ</span>\r
-<span title="pdr">ヾ(′▽`* )ノ~</span>\r
-<span title="pia">( ̄ε(# ̄)☆╰╮o( ̄▽ ̄///) </span>\r
-<span title="pia">Pia!(o ‵-′)ノ”(ノ﹏<。)</span>\r
-<span title="piao">(~ ̄▽ ̄)~</span>\r
-<span title="piao">(~o ̄3 ̄)~</span>\r
-<span title="piao">.....((/- -)/</span>\r
-<span title="qiang">▄︻┻┳═一……</span>\r
-<span title="qie">(ˉ▽ ̄~) 切~~</span>\r
-<span title="qing">( ^ ^) _U~~</span>\r
-<span title="quan">(╬ ̄皿 ̄)=○#( ̄#)3 ̄)</span>\r
-<span title="quan">(Д゜(○=(゜ 皿゜)=○)゜Д゜)</span>\r
-<span title="shengqi"><(-︿-)></span>\r
-<span title="shy">shy~ o(*////▽////*)q</span>\r
-<span title="sigh">( ′ 3`) sigh~</span>\r
-<span title="S奥特曼">三三三三三三三三三4(o|o ) </span>\r
-<span title="S小孩!"> (o ‵-′)ノ”(ノ_<。)</span>\r
-<span title="t"><(  ̄^ ̄)(θ(θ☆( >_< </span>\r
-<span title="tanshou">╮( ╯ 3 ╰ )╭</span>\r
-<span title="tanshou">╮( ̄▽ ̄")╭ </span>\r
-<span title="tanshou">╮(╯-╰)╭</span>\r
-<span title="tanshou">ㄟ( ▔, ▔ )ㄏ</span>\r
-<span title="tao">ε=ε=┏( >_<)┛</span>\r
-<span title="tao">ε=ε=ε=┏(゜ロ゜;)┛ </span>\r
-<span title="tao">ε=ε=ε=ε=ヽ(* ̄o ̄)ノ</span>\r
-<span title="tat">o(≧∩≦)o</span>\r
-<span title="tat">o(TヘTo)</span>\r
-<span title="thx">☆⌒(*^-゜)v THX!!</span>\r
-<span title="toukui">|壁|_☆)</span>\r
-<span title="toukui">┬┴┤_·)</span>\r
-<span title="touxiang">n(→_←)┛</span>\r
-<span title="touxiang">o( >﹏<。)┛</span>\r
-<span title="tun">0^)吞!</span>\r
-<span title="tushetou">( ̄┰ ̄*)</span>\r
-<span title="wa">(PД`q。)·。'゜</span>\r
-<span title="wakkk"><( ̄▽ ̄)/</span>\r
-<span title="wc">∥wc∥ o(- -o) =з =з =з</span>\r
-<span title="weiguan">(﹁"﹁)</span>\r
-<span title="weiqu">╥﹏╥...</span>\r
-<span title="wo">σ(⌒ー⌒)</span>\r
-<span title="woniu">@/"</span>\r
-<span title="wow">wow~⊙o⊙</span>\r
-<span title="xiaoxin">ㄟ( ▔, ▔ )ㄏ</span>\r
-<span title="xiey">( ﹁ ﹁ ) ~→</span>\r
-<span title="xiey">( ̄. ̄)+</span>\r
-<span title="xiey">(﹁"﹁)</span>\r
-<span title="xiezi">...ψ(。。 )</span>\r
-<span title="xingfu">o(* ̄▽ ̄*)o</span>\r
-<span title="xiong">(* ̄(エ) ̄)</span>\r
-<span title="xiong">(+(工)+╬)</span>\r
-<span title="xiu">o(*////▽////*)q</span>\r
-<span title="xiu">p(# ̄▽ ̄#)o</span>\r
-<span title="xxoo">卐~%?…,# *'☆&℃$︿★?……</span>\r
-<span title="xxoo">╳╳○○</span>\r
-<span title="y">(* ̄︶ ̄)y</span>\r
-<span title="y">(* ̄▽ ̄)y</span>\r
-<span title="y">^_^)y</span>\r
-<span title="yanshen">━┳━ ━┳━</span>\r
-<span title="yanwenzi">ag108lau</span>\r
-<span title="yessir">Yes,sir! <( ̄O ̄)/</span>\r
-<span title="yiqi">╭(′▽`)╭(′▽`)╯</span>\r
-<span title="yiqi">ヽ( ̄ω ̄( ̄ω ̄〃)ゝ</span>\r
-<span title="yo">(^U^)ノ~YO </span>\r
-<span title="yu">>°)))>彡</span>\r
-<span title="yun">(((φ(◎ロ◎;)φ)))</span>\r
-<span title="zhaoxiang">Σ[ ◎ ]}</span>\r
-<span title="zhi"><( ̄ ﹌  ̄)@m</span>\r
-<span title="zhu">^(* ̄(oo) ̄)^</span>\r
-<span title="zhua">W( ̄_ ̄)W</span>\r
-<span title="zhuangqiang">┳G┻F┳W┫☆(ノ﹏<。)</span>\r
-<span title="zhuisha">--==≡≡〈〈《( / ̄皿 ̄)=O));>o<)/</span>\r
-<span title="zuomeng">ZZzz…(。-ω-)..ooO((【·:*:~夢~:*:·】))</span>\r
-<span title="哎哟哟……">( ̄y▽, ̄)╭ </span>\r
-<span title="安安啦~~~"> o(* ̄▽ ̄*)ブ</span>\r
-<span title="凹凸曼……">(o|o)</span>\r
-<span title="嗷~">ヾ(≧O≦)〃</span>\r
-<span title="奥特曼……">(o|o) </span>\r
-<span title="拜佛">(-人-) </span>\r
-<span title="拜托啦……">(^人^)</span>\r
-<span title="包在我身上!">ヾ(′▽`*)ゝ</span>\r
-<span title="包在我身上!">ヾ(′▽`*)ゝ</span>\r
-<span title="抱抱">━((*′ ▽`)爻(′▽`*))━!!!</span>\r
-<span title="抱抱">━((*′д`)爻(′д`*))━!!!!</span>\r
-<span title="抱抱~">\( ̄︶ ̄)/</span>\r
-<span title="抱抱~">\( ̄︶ ̄*\))</span>\r
-<span title="鼻毛">(′゜c_,゜` ) </span>\r
-<span title="鄙视你!">╭∩╮(︶︿︶)╭∩╮</span>\r
-<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>\r
-<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>\r
-<span title="壁">ノ ̄ー ̄)ノ ⌒ >┼○"☆||</span>\r
-<span title="便秘">o(′益`)o </span>\r
-<span title="辫子">§(* ̄▽ ̄*)§</span>\r
-<span title="表!"><( ̄3 ̄)> </span>\r
-<span title="别走啊~~">______λ......___丬</span>\r
-<span title="瘪嘴">(* ̄︿ ̄) </span>\r
-<span title="冰天雪地掩面泪奔……">(PД`q。)·。'゜</span>\r
-<span title="啵啵">(*  ̄3)(ε ̄ *) </span>\r
-<span title="不吃!">( *^-^)ρ(*╯^╰)</span>\r
-<span title="不懂">(@_@;)? </span>\r
-<span title="不满">(* ̄︿ ̄) </span>\r
-<span title="不是我干的">ㄟ( ▔, ▔ )ㄏ </span>\r
-<span title="不屑">( ̄_, ̄ )</span>\r
-<span title="擦眼泪……">(ノへ ̄、)</span>\r
-<span title="财神爷">(o′┏▽┓`o) </span>\r
-<span title="草泥马">( ·ェ·)(·ェ· )</span>\r
-<span title="蹭">(*≧︶≦))( ̄▽ ̄* )ゞ</span>\r
-<span title="蹭">( * ̄▽ ̄)((≧︶≦*) </span>\r
-<span title="叉腰"><)。(> </span>\r
-<span title="超强风扇吹">ε~( ~( ~ ( 卍 )\( ̄▽ ̄ \)</span>\r
-<span title="超远程BB枪!">(# ̄□ ̄)o―∈‥oo━━━━━━━☆ </span>\r
-<span title="車">●┻┓⌒ Σ┌┘車└┐=3 =3 =3</span>\r
-<span title="吃饭去鸟">.....(((((ヾ( o=^·ェ·)o ┏━┓</span>\r
-<span title="吃我一鞭!">( `0‘)ノ~~~~~~~~~ν</span>\r
-<span title="吃药">(。>︿<)_θ</span>\r
-<span title="冲出!!">___*\(  ̄皿 ̄)/#____</span>\r
-<span title="抽!!">( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)</span>\r
-<span title="抽泣">(ノへ ̄、)</span>\r
-<span title="抽泣">(ノへ ̄、)</span>\r
-<span title="臭蚊子!">Pia!(o ‵-′)ノ” </span>\r
-<span title="穿墙过去!">ε=ε┣G┻F┳ε=ヽ(* ̄▽ ̄)ノ┻W┫</span>\r
-<span title="戳">→)╥﹏╥) </span>\r
-<span title="赐予你力量!">( * ̄▽ ̄)o ─═≡※:☆▆▅▄▃▂_</span>\r
-<span title="打呵欠">(_ _)( - . - )(~O~) ……( - . - ) </span>\r
-<span title="大鼻子">(′台` ) </span>\r
-<span title="呆滞"> ━┳━ ━┳━</span>\r
-<span title="淡定">━━( ̄ー ̄*|||━━</span>\r
-<span title="当然!"><(ˉ^ˉ)></span>\r
-<span title="刀疤">(-_-メ)</span>\r
-<span title="等等我…我……我…………">...(* ̄0 ̄)ノ</span>\r
-<span title="低落"> (#`-_ゝ-)</span>\r
-<span title="低头">(。﹏。) </span>\r
-<span title="低头">(。_。) </span>\r
-<span title="点头">( ̄ー ̄(_ _( ̄ー ̄(_ _ </span>\r
-<span title="跌">(┬_┬)↘ </span>\r
-<span title="顶!">d=====( ̄▽ ̄*)b </span>\r
-<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>\r
-<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>\r
-<span title="抖">o((⊙﹏⊙))o. </span>\r
-<span title="嘟嘴">o( ̄ε ̄*) </span>\r
-<span title="嘟嘴">(○` 3′○) </span>\r
-<span title="对不起~"> <(_ _)></span>\r
-<span title="呃~被发现了......">(ˉ▽ˉ;)</span>\r
-<span title="呃~我……">σ(-_-メ)</span>\r
-<span title="翻桌!">(╯‵□′)╯︵┻━┻</span>\r
-<span title="防御!">(((\( ̄一 ̄)/)))</span>\r
-<span title="放我出去~~~"> ||Φ|(|T|Д|T|)|Φ|| </span>\r
-<span title="飞吻"> (* ̄3 ̄)╭</span>\r
-<span title="分裂">>( ̄▽ ̄ =  ̄︿ ̄)<</span>\r
-<span title="风魔法!"> (/-_-)/ξ ξ ξ ξ ξ ξ (+_+ /)/~~~</span>\r
-<span title="去去去~">乀ˉεˉ乀...</span>\r
-<span title="扶眼镜">(-@y@) </span>\r
-<span title="扶眼镜">(-@y@) </span>\r
-<span title="复活!">...:.;::..;::: .:.;::….;: ̄)…:.;:□ ̄)( ̄□ ̄*)</span>\r
-<span title="嘎~嘎~嘎~">.<{=....</span>\r
-<span title="干杯">( ̄▽ ̄)~■□~( ̄▽ ̄)</span>\r
-<span title="干杯!">~( ̄▽ ̄)~* </span>\r
-<span title="感动!">o(*≧▽≦*)m</span>\r
-<span title="高~实在是高!">(* ̄▽)u┌┐ d(▽ ̄*)</span>\r
-<span title="告状">(′д`σ)σ </span>\r
-<span title="跟你说厚~">╰( ̄▽ ̄)╭</span>\r
-<span title="狗狗">U·ェ·*U </span>\r
-<span title="狗狗">U·ェ·U </span>\r
-<span title="鼓掌">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>\r
-<span title="鼓掌">└( ̄  ̄└)(┘ ̄  ̄)┘</span>\r
-<span title="乖~">o(*^@^*)o</span>\r
-<span title="滚来滚去">……~(~o ̄▽ ̄)~o 。。。……o~(_△_o~) ~。。。</span>\r
-<span title="含泪挥手帕">(ToT)/~~~</span>\r
-<span title="好~~">o(*^▽^*)o </span>\r
-<span title="好吧">╮╯-╰╭"</span>\r
-<span title="好苦~">( >﹏<)</span>\r
-<span title="好香~~">(╯▽╰ )</span>\r
-<span title="好主意!">(o゜▽゜)o☆</span>\r
-<span title="喝西北风">( ′Д`)彡</span>\r
-<span title="河马">( ̄。。 ̄)</span>\r
-<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>\r
-<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>\r
-<span title="呼~幸好幸好……">ε=( ̄。 ̄;A</span>\r
-<span title="呼唤">(/0 ̄)o </span>\r
-<span title="坏人……"> ~( TロT)σ</span>\r
-<span title="幻影术!">((( ̄( ̄( ̄( ̄ー ̄) ̄) ̄) ̄))) </span>\r
-<span title="挥手帕">(@^^)/~~~</span>\r
-<span title="火箭筒,发射!">(* ̄皿 ̄)=Σ口>=Σ口>=Σ口></span>\r
-<span title="获胜者是……">ヾ( ̄ー ̄)X(^▽^)ゞ</span>\r
-<span title="击掌">(〃 ̄︶ ̄)人( ̄︶ ̄〃)</span>\r
-<span title="加油">o^^oo^^o</span>\r
-<span title="交通志愿老大妈指挥ing..."> (o^~^)尸"</span>\r
-<span title="金盾!">||┣(—_\) </span>\r
-<span title="就你!"><( ̄ ﹌  ̄)@m</span>\r
-<span title="就你好了~"> (@゜▽゜)</span>\r
-<span title="就是他!"> (@`д′)</span>\r
-<span title="举手">o(*^▽^*)┛</span>\r
-<span title="举手投降">┗( T﹏T )┛</span>\r
-<span title="嚼!">( ̄~ ̄)</span>\r
-<span title="卡拉OK"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)′</span>\r
-<span title="看">(°ー°〃) </span>\r
-<span title="看好你哦!">(@^0^)</span>\r
-<span title="看我忍者镖!">( ‵▽′)ノ'卍卍卍卍卍卍 Σ(゜д゜;)</span>\r
-<span title="靠!什么东西?!"> ( `д′)</span>\r
-<span title="咳咳">><</span>\r
-<span title="苦恼"> ( -'`-; )</span>\r
-<span title="快使用双截棍,">┗(`o′)┓哼┏(`○′)┛哼┏(`o′)┓哈┗(`O′)┛兮!!</span>\r
-<span title="困,揉眼睛……">(o-ωq)).oO</span>\r
-<span title="啦啦啦">...φ(0 ̄*)_φ(* ̄0 ̄)></span>\r
-<span title="来啦~">(~o ̄▽ ̄)~o ~。。。</span>\r
-<span title="来人呐~">(o ;′Д`)ノ゛</span>\r
-<span title="冷笑">(  ̄ー ̄)</span>\r
-<span title="脸红掩面">(*/ω\*)</span>\r
-<span title="脸红掩面">(*/ω\*)</span>\r
-<span title="两罐纸星星">(*ˉ﹃ˉ)_☆☆</span>\r
-<span title="列队">(* ̄^ ̄(* ̄^ ̄(* ̄^ ̄)</span>\r
-<span title="铃铃铃">☆{{{Д}}} ☆!! </span>\r
-<span title="毛毛虫">(· ·)nnn </span>\r
-<span title="没办法~">╮( ̄▽ ̄")╭</span>\r
-<span title="没人在哦?">||o(*°ω°*)o|Ю </span>\r
-<span title="媚眼">ο(=·ω<=)ρ⌒☆</span>\r
-<span title="秘密">(一-一) </span>\r
-<span title="喵~">o( =∩ω∩= )m </span>\r
-<span title="喵~">>▽<</span>\r
-<span title="咩哈哈哈哈……"><(* ̄▽ ̄*)/</span>\r
-<span title="蔑视">( ̄_, ̄ )</span>\r
-<span title="命苦...">ε(┬┬﹏┬┬)3</span>\r
-<span title="摸摸头">(~ ̄▽ ̄)ノ</span>\r
-<span title="摸摸头">╰( ̄ω ̄o) </span>\r
-<span title="膜拜">_| ̄|○ → _|\○_ → _/\○_ → ____○_</span>\r
-<span title="墓">┏┛墓┗┓...(((m -__-)m</span>\r
-<span title="哪~里跑?!">(/// ̄皿 ̄)○~</span>\r
-<span title="那边那个">(﹁ ﹁ )σ</span>\r
-<span title="嗯!">ヾ(≧へ≦)〃</span>\r
-<span title="嗯!">o( ̄︶ ̄)n</span>\r
-<span title="嗯~">o(* ̄▽ ̄*)o</span>\r
-<span title="你!!">Σ(  ̄д ̄;)</span>\r
-<span title="你回来啦~~">ヾ(^▽^*)))</span>\r
-<span title="你你你……"> ~( TロT)σ</span>\r
-<span title="你你你……"> ~( TロT)σ</span>\r
-<span title="溺水">゜゜┌┴o゜゜゜゜°</span>\r
-<span title="念力~"> ( -人-)···-~=~≡~≡ ((+o+)))</span>\r
-<span title="念咒">((( (-h-) )))</span>\r
-<span title="念咒">……(((\( ̄一 ̄)/)))</span>\r
-<span title="捏耳朵!"><( ‵□′)>───Cε(┬﹏┬)3</span>\r
-<span title="怒">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)/</span>\r
-<span title="哦~">_( ̄0 ̄)_</span>\r
-<span title="啪叽~摔一跟头……">((o_ _)'彡☆</span>\r
-<span title="怕怕">━((*′д`)爻(′д`*))━!!!!</span>\r
-<span title="拍手">└( ̄  ̄└)(┘ ̄  ̄)┘</span>\r
-<span title="拍手拍手">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>\r
-<span title="拍桌狂笑!">o(*≧▽≦)ツ┏━┓</span>\r
-<span title="飘飘然……">︿( ̄︶ ̄)︿</span>\r
-<span title="乒乓球">( ^o)ρ┳┻┳°σ(o^ ) </span>\r
-<span title="期待"> (☆▽☆)</span>\r
-<span title="起床">(o ̄Д ̄)<起床! ※=○☆(__*)Zzz</span>\r
-<span title="起床啦!">( *′д)/o(_ _)ozzZZ…</span>\r
-<span title="切~~">( ﹁ ﹁ ) ~~~</span>\r
-<span title="亲亲">o(* ̄3 ̄)o</span>\r
-<span title="亲亲">(*  ̄)( ̄▽ ̄*)ゞ</span>\r
-<span title="去去去~">(づ ̄ 3 ̄)づ...</span>\r
-<span title="去下厕厕……">∥WC||_·)╯</span>\r
-<span title="忍术~隐!"> ( ̄人 ̄)( ̄人:.;:…( ̄...:.;::..;::: .:;.…::;.:..:;.:...</span>\r
-<span title="撒花!">( ̄▽ ̄)o∠※PAN!=.:*:'☆.:*:'★':* </span>\r
-<span title="撒花!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>\r
-<span title="散弹发射!!">▄︻┻┳═一∵∴∷∶∵ (∵_,∵)>>>></span>\r
-<span title="杀虫剂!">( ▼▼)/鹵〈 巛巛巛 ( ◎_x)/</span>\r
-<span title="闪人">(* ̄▽ ̄)( ̄▽:;.…::;.:.:::;..::;.:... </span>\r
-<span title="伤心">(;′⌒`)</span>\r
-<span title="蛇拳">z(-_-z)).....((s-_-)s</span>\r
-<span title="射箭">(  ̄ー ̄)——)-=======>-->></span>\r
-<span title="神啊~">\( ̄0 ̄)/</span>\r
-<span title="失落">(。_。) </span>\r
-<span title="石化">━━∑( ̄□ ̄*|||━━化</span>\r
-<span title="石化ing~">(ˉ▽ˉ;)...</span>\r
-<span title="视力表">┫♀旦 ̄)σ(呃……)</span>\r
-<span title="是不是你?!">(σ`д′)σ</span>\r
-<span title="是不是你?!">(σ`д′)σ</span>\r
-<span title="手榴弹!">σ~ (`′メ </span>\r
-<span title="手指戳戳">(~ ̄▽ ̄)→))* ̄▽ ̄*)o </span>\r
-<span title="手肘戳戳">o( ̄▽ ̄*)ゞ)) ̄▽ ̄*)o </span>\r
-<span title="衰">(′д` )…彡…彡</span>\r
-<span title="死亡中">(:D)┼─┤</span>\r
-<span title="太好笑了!!">……o((≧▽≦o)</span>\r
-<span title="太可怕了">ヽ(*。>Д<)o゜</span>\r
-<span title="逃命啊~~">\("▔□▔)/\("▔□▔)/ </span>\r
-<span title="陶醉">( *︾▽︾)</span>\r
-<span title="讨厌啦~">(ノω<。)ノ))☆.。</span>\r
-<span title="天旋地转">ヾ( )ノ゛ヾ( °д)ノ゛ヾ(°д°)ノ゛ヾ(д° )ノ゛ヾ( )ノ゛</span>\r
-<span title="天助我也~"> ヾ(*′▽`*)彡</span>\r
-<span title="挑衅"><(* ̄ー ̄)ゞ来呀~</span>\r
-<span title="挑衅"><(* ̄ー ̄)ゞ来啊~</span>\r
-<span title="偷看">(/ω\*)……… (/ω·\*) </span>\r
-<span title="偷看">(/ω·\*) </span>\r
-<span title="偷拍 ">Σ[ ◎ ]}ー′)</span>\r
-<span title="怒">凸艹皿艹</span>\r
-<span title="靠">凸゜皿゜メ</span>\r
-<span title="吐">( >ρ < ”)</span>\r
-<span title="推推~起床啦!">(o ̄ω ̄)○))o(__*)Zzz</span>\r
-<span title="拖走">ヽ(゜▽゜ )-C<(/;◇;)/~</span>\r
-<span title="哇卡卡卡卡卡……">o((≧▽≦o) 太好笑了!!</span>\r
-<span title="哇咧!">Σ(⊙▽⊙"a...</span>\r
-<span title="挖鼻屎"> (* ̄rǒ ̄)</span>\r
-<span title="万岁!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>\r
-<span title="围观!">(← ← )</span>\r
-<span title="围观!">( → →) </span>\r
-<span title="畏罪自杀…">…〒_〒…‵o′-一┳═┻︻▄</span>\r
-<span title="喂!">(#`O′)</span>\r
-<span title="喂饭">( *^-^)ρ(^0^* )</span>\r
-<span title="吻别">(* ̄;( ̄ *)</span>\r
-<span title="我?">σ(· ·?)</span>\r
-<span title="我不看……">(/▽\)</span>\r
-<span title="我错了……">(。﹏。*)</span>\r
-<span title="我回来啦~">||ヽ(* ̄▽ ̄*)ノミ|Ю</span>\r
-<span title="我来了~">(~ ̄▽ ̄)~</span>\r
-<span title="我忍!">o(-"-;) </span>\r
-<span title="我闪!">|(·_·) |·_·) |_·) |·) | )</span>\r
-<span title="握拳!">o( ̄ヘ ̄o* )</span>\r
-<span title="握拳!">o( ̄ヘ ̄o#)</span>\r
-<span title="呜呜呜……">( >﹏<。)~</span>\r
-<span title="无敌!">↑↑↓↓←→←→BA...┗( -o-)┛</span>\r
-<span title="无敌弹簧拳!">( ‵Д′)=○))~~~~~~Ю))>o<)/ </span>\r
-<span title="无敌幻影脚!">ヽ(ヽ `д′)ヽ`д′)ヽ`д′)┌┛┌┛┌┛★)`з゜)y</span>\r
-<span title="无敌捏脸功!"><( ‵□′)───C<─___-)|| </span>\r
-<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o </span>\r
-<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o</span>\r
-<span title="无敌影分身!">((≧(≧▽(≧▽≦(≧▽≦)≧▽≦)▽≦)≦))) </span>\r
-<span title="无力扶墙..."> ( _ _)ノ|壁</span>\r
-<span title="无奈">╮(╯-╰)╭ </span>\r
-<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>\r
-<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>\r
-<span title="享受">(╯▽╰ ) </span>\r
-<span title="消失">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>\r
-<span title="小新"><( ̄︶ ̄)↗</span>\r
-<span title="邪恶">( ‵▽′)ψ</span>\r
-<span title="谢啦!!">☆⌒(*^-゜)v </span>\r
-<span title="心神不宁...">(゜゜ )(。。)(゜゜ )(。。)</span>\r
-<span title="欣慰">( ╯▽╰)</span>\r
-<span title="要">不>( ̄ε ̄ =  ̄3 ̄)<</span>\r
-<span title="噎死">( *⊙~⊙) </span>\r
-<span title="噎住">( *⊙~⊙) </span>\r
-<span title="隐身!">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>\r
-<span title="鹰钩鼻">( ̄ム ̄) </span>\r
-<span title="哟西!">(9 ̄^ ̄)9</span>\r
-<span title="有了!">(o゜▽゜)o☆</span>\r
-<span title="有人吗?">||o(*°▽°*)o|Ю </span>\r
-<span title="御风_凌"></span>\r
-<span title="怨.念....">o(一︿一+)o</span>\r
-<span title="运动">╔囧╗╔囧╝╚囧╝╚囧╗</span>\r
-<span title="晕!">@o@"</span>\r
-<span title="糟糕!">X﹏X</span>\r
-<span title="早安呀~~~"> o(* ̄▽ ̄*)ブ</span>\r
-<span title="早点回来哦~">(~ ̄(OO) ̄)ブ</span>\r
-<span title="炸弹!">(╯‵□′)╯···*~●</span>\r
-<span title="斩!!">ˋ( ° ▽、° ) (o( ̄▽ ̄///</span>\r
-<span title="涨">( ̄︶ ̄)↗</span>\r
-<span title="这个……呃~~">-______-"</span>\r
-<span title="真哒?!"> o(〃'▽'〃)o</span>\r
-<span title="真空波动拳!">( `o′){ ···-=≡))</span>\r
-<span title="真空波动拳!">( `o′){ ···-=≡))</span>\r
-<span title="振奋">(o>ε(o>u(≧∩≦) </span>\r
-<span title="振作!">━━(o_ _)o━━(o―_―)o━━(9 ̄ー ̄)9</span>\r
-<span title="痣长毛">( ゜,_ゝ゜) </span>\r
-<span title="皱眉">(-"-)</span>\r
-<span title="抓狂">o((>ω< ))o</span>\r
-<span title="抓狂">o(>@<)o</span>\r
-<span title="足球">( · ·)L☆ .....○ 冂 </span>\r
-<span title="醉拳">ヨロ (*~▽~)ノ ヨロ ヽ(~▽~*)ヨロ (*~▽~)―〇 ☆ バシ ))>口<)</span>\r
-<p style="display: block; float: left; margin-top: 25px; margin-bottom: -40px;">© 2010 @ag108lau<br>Thanks @OnlyTiny<br />\r
-Last Update: 2010-11-13\r
+<span title="花蕾无语">╮(╯_╰)╭</span>
+<span title=" 嗷~~">┗|`O′|┛</span>
+<span title="~你给我回来!">o(°▽、°o)....+(( ̄﹏ ̄m )</span>
+<span title="“不明真相的围观群众”">槑槑槑槑呆槑槑槑槑槑槑槑槑……</span>
+<span title="『家』">~o(▽` o) =3 =3 =3</span>
+<span title="【TEL】"><铃铃铃~ヾ( ̄  ̄*)==3=3=3</span>
+<span title="【小黑屋】">ヽ( ̄︿ ̄ )—C<(/;◇;)/ </span>
+<span title="555~他不起来……">ヾ( ┬o┬)┌θθθθ(;;_ _).o○</span>
+<span title="aaa">o((>ω< ))o</span>
+<span title="aaa">o(≧口≦)o</span>
+<span title="ai">╮( ̄▽ ̄")╭ </span>
+<span title="bai">m(_ _)m</span>
+<span title="bai">ヾ( ̄▽ ̄)Bye~Bye~</span>
+<span title="baotou">▄︻┻┳═一…… ☆(>○<)</span>
+<span title="baoxiao">o(*≧▽≦)ツ</span>
+<span title="baoxiao">ヾ(≧▽≦*)o</span>
+<span title="bengkui">o(≧口≦)o</span>
+<span title="BINGO!">(o゜▽゜)o☆</span>
+<span title="biti">( ̄ ‘i  ̄;)</span>
+<span title="biti">( ̄ ii  ̄;) ( ̄" ̄;)</span>
+<span title="bizui">(⊙x⊙;)</span>
+<span title="bo">(*^ ^*)(^ *)</span>
+<span title="bqlz">(◎_x)</span>
+<span title="buhaoyisi">o( ̄┰ ̄*)ゞ</span>
+<span title="buyao">°.°·(((p(≧□≦)q)))·°.°。</span>
+<span title="canle">X﹏X 惨了!</span>
+<span title="chaoxiao">q(≧▽≦q)</span>
+<span title="chouyan">( ̄ c ̄)y▂ξ。。。</span>
+<span title="chuai"><(  ̄^ ̄)(θ(θ☆( >_< </span>
+<span title="dai">( ̄△ ̄;)</span>
+<span title="dai">( ̄旦 ̄;)</span>
+<span title="dai">━┳━ ━┳━</span>
+<span title="dao">Σ(`д′*ノ)ノ</span>
+<span title="dao">Σ(っ °Д °;)っ</span>
+<span title="dese">~( ̄▽ ̄~)(~ ̄▽ ̄)~</span>
+<span title="deyi"><( ̄ˇ ̄)/</span>
+<span title="duo">┬┴┤_·)</span>
+<span title="e">("▔□▔)</span>
+<span title="e">(⊙﹏⊙)</span>
+<span title="e">-________-''</span>
+<span title="e">o(` · ~ · ′。)o</span>
+<span title="EXIT">______λ......_____</span>
+<span title="EXIT">λ…λλ…λ…λλλ…</span>
+<span title="fangp">○| ̄|_ =3</span>
+<span title="fanzhuo">(╯′□`)╯ ┫:·'∵:.┻┻:·'.:┣∵·:. ┳┳☆</span>
+<span title="fanzhuo">(╯‵□′)╯""┻━┻☆))>○<)</span>
+<span title="fanzhuo">┻━┻︵╰(‵□′)╯︵┻━┻ </span>
+<span title="fei">︿( ̄︶ ̄)︿</span>
+<span title="fen">ヾ(≧奋≦)〃</span>
+<span title="fk">French (* ̄( ̄ *) Kiss!</span>
+<span title="fufu">( ̄ˇ ̄)v</span>
+<span title="fufu">fufu~ ^u^</span>
+<span title="gaozhuang">( σ'ω')σ </span>
+<span title="gaozhuang">o(>O<;; )σ</span>
+<span title="gfw">┳G┻┳F┳┻W┫</span>
+<span title="GiveMeFive!">(┘ ̄︶ ̄)┘└( ̄︶ ̄└)</span>
+<span title="GO!"><( ̄︶ ̄)↗</span>
+<span title="GO!"><( ̄OO, ̄)/</span>
+<span title="good">Good! o( ̄▽ ̄)d</span>
+<span title="gudan">______λ......_____</span>
+<span title="guilian">( ̄┰ ̄*)</span>
+<span title="ha">(#°Д°) </span>
+<span title="ha">O口O!</span>
+<span title="ha">Σ(⊙▽⊙"a...</span>
+<span title="haha">o(*≧▽≦)ツ</span>
+<span title="han">( ̄_ ̄|||)</span>
+<span title="han">( ̄▽ ̄")</span>
+<span title="han">(寒 ̄ii ̄)彡…彡…彡</span>
+<span title="hehe">o(* ̄▽ ̄*)o</span>
+<span title="heiban">【】\(·ω·`)o</span>
+<span title="heihei">o(* ̄▽ ̄*)ゞ</span>
+<span title="heng">( -з)</span>
+<span title="heng">(;′⌒`)</span>
+<span title="heng">(ε- )</span>
+<span title="heng">o( ̄ヘ ̄o#) </span>
+<span title="hh">( ̄▽ ̄")</span>
+<span title="hh">o(* ̄▽ ̄*)o</span>
+<span title="hhh">^-^</span>
+<span title="hhh">^O^</span>
+<span title="hi">Hi~ o(* ̄▽ ̄*)ブ</span>
+<span title="Hi~Hitler!">( ·_·)ノ_·)ノ_·)ノ_·)ノ_·)ノ</span>
+<span title="hiahia">○( ^皿^)っHiahiahia.... </span>
+<span title="hoho">( ̄y▽ ̄)╭ Ohohoho.....</span>
+<span title="hoho">hoho ^O^</span>
+<span title="huhu">(_ _)。゜zzZ</span>
+<span title="jing">Σ( ° △ °|||)︴</span>
+<span title="jing">Σ(`д′*ノ)ノ</span>
+<span title="jing">Σ(っ °Д °;)っ</span>
+<span title="jirou">┗|*`0′*|┛</span>
+<span title="jiujie">( -'`-; ) </span>
+<span title="jiujie">o(′益`)o</span>
+<span title="jizhang">(  ̄ー ̄)人(^▽^ )</span>
+<span title="keai">n(*≧▽≦*)n</span>
+<span title="kedou">(°°)~ (°°)~ (°°)~ (°°)~</span>
+<span title="Kiss!"> (* ̄( ̄ *)</span>
+<span title="koushui">ˋ( ° ▽、° ) 口水ing...</span>
+<span title="K歌"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)></span>
+<span title="laohu">m( =∩王∩= )m</span>
+<span title="lei">(┳_┳)...</span>
+<span title="lei">/(ㄒoㄒ)/~~</span>
+<span title="luanma">卐~%?…,# *'☆&℃$︿★?</span>
+<span title="manzu">o(* ̄︶ ̄*)o</span>
+<span title="manzu">o( ̄ˇ ̄)o</span>
+<span title="mao">o( =·ω·= )m </span>
+<span title="mao">o(=·ェ·=)m</span>
+<span title="max">MIN■■■■■□□MAX</span>
+<span title="miehhh">(/ ̄ˇ ̄)/</span>
+<span title="mimi">(。人。) </span>
+<span title="mmm">mmm...f('︶︿︶)o</span>
+<span title="mmm">mmm.....</span>
+<span title="mojiezuo">Capricorn</span>
+<span title="mua">mua! (*╯3╰)</span>
+<span title="niao">--\(˙<>˙)/--</span>
+<span title="nie">~( ̄▽ ̄)~* </span>
+<span title="nu">(#‵′) </span>
+<span title="nu">(o#゜ 曲゜)o</span>
+<span title="nu">MIN■■■■■□□MAX(╯‵□′)╯︵┻━┻</span>
+<span title="nu">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)ノ</span>
+<span title="o">(⊙o⊙)?</span>
+<span title="ohno">Oh~ no!!!!</span>
+<span title="ohye">Oh yeah!\(^&^)/</span>
+<span title="ok">OK</span>
+<span title="paidui">λ…λλ…λ…入λλ…</span>
+<span title="pao">ε = = (づ′▽`)づ</span>
+<span title="pao">ε=ε=ε=(~ ̄▽ ̄)~</span>
+<span title="pao">ヾ(*′▽`*)ノ彡☆ノヽノヽノヽ</span>
+<span title="pdr">ヾ(′▽`* )ノ~</span>
+<span title="pia">( ̄ε(# ̄)☆╰╮o( ̄▽ ̄///) </span>
+<span title="pia">Pia!(o ‵-′)ノ”(ノ﹏<。)</span>
+<span title="piao">(~ ̄▽ ̄)~</span>
+<span title="piao">(~o ̄3 ̄)~</span>
+<span title="piao">.....((/- -)/</span>
+<span title="qiang">▄︻┻┳═一……</span>
+<span title="qie">(ˉ▽ ̄~) 切~~</span>
+<span title="qing">( ^ ^) _U~~</span>
+<span title="quan">(╬ ̄皿 ̄)=○#( ̄#)3 ̄)</span>
+<span title="quan">(Д゜(○=(゜ 皿゜)=○)゜Д゜)</span>
+<span title="shengqi"><(-︿-)></span>
+<span title="shy">shy~ o(*////▽////*)q</span>
+<span title="sigh">( ′ 3`) sigh~</span>
+<span title="S奥特曼">三三三三三三三三三4(o|o ) </span>
+<span title="S小孩!"> (o ‵-′)ノ”(ノ_<。)</span>
+<span title="t"><(  ̄^ ̄)(θ(θ☆( >_< </span>
+<span title="tanshou">╮( ╯ 3 ╰ )╭</span>
+<span title="tanshou">╮( ̄▽ ̄")╭ </span>
+<span title="tanshou">╮(╯-╰)╭</span>
+<span title="tanshou">ㄟ( ▔, ▔ )ㄏ</span>
+<span title="tao">ε=ε=┏( >_<)┛</span>
+<span title="tao">ε=ε=ε=┏(゜ロ゜;)┛ </span>
+<span title="tao">ε=ε=ε=ε=ヽ(* ̄o ̄)ノ</span>
+<span title="tat">o(≧∩≦)o</span>
+<span title="tat">o(TヘTo)</span>
+<span title="thx">☆⌒(*^-゜)v THX!!</span>
+<span title="toukui">|壁|_☆)</span>
+<span title="toukui">┬┴┤_·)</span>
+<span title="touxiang">n(→_←)┛</span>
+<span title="touxiang">o( >﹏<。)┛</span>
+<span title="tun">0^)吞!</span>
+<span title="tushetou">( ̄┰ ̄*)</span>
+<span title="wa">(PД`q。)·。'゜</span>
+<span title="wakkk"><( ̄▽ ̄)/</span>
+<span title="wc">∥wc∥ o(- -o) =з =з =з</span>
+<span title="weiguan">(﹁"﹁)</span>
+<span title="weiqu">╥﹏╥...</span>
+<span title="wo">σ(⌒ー⌒)</span>
+<span title="woniu">@/"</span>
+<span title="wow">wow~⊙o⊙</span>
+<span title="xiaoxin">ㄟ( ▔, ▔ )ㄏ</span>
+<span title="xiey">( ﹁ ﹁ ) ~→</span>
+<span title="xiey">( ̄. ̄)+</span>
+<span title="xiey">(﹁"﹁)</span>
+<span title="xiezi">...ψ(。。 )</span>
+<span title="xingfu">o(* ̄▽ ̄*)o</span>
+<span title="xiong">(* ̄(エ) ̄)</span>
+<span title="xiong">(+(工)+╬)</span>
+<span title="xiu">o(*////▽////*)q</span>
+<span title="xiu">p(# ̄▽ ̄#)o</span>
+<span title="xxoo">卐~%?…,# *'☆&℃$︿★?……</span>
+<span title="xxoo">╳╳○○</span>
+<span title="y">(* ̄︶ ̄)y</span>
+<span title="y">(* ̄▽ ̄)y</span>
+<span title="y">^_^)y</span>
+<span title="yanshen">━┳━ ━┳━</span>
+<span title="yanwenzi">ag108lau</span>
+<span title="yessir">Yes,sir! <( ̄O ̄)/</span>
+<span title="yiqi">╭(′▽`)╭(′▽`)╯</span>
+<span title="yiqi">ヽ( ̄ω ̄( ̄ω ̄〃)ゝ</span>
+<span title="yo">(^U^)ノ~YO </span>
+<span title="yu">>°)))>彡</span>
+<span title="yun">(((φ(◎ロ◎;)φ)))</span>
+<span title="zhaoxiang">Σ[ ◎ ]}</span>
+<span title="zhi"><( ̄ ﹌  ̄)@m</span>
+<span title="zhu">^(* ̄(oo) ̄)^</span>
+<span title="zhua">W( ̄_ ̄)W</span>
+<span title="zhuangqiang">┳G┻F┳W┫☆(ノ﹏<。)</span>
+<span title="zhuisha">--==≡≡〈〈《( / ̄皿 ̄)=O));>o<)/</span>
+<span title="zuomeng">ZZzz…(。-ω-)..ooO((【·:*:~夢~:*:·】))</span>
+<span title="哎哟哟……">( ̄y▽, ̄)╭ </span>
+<span title="安安啦~~~"> o(* ̄▽ ̄*)ブ</span>
+<span title="凹凸曼……">(o|o)</span>
+<span title="嗷~">ヾ(≧O≦)〃</span>
+<span title="奥特曼……">(o|o) </span>
+<span title="拜佛">(-人-) </span>
+<span title="拜托啦……">(^人^)</span>
+<span title="包在我身上!">ヾ(′▽`*)ゝ</span>
+<span title="包在我身上!">ヾ(′▽`*)ゝ</span>
+<span title="抱抱">━((*′ ▽`)爻(′▽`*))━!!!</span>
+<span title="抱抱">━((*′д`)爻(′д`*))━!!!!</span>
+<span title="抱抱~">\( ̄︶ ̄)/</span>
+<span title="抱抱~">\( ̄︶ ̄*\))</span>
+<span title="鼻毛">(′゜c_,゜` ) </span>
+<span title="鄙视你!">╭∩╮(︶︿︶)╭∩╮</span>
+<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>
+<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>
+<span title="壁">ノ ̄ー ̄)ノ ⌒ >┼○"☆||</span>
+<span title="便秘">o(′益`)o </span>
+<span title="辫子">§(* ̄▽ ̄*)§</span>
+<span title="表!"><( ̄3 ̄)> </span>
+<span title="别走啊~~">______λ......___丬</span>
+<span title="瘪嘴">(* ̄︿ ̄) </span>
+<span title="冰天雪地掩面泪奔……">(PД`q。)·。'゜</span>
+<span title="啵啵">(*  ̄3)(ε ̄ *) </span>
+<span title="不吃!">( *^-^)ρ(*╯^╰)</span>
+<span title="不懂">(@_@;)? </span>
+<span title="不满">(* ̄︿ ̄) </span>
+<span title="不是我干的">ㄟ( ▔, ▔ )ㄏ </span>
+<span title="不屑">( ̄_, ̄ )</span>
+<span title="擦眼泪……">(ノへ ̄、)</span>
+<span title="财神爷">(o′┏▽┓`o) </span>
+<span title="草泥马">( ·ェ·)(·ェ· )</span>
+<span title="蹭">(*≧︶≦))( ̄▽ ̄* )ゞ</span>
+<span title="蹭">( * ̄▽ ̄)((≧︶≦*) </span>
+<span title="叉腰"><)。(> </span>
+<span title="超强风扇吹">ε~( ~( ~ ( 卍 )\( ̄▽ ̄ \)</span>
+<span title="超远程BB枪!">(# ̄□ ̄)o―∈‥oo━━━━━━━☆ </span>
+<span title="車">●┻┓⌒ Σ┌┘車└┐=3 =3 =3</span>
+<span title="吃饭去鸟">.....(((((ヾ( o=^·ェ·)o ┏━┓</span>
+<span title="吃我一鞭!">( `0‘)ノ~~~~~~~~~ν</span>
+<span title="吃药">(。>︿<)_θ</span>
+<span title="冲出!!">___*\(  ̄皿 ̄)/#____</span>
+<span title="抽!!">( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)</span>
+<span title="抽泣">(ノへ ̄、)</span>
+<span title="抽泣">(ノへ ̄、)</span>
+<span title="臭蚊子!">Pia!(o ‵-′)ノ” </span>
+<span title="穿墙过去!">ε=ε┣G┻F┳ε=ヽ(* ̄▽ ̄)ノ┻W┫</span>
+<span title="戳">→)╥﹏╥) </span>
+<span title="赐予你力量!">( * ̄▽ ̄)o ─═≡※:☆▆▅▄▃▂_</span>
+<span title="打呵欠">(_ _)( - . - )(~O~) ……( - . - ) </span>
+<span title="大鼻子">(′台` ) </span>
+<span title="呆滞"> ━┳━ ━┳━</span>
+<span title="淡定">━━( ̄ー ̄*|||━━</span>
+<span title="当然!"><(ˉ^ˉ)></span>
+<span title="刀疤">(-_-メ)</span>
+<span title="等等我…我……我…………">...(* ̄0 ̄)ノ</span>
+<span title="低落"> (#`-_ゝ-)</span>
+<span title="低头">(。﹏。) </span>
+<span title="低头">(。_。) </span>
+<span title="点头">( ̄ー ̄(_ _( ̄ー ̄(_ _ </span>
+<span title="跌">(┬_┬)↘ </span>
+<span title="顶!">d=====( ̄▽ ̄*)b </span>
+<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>
+<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>
+<span title="抖">o((⊙﹏⊙))o. </span>
+<span title="嘟嘴">o( ̄ε ̄*) </span>
+<span title="嘟嘴">(○` 3′○) </span>
+<span title="对不起~"> <(_ _)></span>
+<span title="呃~被发现了......">(ˉ▽ˉ;)</span>
+<span title="呃~我……">σ(-_-メ)</span>
+<span title="翻桌!">(╯‵□′)╯︵┻━┻</span>
+<span title="防御!">(((\( ̄一 ̄)/)))</span>
+<span title="放我出去~~~"> ||Φ|(|T|Д|T|)|Φ|| </span>
+<span title="飞吻"> (* ̄3 ̄)╭</span>
+<span title="分裂">>( ̄▽ ̄ =  ̄︿ ̄)<</span>
+<span title="风魔法!"> (/-_-)/ξ ξ ξ ξ ξ ξ (+_+ /)/~~~</span>
+<span title="去去去~">乀ˉεˉ乀...</span>
+<span title="扶眼镜">(-@y@) </span>
+<span title="扶眼镜">(-@y@) </span>
+<span title="复活!">...:.;::..;::: .:.;::….;: ̄)…:.;:□ ̄)( ̄□ ̄*)</span>
+<span title="嘎~嘎~嘎~">.<{=....</span>
+<span title="干杯">( ̄▽ ̄)~■□~( ̄▽ ̄)</span>
+<span title="干杯!">~( ̄▽ ̄)~* </span>
+<span title="感动!">o(*≧▽≦*)m</span>
+<span title="高~实在是高!">(* ̄▽)u┌┐ d(▽ ̄*)</span>
+<span title="告状">(′д`σ)σ </span>
+<span title="跟你说厚~">╰( ̄▽ ̄)╭</span>
+<span title="狗狗">U·ェ·*U </span>
+<span title="狗狗">U·ェ·U </span>
+<span title="鼓掌">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>
+<span title="鼓掌">└( ̄  ̄└)(┘ ̄  ̄)┘</span>
+<span title="乖~">o(*^@^*)o</span>
+<span title="滚来滚去">……~(~o ̄▽ ̄)~o 。。。……o~(_△_o~) ~。。。</span>
+<span title="含泪挥手帕">(ToT)/~~~</span>
+<span title="好~~">o(*^▽^*)o </span>
+<span title="好吧">╮╯-╰╭"</span>
+<span title="好苦~">( >﹏<)</span>
+<span title="好香~~">(╯▽╰ )</span>
+<span title="好主意!">(o゜▽゜)o☆</span>
+<span title="喝西北风">( ′Д`)彡</span>
+<span title="河马">( ̄。。 ̄)</span>
+<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>
+<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>
+<span title="呼~幸好幸好……">ε=( ̄。 ̄;A</span>
+<span title="呼唤">(/0 ̄)o </span>
+<span title="坏人……"> ~( TロT)σ</span>
+<span title="幻影术!">((( ̄( ̄( ̄( ̄ー ̄) ̄) ̄) ̄))) </span>
+<span title="挥手帕">(@^^)/~~~</span>
+<span title="火箭筒,发射!">(* ̄皿 ̄)=Σ口>=Σ口>=Σ口></span>
+<span title="获胜者是……">ヾ( ̄ー ̄)X(^▽^)ゞ</span>
+<span title="击掌">(〃 ̄︶ ̄)人( ̄︶ ̄〃)</span>
+<span title="加油">o^^oo^^o</span>
+<span title="交通志愿老大妈指挥ing..."> (o^~^)尸"</span>
+<span title="金盾!">||┣(—_\) </span>
+<span title="就你!"><( ̄ ﹌  ̄)@m</span>
+<span title="就你好了~"> (@゜▽゜)</span>
+<span title="就是他!"> (@`д′)</span>
+<span title="举手">o(*^▽^*)┛</span>
+<span title="举手投降">┗( T﹏T )┛</span>
+<span title="嚼!">( ̄~ ̄)</span>
+<span title="卡拉OK"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)′</span>
+<span title="看">(°ー°〃) </span>
+<span title="看好你哦!">(@^0^)</span>
+<span title="看我忍者镖!">( ‵▽′)ノ'卍卍卍卍卍卍 Σ(゜д゜;)</span>
+<span title="靠!什么东西?!"> ( `д′)</span>
+<span title="咳咳">><</span>
+<span title="苦恼"> ( -'`-; )</span>
+<span title="快使用双截棍,">┗(`o′)┓哼┏(`○′)┛哼┏(`o′)┓哈┗(`O′)┛兮!!</span>
+<span title="困,揉眼睛……">(o-ωq)).oO</span>
+<span title="啦啦啦">...φ(0 ̄*)_φ(* ̄0 ̄)></span>
+<span title="来啦~">(~o ̄▽ ̄)~o ~。。。</span>
+<span title="来人呐~">(o ;′Д`)ノ゛</span>
+<span title="冷笑">(  ̄ー ̄)</span>
+<span title="脸红掩面">(*/ω\*)</span>
+<span title="脸红掩面">(*/ω\*)</span>
+<span title="两罐纸星星">(*ˉ﹃ˉ)_☆☆</span>
+<span title="列队">(* ̄^ ̄(* ̄^ ̄(* ̄^ ̄)</span>
+<span title="铃铃铃">☆{{{Д}}} ☆!! </span>
+<span title="毛毛虫">(· ·)nnn </span>
+<span title="没办法~">╮( ̄▽ ̄")╭</span>
+<span title="没人在哦?">||o(*°ω°*)o|Ю </span>
+<span title="媚眼">ο(=·ω<=)ρ⌒☆</span>
+<span title="秘密">(一-一) </span>
+<span title="喵~">o( =∩ω∩= )m </span>
+<span title="喵~">>▽<</span>
+<span title="咩哈哈哈哈……"><(* ̄▽ ̄*)/</span>
+<span title="蔑视">( ̄_, ̄ )</span>
+<span title="命苦...">ε(┬┬﹏┬┬)3</span>
+<span title="摸摸头">(~ ̄▽ ̄)ノ</span>
+<span title="摸摸头">╰( ̄ω ̄o) </span>
+<span title="膜拜">_| ̄|○ → _|\○_ → _/\○_ → ____○_</span>
+<span title="墓">┏┛墓┗┓...(((m -__-)m</span>
+<span title="哪~里跑?!">(/// ̄皿 ̄)○~</span>
+<span title="那边那个">(﹁ ﹁ )σ</span>
+<span title="嗯!">ヾ(≧へ≦)〃</span>
+<span title="嗯!">o( ̄︶ ̄)n</span>
+<span title="嗯~">o(* ̄▽ ̄*)o</span>
+<span title="你!!">Σ(  ̄д ̄;)</span>
+<span title="你回来啦~~">ヾ(^▽^*)))</span>
+<span title="你你你……"> ~( TロT)σ</span>
+<span title="你你你……"> ~( TロT)σ</span>
+<span title="溺水">゜゜┌┴o゜゜゜゜°</span>
+<span title="念力~"> ( -人-)···-~=~≡~≡ ((+o+)))</span>
+<span title="念咒">((( (-h-) )))</span>
+<span title="念咒">……(((\( ̄一 ̄)/)))</span>
+<span title="捏耳朵!"><( ‵□′)>───Cε(┬﹏┬)3</span>
+<span title="怒">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)/</span>
+<span title="哦~">_( ̄0 ̄)_</span>
+<span title="啪叽~摔一跟头……">((o_ _)'彡☆</span>
+<span title="怕怕">━((*′д`)爻(′д`*))━!!!!</span>
+<span title="拍手">└( ̄  ̄└)(┘ ̄  ̄)┘</span>
+<span title="拍手拍手">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>
+<span title="拍桌狂笑!">o(*≧▽≦)ツ┏━┓</span>
+<span title="飘飘然……">︿( ̄︶ ̄)︿</span>
+<span title="乒乓球">( ^o)ρ┳┻┳°σ(o^ ) </span>
+<span title="期待"> (☆▽☆)</span>
+<span title="起床">(o ̄Д ̄)<起床! ※=○☆(__*)Zzz</span>
+<span title="起床啦!">( *′д)/o(_ _)ozzZZ…</span>
+<span title="切~~">( ﹁ ﹁ ) ~~~</span>
+<span title="亲亲">o(* ̄3 ̄)o</span>
+<span title="亲亲">(*  ̄)( ̄▽ ̄*)ゞ</span>
+<span title="去去去~">(づ ̄ 3 ̄)づ...</span>
+<span title="去下厕厕……">∥WC||_·)╯</span>
+<span title="忍术~隐!"> ( ̄人 ̄)( ̄人:.;:…( ̄...:.;::..;::: .:;.…::;.:..:;.:...</span>
+<span title="撒花!">( ̄▽ ̄)o∠※PAN!=.:*:'☆.:*:'★':* </span>
+<span title="撒花!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>
+<span title="散弹发射!!">▄︻┻┳═一∵∴∷∶∵ (∵_,∵)>>>></span>
+<span title="杀虫剂!">( ▼▼)/鹵〈 巛巛巛 ( ◎_x)/</span>
+<span title="闪人">(* ̄▽ ̄)( ̄▽:;.…::;.:.:::;..::;.:... </span>
+<span title="伤心">(;′⌒`)</span>
+<span title="蛇拳">z(-_-z)).....((s-_-)s</span>
+<span title="射箭">(  ̄ー ̄)——)-=======>-->></span>
+<span title="神啊~">\( ̄0 ̄)/</span>
+<span title="失落">(。_。) </span>
+<span title="石化">━━∑( ̄□ ̄*|||━━化</span>
+<span title="石化ing~">(ˉ▽ˉ;)...</span>
+<span title="视力表">┫♀旦 ̄)σ(呃……)</span>
+<span title="是不是你?!">(σ`д′)σ</span>
+<span title="是不是你?!">(σ`д′)σ</span>
+<span title="手榴弹!">σ~ (`′メ </span>
+<span title="手指戳戳">(~ ̄▽ ̄)→))* ̄▽ ̄*)o </span>
+<span title="手肘戳戳">o( ̄▽ ̄*)ゞ)) ̄▽ ̄*)o </span>
+<span title="衰">(′д` )…彡…彡</span>
+<span title="死亡中">(:D)┼─┤</span>
+<span title="太好笑了!!">……o((≧▽≦o)</span>
+<span title="太可怕了">ヽ(*。>Д<)o゜</span>
+<span title="逃命啊~~">\("▔□▔)/\("▔□▔)/ </span>
+<span title="陶醉">( *︾▽︾)</span>
+<span title="讨厌啦~">(ノω<。)ノ))☆.。</span>
+<span title="天旋地转">ヾ( )ノ゛ヾ( °д)ノ゛ヾ(°д°)ノ゛ヾ(д° )ノ゛ヾ( )ノ゛</span>
+<span title="天助我也~"> ヾ(*′▽`*)彡</span>
+<span title="挑衅"><(* ̄ー ̄)ゞ来呀~</span>
+<span title="挑衅"><(* ̄ー ̄)ゞ来啊~</span>
+<span title="偷看">(/ω\*)……… (/ω·\*) </span>
+<span title="偷看">(/ω·\*) </span>
+<span title="偷拍 ">Σ[ ◎ ]}ー′)</span>
+<span title="怒">凸艹皿艹</span>
+<span title="靠">凸゜皿゜メ</span>
+<span title="吐">( >ρ < ”)</span>
+<span title="推推~起床啦!">(o ̄ω ̄)○))o(__*)Zzz</span>
+<span title="拖走">ヽ(゜▽゜ )-C<(/;◇;)/~</span>
+<span title="哇卡卡卡卡卡……">o((≧▽≦o) 太好笑了!!</span>
+<span title="哇咧!">Σ(⊙▽⊙"a...</span>
+<span title="挖鼻屎"> (* ̄rǒ ̄)</span>
+<span title="万岁!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>
+<span title="围观!">(← ← )</span>
+<span title="围观!">( → →) </span>
+<span title="畏罪自杀…">…〒_〒…‵o′-一┳═┻︻▄</span>
+<span title="喂!">(#`O′)</span>
+<span title="喂饭">( *^-^)ρ(^0^* )</span>
+<span title="吻别">(* ̄;( ̄ *)</span>
+<span title="我?">σ(· ·?)</span>
+<span title="我不看……">(/▽\)</span>
+<span title="我错了……">(。﹏。*)</span>
+<span title="我回来啦~">||ヽ(* ̄▽ ̄*)ノミ|Ю</span>
+<span title="我来了~">(~ ̄▽ ̄)~</span>
+<span title="我忍!">o(-"-;) </span>
+<span title="我闪!">|(·_·) |·_·) |_·) |·) | )</span>
+<span title="握拳!">o( ̄ヘ ̄o* )</span>
+<span title="握拳!">o( ̄ヘ ̄o#)</span>
+<span title="呜呜呜……">( >﹏<。)~</span>
+<span title="无敌!">↑↑↓↓←→←→BA...┗( -o-)┛</span>
+<span title="无敌弹簧拳!">( ‵Д′)=○))~~~~~~Ю))>o<)/ </span>
+<span title="无敌幻影脚!">ヽ(ヽ `д′)ヽ`д′)ヽ`д′)┌┛┌┛┌┛★)`з゜)y</span>
+<span title="无敌捏脸功!"><( ‵□′)───C<─___-)|| </span>
+<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o </span>
+<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o</span>
+<span title="无敌影分身!">((≧(≧▽(≧▽≦(≧▽≦)≧▽≦)▽≦)≦))) </span>
+<span title="无力扶墙..."> ( _ _)ノ|壁</span>
+<span title="无奈">╮(╯-╰)╭ </span>
+<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>
+<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>
+<span title="享受">(╯▽╰ ) </span>
+<span title="消失">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>
+<span title="小新"><( ̄︶ ̄)↗</span>
+<span title="邪恶">( ‵▽′)ψ</span>
+<span title="谢啦!!">☆⌒(*^-゜)v </span>
+<span title="心神不宁...">(゜゜ )(。。)(゜゜ )(。。)</span>
+<span title="欣慰">( ╯▽╰)</span>
+<span title="要">不>( ̄ε ̄ =  ̄3 ̄)<</span>
+<span title="噎死">( *⊙~⊙) </span>
+<span title="噎住">( *⊙~⊙) </span>
+<span title="隐身!">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>
+<span title="鹰钩鼻">( ̄ム ̄) </span>
+<span title="哟西!">(9 ̄^ ̄)9</span>
+<span title="有了!">(o゜▽゜)o☆</span>
+<span title="有人吗?">||o(*°▽°*)o|Ю </span>
+<span title="御风_凌"></span>
+<span title="怨.念....">o(一︿一+)o</span>
+<span title="运动">╔囧╗╔囧╝╚囧╝╚囧╗</span>
+<span title="晕!">@o@"</span>
+<span title="糟糕!">X﹏X</span>
+<span title="早安呀~~~"> o(* ̄▽ ̄*)ブ</span>
+<span title="早点回来哦~">(~ ̄(OO) ̄)ブ</span>
+<span title="炸弹!">(╯‵□′)╯···*~●</span>
+<span title="斩!!">ˋ( ° ▽、° ) (o( ̄▽ ̄///</span>
+<span title="涨">( ̄︶ ̄)↗</span>
+<span title="这个……呃~~">-______-"</span>
+<span title="真哒?!"> o(〃'▽'〃)o</span>
+<span title="真空波动拳!">( `o′){ ···-=≡))</span>
+<span title="真空波动拳!">( `o′){ ···-=≡))</span>
+<span title="振奋">(o>ε(o>u(≧∩≦) </span>
+<span title="振作!">━━(o_ _)o━━(o―_―)o━━(9 ̄ー ̄)9</span>
+<span title="痣长毛">( ゜,_ゝ゜) </span>
+<span title="皱眉">(-"-)</span>
+<span title="抓狂">o((>ω< ))o</span>
+<span title="抓狂">o(>@<)o</span>
+<span title="足球">( · ·)L☆ .....○ 冂 </span>
+<span title="醉拳">ヨロ (*~▽~)ノ ヨロ ヽ(~▽~*)ヨロ (*~▽~)―〇 ☆ バシ ))>口<)</span>
+<p style="display: block; float: left; margin-top: 25px; margin-bottom: -40px;">© 2010 @ag108lau<br>Thanks @OnlyTiny<br />
+Last Update: 2010-11-13
</p>
\ No newline at end of file
+++ /dev/null
-<span title=" 嗷~~">┗|`O′|┛</span>\r
-<span title="~你给我回来!">o(°▽、°o)....+(( ̄﹏ ̄m )</span>\r
-<span title="“不明真相的围观群众”">槑槑槑槑呆槑槑槑槑槑槑槑槑……</span>\r
-<span title="『家』">~o(▽` o) =3 =3 =3</span>\r
-<span title="【TEL】"><铃铃铃~ヾ( ̄  ̄*)==3=3=3</span>\r
-<span title="【小黑屋】">ヽ( ̄︿ ̄ )—C<(/;◇;)/ </span>\r
-<span title="555~他不起来……">ヾ( ┬o┬)┌θθθθ(;;_ _).o○</span>\r
-<span title="aaa">o((>ω< ))o</span>\r
-<span title="aaa">o(≧口≦)o</span>\r
-<span title="ai">╮( ̄▽ ̄")╭ </span>\r
-<span title="bai">m(_ _)m</span>\r
-<span title="bai">ヾ( ̄▽ ̄)Bye~Bye~</span>\r
-<span title="baotou">▄︻┻┳═一…… ☆(>○<)</span>\r
-<span title="baoxiao">o(*≧▽≦)ツ</span>\r
-<span title="baoxiao">ヾ(≧▽≦*)o</span>\r
-<span title="bengkui">o(≧口≦)o</span>\r
-<span title="BINGO!">(o゜▽゜)o☆</span>\r
-<span title="biti">( ̄ ‘i  ̄;)</span>\r
-<span title="biti">( ̄ ii  ̄;) ( ̄" ̄;)</span>\r
-<span title="bizui">(⊙x⊙;)</span>\r
-<span title="bo">(*^ ^*)(^ *)</span>\r
-<span title="bqlz">(◎_x)</span>\r
-<span title="buhaoyisi">o( ̄┰ ̄*)ゞ</span>\r
-<span title="buyao">°.°·(((p(≧□≦)q)))·°.°。</span>\r
-<span title="canle">X﹏X 惨了!</span>\r
-<span title="chaoxiao">q(≧▽≦q)</span>\r
-<span title="chouyan">( ̄ c ̄)y▂ξ。。。</span>\r
-<span title="chuai"><(  ̄^ ̄)(θ(θ☆( >_< </span>\r
-<span title="dai">( ̄△ ̄;)</span>\r
-<span title="dai">( ̄旦 ̄;)</span>\r
-<span title="dai">━┳━ ━┳━</span>\r
-<span title="dao">Σ(`д′*ノ)ノ</span>\r
-<span title="dao">Σ(っ °Д °;)っ</span>\r
-<span title="dese">~( ̄▽ ̄~)(~ ̄▽ ̄)~</span>\r
-<span title="deyi"><( ̄ˇ ̄)/</span>\r
-<span title="duo">┬┴┤_·)</span>\r
-<span title="e">("▔□▔)</span>\r
-<span title="e">(⊙﹏⊙)</span>\r
-<span title="e">-________-''</span>\r
-<span title="e">o(` · ~ · ′。)o</span>\r
-<span title="EXIT">______λ......_____</span>\r
-<span title="EXIT">λ…λλ…λ…λλλ…</span>\r
-<span title="fangp">○| ̄|_ =3</span>\r
-<span title="fanzhuo">(╯′□`)╯ ┫:·'∵:.┻┻:·'.:┣∵·:. ┳┳☆</span>\r
-<span title="fanzhuo">(╯‵□′)╯""┻━┻☆))>○<)</span>\r
-<span title="fanzhuo">┻━┻︵╰(‵□′)╯︵┻━┻ </span>\r
-<span title="fei">︿( ̄︶ ̄)︿</span>\r
-<span title="fen">ヾ(≧奋≦)〃</span>\r
-<span title="fk">French (* ̄( ̄ *) Kiss!</span>\r
-<span title="fufu">( ̄ˇ ̄)v</span>\r
-<span title="fufu">fufu~ ^u^</span>\r
-<span title="gaozhuang">( σ'ω')σ </span>\r
-<span title="gaozhuang">o(>O<;; )σ</span>\r
-<span title="gfw">┳G┻┳F┳┻W┫</span>\r
-<span title="GiveMeFive!">(┘ ̄︶ ̄)┘└( ̄︶ ̄└)</span>\r
-<span title="GO!"><( ̄︶ ̄)↗</span>\r
-<span title="GO!"><( ̄OO, ̄)/</span>\r
-<span title="good">Good! o( ̄▽ ̄)d</span>\r
-<span title="gudan">______λ......_____</span>\r
-<span title="guilian">( ̄┰ ̄*)</span>\r
-<span title="ha">(#°Д°) </span>\r
-<span title="ha">O口O!</span>\r
-<span title="ha">Σ(⊙▽⊙"a...</span>\r
-<span title="haha">o(*≧▽≦)ツ</span>\r
-<span title="han">( ̄_ ̄|||)</span>\r
-<span title="han">( ̄▽ ̄")</span>\r
-<span title="han">(寒 ̄ii ̄)彡…彡…彡</span>\r
-<span title="hehe">o(* ̄▽ ̄*)o</span>\r
-<span title="heiban">【】\(·ω·`)o</span>\r
-<span title="heihei">o(* ̄▽ ̄*)ゞ</span>\r
-<span title="heng">( -з)</span>\r
-<span title="heng">(;′⌒`)</span>\r
-<span title="heng">(ε- )</span>\r
-<span title="heng">o( ̄ヘ ̄o#) </span>\r
-<span title="hh">( ̄▽ ̄")</span>\r
-<span title="hh">o(* ̄▽ ̄*)o</span>\r
-<span title="hhh">^-^</span>\r
-<span title="hhh">^O^</span>\r
-<span title="hi">Hi~ o(* ̄▽ ̄*)ブ</span>\r
-<span title="Hi~Hitler!">( ·_·)ノ_·)ノ_·)ノ_·)ノ_·)ノ</span>\r
-<span title="hiahia">○( ^皿^)っHiahiahia.... </span>\r
-<span title="hoho">( ̄y▽ ̄)╭ Ohohoho.....</span>\r
-<span title="hoho">hoho ^O^</span>\r
-<span title="huhu">(_ _)。゜zzZ</span>\r
-<span title="jing">Σ( ° △ °|||)︴</span>\r
-<span title="jing">Σ(`д′*ノ)ノ</span>\r
-<span title="jing">Σ(っ °Д °;)っ</span>\r
-<span title="jirou">┗|*`0′*|┛</span>\r
-<span title="jiujie">( -'`-; ) </span>\r
-<span title="jiujie">o(′益`)o</span>\r
-<span title="jizhang">(  ̄ー ̄)人(^▽^ )</span>\r
-<span title="keai">n(*≧▽≦*)n</span>\r
-<span title="kedou">(°°)~ (°°)~ (°°)~ (°°)~</span>\r
-<span title="Kiss!"> (* ̄( ̄ *)</span>\r
-<span title="koushui">ˋ( ° ▽、° ) 口水ing...</span>\r
-<span title="K歌"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)></span>\r
-<span title="laohu">m( =∩王∩= )m</span>\r
-<span title="lei">(┳_┳)...</span>\r
-<span title="lei">/(ㄒoㄒ)/~~</span>\r
-<span title="luanma">卐~%?…,# *'☆&℃$︿★?</span>\r
-<span title="manzu">o(* ̄︶ ̄*)o</span>\r
-<span title="manzu">o( ̄ˇ ̄)o</span>\r
-<span title="mao">o( =·ω·= )m </span>\r
-<span title="mao">o(=·ェ·=)m</span>\r
-<span title="max">MIN■■■■■□□MAX</span>\r
-<span title="miehhh">(/ ̄ˇ ̄)/</span>\r
-<span title="mimi">(。人。) </span>\r
-<span title="mmm">mmm...f('︶︿︶)o</span>\r
-<span title="mmm">mmm.....</span>\r
-<span title="mojiezuo">Capricorn</span>\r
-<span title="mua">mua! (*╯3╰)</span>\r
-<span title="niao">--\(˙<>˙)/--</span>\r
-<span title="nie">~( ̄▽ ̄)~* </span>\r
-<span title="nu">(#‵′) </span>\r
-<span title="nu">(o#゜ 曲゜)o</span>\r
-<span title="nu">MIN■■■■■□□MAX(╯‵□′)╯︵┻━┻</span>\r
-<span title="nu">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)ノ</span>\r
-<span title="o">(⊙o⊙)?</span>\r
-<span title="ohno">Oh~ no!!!!</span>\r
-<span title="ohye">Oh yeah!\(^&^)/</span>\r
-<span title="ok">OK</span>\r
-<span title="paidui">λ…λλ…λ…入λλ…</span>\r
-<span title="pao">ε = = (づ′▽`)づ</span>\r
-<span title="pao">ε=ε=ε=(~ ̄▽ ̄)~</span>\r
-<span title="pao">ヾ(*′▽`*)ノ彡☆ノヽノヽノヽ</span>\r
-<span title="pdr">ヾ(′▽`* )ノ~</span>\r
-<span title="pia">( ̄ε(# ̄)☆╰╮o( ̄▽ ̄///) </span>\r
-<span title="pia">Pia!(o ‵-′)ノ”(ノ﹏<。)</span>\r
-<span title="piao">(~ ̄▽ ̄)~</span>\r
-<span title="piao">(~o ̄3 ̄)~</span>\r
-<span title="piao">.....((/- -)/</span>\r
-<span title="qiang">▄︻┻┳═一……</span>\r
-<span title="qie">(ˉ▽ ̄~) 切~~</span>\r
-<span title="qing">( ^ ^) _U~~</span>\r
-<span title="quan">(╬ ̄皿 ̄)=○#( ̄#)3 ̄)</span>\r
-<span title="quan">(Д゜(○=(゜ 皿゜)=○)゜Д゜)</span>\r
-<span title="shengqi"><(-︿-)></span>\r
-<span title="shy">shy~ o(*////▽////*)q</span>\r
-<span title="sigh">( ′ 3`) sigh~</span>\r
-<span title="S奥特曼">三三三三三三三三三4(o|o ) </span>\r
-<span title="S小孩!"> (o ‵-′)ノ”(ノ_<。)</span>\r
-<span title="t"><(  ̄^ ̄)(θ(θ☆( >_< </span>\r
-<span title="tanshou">╮( ╯ 3 ╰ )╭</span>\r
-<span title="tanshou">╮( ̄▽ ̄")╭ </span>\r
-<span title="tanshou">╮(╯-╰)╭</span>\r
-<span title="tanshou">ㄟ( ▔, ▔ )ㄏ</span>\r
-<span title="tao">ε=ε=┏( >_<)┛</span>\r
-<span title="tao">ε=ε=ε=┏(゜ロ゜;)┛ </span>\r
-<span title="tao">ε=ε=ε=ε=ヽ(* ̄o ̄)ノ</span>\r
-<span title="tat">o(≧∩≦)o</span>\r
-<span title="tat">o(TヘTo)</span>\r
-<span title="thx">☆⌒(*^-゜)v THX!!</span>\r
-<span title="toukui">|壁|_☆)</span>\r
-<span title="toukui">┬┴┤_·)</span>\r
-<span title="touxiang">n(→_←)┛</span>\r
-<span title="touxiang">o( >﹏<。)┛</span>\r
-<span title="tun">0^)吞!</span>\r
-<span title="tushetou">( ̄┰ ̄*)</span>\r
-<span title="wa">(PД`q。)·。'゜</span>\r
-<span title="wakkk"><( ̄▽ ̄)/</span>\r
-<span title="wc">∥wc∥ o(- -o) =з =з =з</span>\r
-<span title="weiguan">(﹁"﹁)</span>\r
-<span title="weiqu">╥﹏╥...</span>\r
-<span title="wo">σ(⌒ー⌒)</span>\r
-<span title="woniu">@/"</span>\r
-<span title="wow">wow~⊙o⊙</span>\r
-<span title="xiaoxin">ㄟ( ▔, ▔ )ㄏ</span>\r
-<span title="xiey">( ﹁ ﹁ ) ~→</span>\r
-<span title="xiey">( ̄. ̄)+</span>\r
-<span title="xiey">(﹁"﹁)</span>\r
-<span title="xiezi">...ψ(。。 )</span>\r
-<span title="xingfu">o(* ̄▽ ̄*)o</span>\r
-<span title="xiong">(* ̄(エ) ̄)</span>\r
-<span title="xiong">(+(工)+╬)</span>\r
-<span title="xiu">o(*////▽////*)q</span>\r
-<span title="xiu">p(# ̄▽ ̄#)o</span>\r
-<span title="xxoo">卐~%?…,# *'☆&℃$︿★?……</span>\r
-<span title="xxoo">╳╳○○</span>\r
-<span title="y">(* ̄︶ ̄)y</span>\r
-<span title="y">(* ̄▽ ̄)y</span>\r
-<span title="y">^_^)y</span>\r
-<span title="yanshen">━┳━ ━┳━</span>\r
-<span title="yanwenzi">ag108lau</span>\r
-<span title="yessir">Yes,sir! <( ̄O ̄)/</span>\r
-<span title="yiqi">╭(′▽`)╭(′▽`)╯</span>\r
-<span title="yiqi">ヽ( ̄ω ̄( ̄ω ̄〃)ゝ</span>\r
-<span title="yo">(^U^)ノ~YO </span>\r
-<span title="yu">>°)))>彡</span>\r
-<span title="yun">(((φ(◎ロ◎;)φ)))</span>\r
-<span title="zhaoxiang">Σ[ ◎ ]}</span>\r
-<span title="zhi"><( ̄ ﹌  ̄)@m</span>\r
-<span title="zhu">^(* ̄(oo) ̄)^</span>\r
-<span title="zhua">W( ̄_ ̄)W</span>\r
-<span title="zhuangqiang">┳G┻F┳W┫☆(ノ﹏<。)</span>\r
-<span title="zhuisha">--==≡≡〈〈《( / ̄皿 ̄)=O));>o<)/</span>\r
-<span title="zuomeng">ZZzz…(。-ω-)..ooO((【·:*:~夢~:*:·】))</span>\r
-<span title="哎哟哟……">( ̄y▽, ̄)╭ </span>\r
-<span title="安安啦~~~"> o(* ̄▽ ̄*)ブ</span>\r
-<span title="凹凸曼……">(o|o)</span>\r
-<span title="嗷~">ヾ(≧O≦)〃</span>\r
-<span title="奥特曼……">(o|o) </span>\r
-<span title="拜佛">(-人-) </span>\r
-<span title="拜托啦……">(^人^)</span>\r
-<span title="包在我身上!">ヾ(′▽`*)ゝ</span>\r
-<span title="包在我身上!">ヾ(′▽`*)ゝ</span>\r
-<span title="抱抱">━((*′ ▽`)爻(′▽`*))━!!!</span>\r
-<span title="抱抱">━((*′д`)爻(′д`*))━!!!!</span>\r
-<span title="抱抱~">\( ̄︶ ̄)/</span>\r
-<span title="抱抱~">\( ̄︶ ̄*\))</span>\r
-<span title="鼻毛">(′゜c_,゜` ) </span>\r
-<span title="鄙视你!">╭∩╮(︶︿︶)╭∩╮</span>\r
-<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>\r
-<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>\r
-<span title="壁">ノ ̄ー ̄)ノ ⌒ >┼○"☆||</span>\r
-<span title="便秘">o(′益`)o </span>\r
-<span title="辫子">§(* ̄▽ ̄*)§</span>\r
-<span title="表!"><( ̄3 ̄)> </span>\r
-<span title="别走啊~~">______λ......___丬</span>\r
-<span title="瘪嘴">(* ̄︿ ̄) </span>\r
-<span title="冰天雪地掩面泪奔……">(PД`q。)·。'゜</span>\r
-<span title="啵啵">(*  ̄3)(ε ̄ *) </span>\r
-<span title="不吃!">( *^-^)ρ(*╯^╰)</span>\r
-<span title="不懂">(@_@;)? </span>\r
-<span title="不满">(* ̄︿ ̄) </span>\r
-<span title="不是我干的">ㄟ( ▔, ▔ )ㄏ </span>\r
-<span title="不屑">( ̄_, ̄ )</span>\r
-<span title="擦眼泪……">(ノへ ̄、)</span>\r
-<span title="财神爷">(o′┏▽┓`o) </span>\r
-<span title="草泥马">( ·ェ·)(·ェ· )</span>\r
-<span title="蹭">(*≧︶≦))( ̄▽ ̄* )ゞ</span>\r
-<span title="蹭">( * ̄▽ ̄)((≧︶≦*) </span>\r
-<span title="叉腰"><)。(> </span>\r
-<span title="超强风扇吹">ε~( ~( ~ ( 卍 )\( ̄▽ ̄ \)</span>\r
-<span title="超远程BB枪!">(# ̄□ ̄)o―∈‥oo━━━━━━━☆ </span>\r
-<span title="車">●┻┓⌒ Σ┌┘車└┐=3 =3 =3</span>\r
-<span title="吃饭去鸟">.....(((((ヾ( o=^·ェ·)o ┏━┓</span>\r
-<span title="吃我一鞭!">( `0‘)ノ~~~~~~~~~ν</span>\r
-<span title="吃药">(。>︿<)_θ</span>\r
-<span title="冲出!!">___*\(  ̄皿 ̄)/#____</span>\r
-<span title="抽!!">( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)</span>\r
-<span title="抽泣">(ノへ ̄、)</span>\r
-<span title="抽泣">(ノへ ̄、)</span>\r
-<span title="臭蚊子!">Pia!(o ‵-′)ノ” </span>\r
-<span title="穿墙过去!">ε=ε┣G┻F┳ε=ヽ(* ̄▽ ̄)ノ┻W┫</span>\r
-<span title="戳">→)╥﹏╥) </span>\r
-<span title="赐予你力量!">( * ̄▽ ̄)o ─═≡※:☆▆▅▄▃▂_</span>\r
-<span title="打呵欠">(_ _)( - . - )(~O~) ……( - . - ) </span>\r
-<span title="大鼻子">(′台` ) </span>\r
-<span title="呆滞"> ━┳━ ━┳━</span>\r
-<span title="淡定">━━( ̄ー ̄*|||━━</span>\r
-<span title="当然!"><(ˉ^ˉ)></span>\r
-<span title="刀疤">(-_-メ)</span>\r
-<span title="等等我…我……我…………">...(* ̄0 ̄)ノ</span>\r
-<span title="低落"> (#`-_ゝ-)</span>\r
-<span title="低头">(。﹏。) </span>\r
-<span title="低头">(。_。) </span>\r
-<span title="点头">( ̄ー ̄(_ _( ̄ー ̄(_ _ </span>\r
-<span title="跌">(┬_┬)↘ </span>\r
-<span title="顶!">d=====( ̄▽ ̄*)b </span>\r
-<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>\r
-<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>\r
-<span title="抖">o((⊙﹏⊙))o. </span>\r
-<span title="嘟嘴">o( ̄ε ̄*) </span>\r
-<span title="嘟嘴">(○` 3′○) </span>\r
-<span title="对不起~"> <(_ _)></span>\r
-<span title="呃~被发现了......">(ˉ▽ˉ;)</span>\r
-<span title="呃~我……">σ(-_-メ)</span>\r
-<span title="翻桌!">(╯‵□′)╯︵┻━┻</span>\r
-<span title="防御!">(((\( ̄一 ̄)/)))</span>\r
-<span title="放我出去~~~"> ||Φ|(|T|Д|T|)|Φ|| </span>\r
-<span title="飞吻"> (* ̄3 ̄)╭</span>\r
-<span title="分裂">>( ̄▽ ̄ =  ̄︿ ̄)<</span>\r
-<span title="风魔法!"> (/-_-)/ξ ξ ξ ξ ξ ξ (+_+ /)/~~~</span>\r
-<span title="去去去~">乀ˉεˉ乀...</span>\r
-<span title="扶眼镜">(-@y@) </span>\r
-<span title="扶眼镜">(-@y@) </span>\r
-<span title="复活!">...:.;::..;::: .:.;::….;: ̄)…:.;:□ ̄)( ̄□ ̄*)</span>\r
-<span title="嘎~嘎~嘎~">.<{=....</span>\r
-<span title="干杯">( ̄▽ ̄)~■□~( ̄▽ ̄)</span>\r
-<span title="干杯!">~( ̄▽ ̄)~* </span>\r
-<span title="感动!">o(*≧▽≦*)m</span>\r
-<span title="高~实在是高!">(* ̄▽)u┌┐ d(▽ ̄*)</span>\r
-<span title="告状">(′д`σ)σ </span>\r
-<span title="跟你说厚~">╰( ̄▽ ̄)╭</span>\r
-<span title="狗狗">U·ェ·*U </span>\r
-<span title="狗狗">U·ェ·U </span>\r
-<span title="鼓掌">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>\r
-<span title="鼓掌">└( ̄  ̄└)(┘ ̄  ̄)┘</span>\r
-<span title="乖~">o(*^@^*)o</span>\r
-<span title="滚来滚去">……~(~o ̄▽ ̄)~o 。。。……o~(_△_o~) ~。。。</span>\r
-<span title="含泪挥手帕">(ToT)/~~~</span>\r
-<span title="好~~">o(*^▽^*)o </span>\r
-<span title="好吧">╮╯-╰╭"</span>\r
-<span title="好苦~">( >﹏<)</span>\r
-<span title="好香~~">(╯▽╰ )</span>\r
-<span title="好主意!">(o゜▽゜)o☆</span>\r
-<span title="喝西北风">( ′Д`)彡</span>\r
-<span title="河马">( ̄。。 ̄)</span>\r
-<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>\r
-<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>\r
-<span title="呼~幸好幸好……">ε=( ̄。 ̄;A</span>\r
-<span title="呼唤">(/0 ̄)o </span>\r
-<span title="坏人……"> ~( TロT)σ</span>\r
-<span title="幻影术!">((( ̄( ̄( ̄( ̄ー ̄) ̄) ̄) ̄))) </span>\r
-<span title="挥手帕">(@^^)/~~~</span>\r
-<span title="火箭筒,发射!">(* ̄皿 ̄)=Σ口>=Σ口>=Σ口></span>\r
-<span title="获胜者是……">ヾ( ̄ー ̄)X(^▽^)ゞ</span>\r
-<span title="击掌">(〃 ̄︶ ̄)人( ̄︶ ̄〃)</span>\r
-<span title="加油">o^^oo^^o</span>\r
-<span title="交通志愿老大妈指挥ing..."> (o^~^)尸"</span>\r
-<span title="金盾!">||┣(—_\) </span>\r
-<span title="就你!"><( ̄ ﹌  ̄)@m</span>\r
-<span title="就你好了~"> (@゜▽゜)</span>\r
-<span title="就是他!"> (@`д′)</span>\r
-<span title="举手">o(*^▽^*)┛</span>\r
-<span title="举手投降">┗( T﹏T )┛</span>\r
-<span title="嚼!">( ̄~ ̄)</span>\r
-<span title="卡拉OK"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)′</span>\r
-<span title="看">(°ー°〃) </span>\r
-<span title="看好你哦!">(@^0^)</span>\r
-<span title="看我忍者镖!">( ‵▽′)ノ'卍卍卍卍卍卍 Σ(゜д゜;)</span>\r
-<span title="靠!什么东西?!"> ( `д′)</span>\r
-<span title="咳咳">><</span>\r
-<span title="苦恼"> ( -'`-; )</span>\r
-<span title="快使用双截棍,">┗(`o′)┓哼┏(`○′)┛哼┏(`o′)┓哈┗(`O′)┛兮!!</span>\r
-<span title="困,揉眼睛……">(o-ωq)).oO</span>\r
-<span title="啦啦啦">...φ(0 ̄*)_φ(* ̄0 ̄)></span>\r
-<span title="来啦~">(~o ̄▽ ̄)~o ~。。。</span>\r
-<span title="来人呐~">(o ;′Д`)ノ゛</span>\r
-<span title="冷笑">(  ̄ー ̄)</span>\r
-<span title="脸红掩面">(*/ω\*)</span>\r
-<span title="脸红掩面">(*/ω\*)</span>\r
-<span title="两罐纸星星">(*ˉ﹃ˉ)_☆☆</span>\r
-<span title="列队">(* ̄^ ̄(* ̄^ ̄(* ̄^ ̄)</span>\r
-<span title="铃铃铃">☆{{{Д}}} ☆!! </span>\r
-<span title="毛毛虫">(· ·)nnn </span>\r
-<span title="没办法~">╮( ̄▽ ̄")╭</span>\r
-<span title="没人在哦?">||o(*°ω°*)o|Ю </span>\r
-<span title="媚眼">ο(=·ω<=)ρ⌒☆</span>\r
-<span title="秘密">(一-一) </span>\r
-<span title="喵~">o( =∩ω∩= )m </span>\r
-<span title="喵~">>▽<</span>\r
-<span title="咩哈哈哈哈……"><(* ̄▽ ̄*)/</span>\r
-<span title="蔑视">( ̄_, ̄ )</span>\r
-<span title="命苦...">ε(┬┬﹏┬┬)3</span>\r
-<span title="摸摸头">(~ ̄▽ ̄)ノ</span>\r
-<span title="摸摸头">╰( ̄ω ̄o) </span>\r
-<span title="膜拜">_| ̄|○ → _|\○_ → _/\○_ → ____○_</span>\r
-<span title="墓">┏┛墓┗┓...(((m -__-)m</span>\r
-<span title="哪~里跑?!">(/// ̄皿 ̄)○~</span>\r
-<span title="那边那个">(﹁ ﹁ )σ</span>\r
-<span title="嗯!">ヾ(≧へ≦)〃</span>\r
-<span title="嗯!">o( ̄︶ ̄)n</span>\r
-<span title="嗯~">o(* ̄▽ ̄*)o</span>\r
-<span title="你!!">Σ(  ̄д ̄;)</span>\r
-<span title="你回来啦~~">ヾ(^▽^*)))</span>\r
-<span title="你你你……"> ~( TロT)σ</span>\r
-<span title="你你你……"> ~( TロT)σ</span>\r
-<span title="溺水">゜゜┌┴o゜゜゜゜°</span>\r
-<span title="念力~"> ( -人-)···-~=~≡~≡ ((+o+)))</span>\r
-<span title="念咒">((( (-h-) )))</span>\r
-<span title="念咒">……(((\( ̄一 ̄)/)))</span>\r
-<span title="捏耳朵!"><( ‵□′)>───Cε(┬﹏┬)3</span>\r
-<span title="怒">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)/</span>\r
-<span title="哦~">_( ̄0 ̄)_</span>\r
-<span title="啪叽~摔一跟头……">((o_ _)'彡☆</span>\r
-<span title="怕怕">━((*′д`)爻(′д`*))━!!!!</span>\r
-<span title="拍手">└( ̄  ̄└)(┘ ̄  ̄)┘</span>\r
-<span title="拍手拍手">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>\r
-<span title="拍桌狂笑!">o(*≧▽≦)ツ┏━┓</span>\r
-<span title="飘飘然……">︿( ̄︶ ̄)︿</span>\r
-<span title="乒乓球">( ^o)ρ┳┻┳°σ(o^ ) </span>\r
-<span title="期待"> (☆▽☆)</span>\r
-<span title="起床">(o ̄Д ̄)<起床! ※=○☆(__*)Zzz</span>\r
-<span title="起床啦!">( *′д)/o(_ _)ozzZZ…</span>\r
-<span title="切~~">( ﹁ ﹁ ) ~~~</span>\r
-<span title="亲亲">o(* ̄3 ̄)o</span>\r
-<span title="亲亲">(*  ̄)( ̄▽ ̄*)ゞ</span>\r
-<span title="去去去~">(づ ̄ 3 ̄)づ...</span>\r
-<span title="去下厕厕……">∥WC||_·)╯</span>\r
-<span title="忍术~隐!"> ( ̄人 ̄)( ̄人:.;:…( ̄...:.;::..;::: .:;.…::;.:..:;.:...</span>\r
-<span title="撒花!">( ̄▽ ̄)o∠※PAN!=.:*:'☆.:*:'★':* </span>\r
-<span title="撒花!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>\r
-<span title="散弹发射!!">▄︻┻┳═一∵∴∷∶∵ (∵_,∵)>>>></span>\r
-<span title="杀虫剂!">( ▼▼)/鹵〈 巛巛巛 ( ◎_x)/</span>\r
-<span title="闪人">(* ̄▽ ̄)( ̄▽:;.…::;.:.:::;..::;.:... </span>\r
-<span title="伤心">(;′⌒`)</span>\r
-<span title="蛇拳">z(-_-z)).....((s-_-)s</span>\r
-<span title="射箭">(  ̄ー ̄)——)-=======>-->></span>\r
-<span title="神啊~">\( ̄0 ̄)/</span>\r
-<span title="失落">(。_。) </span>\r
-<span title="石化">━━∑( ̄□ ̄*|||━━化</span>\r
-<span title="石化ing~">(ˉ▽ˉ;)...</span>\r
-<span title="视力表">┫♀旦 ̄)σ(呃……)</span>\r
-<span title="是不是你?!">(σ`д′)σ</span>\r
-<span title="是不是你?!">(σ`д′)σ</span>\r
-<span title="手榴弹!">σ~ (`′メ </span>\r
-<span title="手指戳戳">(~ ̄▽ ̄)→))* ̄▽ ̄*)o </span>\r
-<span title="手肘戳戳">o( ̄▽ ̄*)ゞ)) ̄▽ ̄*)o </span>\r
-<span title="衰">(′д` )…彡…彡</span>\r
-<span title="死亡中">(:D)┼─┤</span>\r
-<span title="太好笑了!!">……o((≧▽≦o)</span>\r
-<span title="太可怕了">ヽ(*。>Д<)o゜</span>\r
-<span title="逃命啊~~">\("▔□▔)/\("▔□▔)/ </span>\r
-<span title="陶醉">( *︾▽︾)</span>\r
-<span title="讨厌啦~">(ノω<。)ノ))☆.。</span>\r
-<span title="天旋地转">ヾ( )ノ゛ヾ( °д)ノ゛ヾ(°д°)ノ゛ヾ(д° )ノ゛ヾ( )ノ゛</span>\r
-<span title="天助我也~"> ヾ(*′▽`*)彡</span>\r
-<span title="挑衅"><(* ̄ー ̄)ゞ来呀~</span>\r
-<span title="挑衅"><(* ̄ー ̄)ゞ来啊~</span>\r
-<span title="偷看">(/ω\*)……… (/ω·\*) </span>\r
-<span title="偷看">(/ω·\*) </span>\r
-<span title="偷拍 ">Σ[ ◎ ]}ー′)</span>\r
-<span title="怒">凸艹皿艹</span>\r
-<span title="靠">凸゜皿゜メ</span>\r
-<span title="吐">( >ρ < ”)</span>\r
-<span title="推推~起床啦!">(o ̄ω ̄)○))o(__*)Zzz</span>\r
-<span title="拖走">ヽ(゜▽゜ )-C<(/;◇;)/~</span>\r
-<span title="哇卡卡卡卡卡……">o((≧▽≦o) 太好笑了!!</span>\r
-<span title="哇咧!">Σ(⊙▽⊙"a...</span>\r
-<span title="挖鼻屎"> (* ̄rǒ ̄)</span>\r
-<span title="万岁!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>\r
-<span title="围观!">(← ← )</span>\r
-<span title="围观!">( → →) </span>\r
-<span title="畏罪自杀…">…〒_〒…‵o′-一┳═┻︻▄</span>\r
-<span title="喂!">(#`O′)</span>\r
-<span title="喂饭">( *^-^)ρ(^0^* )</span>\r
-<span title="吻别">(* ̄;( ̄ *)</span>\r
-<span title="我?">σ(· ·?)</span>\r
-<span title="我不看……">(/▽\)</span>\r
-<span title="我错了……">(。﹏。*)</span>\r
-<span title="我回来啦~">||ヽ(* ̄▽ ̄*)ノミ|Ю</span>\r
-<span title="我来了~">(~ ̄▽ ̄)~</span>\r
-<span title="我忍!">o(-"-;) </span>\r
-<span title="我闪!">|(·_·) |·_·) |_·) |·) | )</span>\r
-<span title="握拳!">o( ̄ヘ ̄o* )</span>\r
-<span title="握拳!">o( ̄ヘ ̄o#)</span>\r
-<span title="呜呜呜……">( >﹏<。)~</span>\r
-<span title="无敌!">↑↑↓↓←→←→BA...┗( -o-)┛</span>\r
-<span title="无敌弹簧拳!">( ‵Д′)=○))~~~~~~Ю))>o<)/ </span>\r
-<span title="无敌幻影脚!">ヽ(ヽ `д′)ヽ`д′)ヽ`д′)┌┛┌┛┌┛★)`з゜)y</span>\r
-<span title="无敌捏脸功!"><( ‵□′)───C<─___-)|| </span>\r
-<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o </span>\r
-<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o</span>\r
-<span title="无敌影分身!">((≧(≧▽(≧▽≦(≧▽≦)≧▽≦)▽≦)≦))) </span>\r
-<span title="无力扶墙..."> ( _ _)ノ|壁</span>\r
-<span title="无奈">╮(╯-╰)╭ </span>\r
-<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>\r
-<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>\r
-<span title="享受">(╯▽╰ ) </span>\r
-<span title="消失">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>\r
-<span title="小新"><( ̄︶ ̄)↗</span>\r
-<span title="邪恶">( ‵▽′)ψ</span>\r
-<span title="谢啦!!">☆⌒(*^-゜)v </span>\r
-<span title="心神不宁"...">(゜゜ )(。。)(゜゜ )(。。)</span>\r
-<span title="欣慰">( ╯▽╰)</span>\r
-<span title="要">不>( ̄ε ̄ =  ̄3 ̄)<</span>\r
-<span title="噎死">( *⊙~⊙) </span>\r
-<span title="噎住">( *⊙~⊙) </span>\r
-<span title="隐身!">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>\r
-<span title="鹰钩鼻">( ̄ム ̄) </span>\r
-<span title="哟西!">(9 ̄^ ̄)9</span>\r
-<span title="有了!">(o゜▽゜)o☆</span>\r
-<span title="有人吗?">||o(*°▽°*)o|Ю </span>\r
-<span title="御风_凌"></span>\r
-<span title="怨.念....">o(一︿一+)o</span>\r
-<span title="运动">╔囧╗╔囧╝╚囧╝╚囧╗</span>\r
-<span title="晕!">@o@"</span>\r
-<span title="糟糕!">X﹏X</span>\r
-<span title="早安呀~~~"> o(* ̄▽ ̄*)ブ</span>\r
-<span title="早点回来哦~">(~ ̄(OO) ̄)ブ</span>\r
-<span title="炸弹!">(╯‵□′)╯···*~●</span>\r
-<span title="斩!!">ˋ( ° ▽、° ) (o( ̄▽ ̄///</span>\r
-<span title="涨">( ̄︶ ̄)↗</span>\r
-<span title="这个……呃~~">-______-"</span>\r
-<span title="真哒?!"> o(〃'▽'〃)o</span>\r
-<span title="真空波动拳!">( `o′){ ···-=≡))</span>\r
-<span title="真空波动拳!">( `o′){ ···-=≡))</span>\r
-<span title="振奋">(o>ε(o>u(≧∩≦) </span>\r
-<span title="振作!">━━(o_ _)o━━(o―_―)o━━(9 ̄ー ̄)9</span>\r
-<span title="痣长毛">( ゜,_ゝ゜) </span>\r
-<span title="皱眉">(-"-)</span>\r
-<span title="抓狂">o((>ω< ))o</span>\r
-<span title="抓狂">o(>@<)o</span>\r
-<span title="足球">( · ·)L☆ .....○ 冂 </span>\r
-<span title="醉拳">ヨロ (*~▽~)ノ ヨロ ヽ(~▽~*)ヨロ (*~▽~)―〇 ☆ バシ ))>口<)</span>\r
-<p style="display: block; float: left; margin-top: 25px; margin-bottom: -40px;">© 2010 @ag108lau<br>Thanks @OnlyTiny<br />\r
-Last Update: 2010-03-12\r
-</p>
\ No newline at end of file
-<?php\r
- include_once('../lib/twitese.php');\r
- function getTrends($format = 'json'){\r
- if($format !== 'json' && $format !== 'xml'){\r
- return false;\r
- }\r
- $url = 'http://search.twitter.com/trends.'.$format;\r
- $response = objectifyJson(processCurl($url));\r
- return $response;\r
- }\r
-\r
- function outputTrends($format = 'json'){\r
- $trends = getTrends($format);\r
- if(!isset($trends->trends)){\r
- return false;\r
- }\r
- $html = '';\r
- foreach ($trends->trends as $trend) {\r
- $li = '\r
- <li>\r
- <a href="search.php?q='.rawurlencode($trend->name).'">'.$trend->name.'</a>\r
- </li>\r
- ';\r
- $html .= $li;\r
- }\r
-\r
- return $html;\r
- }\r
-?>\r
+<?php
+ include_once('../lib/twitese.php');
+ function getTrends($format = 'json'){
+ if($format !== 'json' && $format !== 'xml'){
+ return false;
+ }
+ $url = 'http://search.twitter.com/trends.'.$format;
+ $response = objectifyJson(processCurl($url));
+ return $response;
+ }
+
+ function outputTrends($format = 'json'){
+ $trends = getTrends($format);
+ if(!isset($trends->trends)){
+ return false;
+ }
+ $html = '';
+ foreach ($trends->trends as $trend) {
+ $li = '
+ <li>
+ <a href="search.php?q='.rawurlencode($trend->name).'">'.$trend->name.'</a>
+ </li>
+ ';
+ $html .= $li;
+ }
+
+ return $html;
+ }
+?>
}
echo '<div class="clear"></div>';
- $p = -1;
switch ($type) {
case 'blocks':
$userlist = $t->blockingList($id, $p);
- $next_page = $userlist->next_cursor;
- $previous_page = $userlist->previous_cursor;
+ $next_page = $userlist->next_cursor_str;
+ $previous_page = $userlist->previous_cursor_str;
$userlist = $userlist->users;
break;
case 'friends':
$userlist = $t->friends($id, $p);
- $next_page = $userlist->next_cursor;
- $previous_page = $userlist->previous_cursor;
+ $next_page = $userlist->next_cursor_str;
+ $previous_page = $userlist->previous_cursor_str;
$userlist = $userlist->users;
break;
case 'followers':
$userlist = $t->followers($id, $p);
- $next_page = $userlist->next_cursor;
- $previous_page = $userlist->previous_cursor;
+ $next_page = $userlist->next_cursor_str;
+ $previous_page = $userlist->previous_cursor_str;
$userlist = $userlist->users;
break;
case 'list_members':
$userlist = $t->followers($id, $p);
break;
}
- $empty = count($userlist) == 0? true: false;
+ $empty = count($userlist) == 0 ? true : false;
if ($empty) {
echo "<div id=\"empty\">No user to display.</div>";
} else {
}
$output .= "</ol><div id=\"pagination\">";
if ($type == 'list_members' || $type == 'list_followers' || $type == 'blocks') {
- if ($prelist != 0) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"list_members.php?id=$id&c=$prelist\">Back</a>";
+ if ($prelist != 0) $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"list_members.php?id=$id&c=$prelist\">Back</a>";
if ($nextlist != 0) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"list_members.php?id=$id&c=$nextlist\">Next</a>";
} else {
if ($id) {
- if ($p >0)
- $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"$type.php?id=$id&p=" . $previous_page . "\">Back</a>";
- if ($next_page != 0)
+ if ($previous_page !== "0")
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"$type.php?id=$id&p=" . $previous_page . "\">Back</a>";
+ if ($next_page !== "0")
$output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"$type.php?id=$id&p=" . $next_page . "\">Next</a>";
} else {
- if ($p >0)
- $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"$type.php?p=" . $previous_page . "\">Back</a>";
- if ($next_page != 0)
+ if ($previous_page !== "0")
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"$type.php?p=" . $previous_page . "\">Back</a>";
+ if ($next_page !== "0")
$output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"$type.php?p=" . $next_page . "\">Next</a>";
}
}
<?php
include('inc/sentForm.php');
- $p = 1;
- if (isset($_GET['p']))
- {
- $p = (int) $_GET['p'];
- if ($p <= 0) $p = 1;
- }
+ $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+ $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
- $statuses = $t->homeTimeline($p);
+ $statuses = $t->homeTimeline($since_id, $max_id);
if ($statuses == false)
{
header('location: error.php');exit();
}
$count = count($statuses);
- $empty = $count == 0 ? true: false;
+ $empty = $count == 0 ? true : false;
if ($empty)
{
echo "<div id=\"empty\">No tweet to display.</div>";
- }
- else
- {
+ } else if ($t->http_code == 429) {
+ echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+ } else {
$output = '<ol class="timeline" id="allTimeline">';
include('lib/timeline_format.php');
$maxid = isset($_COOKIE['maxid']) ? $_COOKIE['maxid'] : '';
+ $firstid = false;
+ $lastid = false;
foreach ($statuses as $status) {
+ if (!$firstid) $firstid = $status->id_str;
+ $lastid = $status->id_str;
if($maxid == '' || $p == 1 || strcmp($status->id_str,$maxid) < 0) {
if (isset($status->retweeted_status)) {
$output .= format_retweet($status);
}
}
}
+ $lastid = bcsub($lastid, "1");
$output .= "</ol><div id=\"pagination\">";
$time = $_SERVER['REQUEST_TIME']+3600;
setcookie('maxid',$statuses[$count-1]->id_str,$time,'/');
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"index.php?p=" . ($p-1) . "\">Back</a>";
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"index.php?p=" . ($p+1) . "\">Next</a>";
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"index.php?since_id=" . $firstid . "\">Back</a>";
+ $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"index.php?max_id=" . $lastid . "\">Next</a>";
+ $output .= "</div>";
echo $output;
}
?>
</div>
-</div>
<?php
include ('inc/sidebar.php');
include ('inc/footer.php');
+++ /dev/null
-jQuery.extend({\r
- createUploadIframe: function (id, uri) {\r
- //create frame\r
- var frameId = 'jUploadFrame' + id;\r
- if (window.ActiveXObject) {\r
- var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');\r
- if (typeof uri == 'boolean') {\r
- io.src = 'javascript:false';\r
- }\r
- else if (typeof uri == 'string') {\r
- io.src = uri;\r
- }\r
- }\r
- else {\r
- var io = document.createElement('iframe');\r
- io.id = frameId;\r
- io.name = frameId;\r
- }\r
- io.style.position = 'absolute';\r
- io.style.top = '-1000px';\r
- io.style.left = '-1000px';\r
- document.body.appendChild(io);\r
- return io\r
- },\r
- createUploadForm: function (id, fileElementId) {\r
- //create form \r
- var formId = 'jUploadForm' + id;\r
- var fileId = 'jUploadFile' + id;\r
- var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');\r
- var oldElement = $('#' + fileElementId);\r
- var newElement = $(oldElement).clone();\r
- $(oldElement).attr('id', fileId);\r
- $(oldElement).before(newElement);\r
- $(oldElement).appendTo(form);\r
- //set attributes\r
- $(form).css('position', 'absolute');\r
- $(form).css('top', '-1200px');\r
- $(form).css('left', '-1200px');\r
- $(form).appendTo('body');\r
- return form;\r
- },\r
- ajaxFileUpload: function (s) {\r
- // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout \r
- s = jQuery.extend({}, jQuery.ajaxSettings, s);\r
- var id = new Date().getTime()\r
- var form = jQuery.createUploadForm(id, s.fileElementId);\r
- var io = jQuery.createUploadIframe(id, s.secureuri);\r
- var frameId = 'jUploadFrame' + id;\r
- var formId = 'jUploadForm' + id;\r
- // Watch for a new set of requests\r
- if (s.global && !jQuery.active++) {\r
- jQuery.event.trigger("ajaxStart");\r
- }\r
- var requestDone = false;\r
- // Create the request object\r
- var xml = {}\r
- if (s.global) jQuery.event.trigger("ajaxSend", [xml, s]);\r
- // Wait for a response to come back\r
- var uploadCallback = function (isTimeout) {\r
- var io = document.getElementById(frameId);\r
- try {\r
- if (io.contentWindow) {\r
- xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;\r
- xml.responseXML = io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument : io.contentWindow.document;\r
- } else if (io.contentDocument) {\r
- xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : null;\r
- xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument : io.contentDocument.document;\r
- }\r
- } catch (e) {\r
- jQuery.handleError(s, xml, null, e);\r
- }\r
- if (xml || isTimeout == "timeout") {\r
- requestDone = true;\r
- var status;\r
- try {\r
- status = isTimeout != "timeout" ? "success" : "error";\r
- // Make sure that the request was successful or notmodified\r
- if (status != "error") {\r
- // process the data (runs the xml through httpData regardless of callback)\r
- var data = jQuery.uploadHttpData(xml, s.dataType);\r
- // If a local callback was specified, fire it and pass it the data\r
- if (s.success) s.success(data, status);\r
- // Fire the global callback\r
- if (s.global) jQuery.event.trigger("ajaxSuccess", [xml, s]);\r
- } else jQuery.handleError(s, xml, status);\r
- } catch (e) {\r
- status = "error";\r
- jQuery.handleError(s, xml, status, e);\r
- }\r
- // The request was completed\r
- if (s.global) jQuery.event.trigger("ajaxComplete", [xml, s]);\r
- // Handle the global AJAX counter\r
- if (s.global && !--jQuery.active) jQuery.event.trigger("ajaxStop");\r
- // Process result\r
- if (s.complete) s.complete(xml, status);\r
- jQuery(io).unbind()\r
- setTimeout(function () {\r
- try {\r
- $(io).remove();\r
- $(form).remove();\r
- } catch (e) {\r
- jQuery.handleError(s, xml, null, e);\r
- }\r
- }, 100)\r
- xml = null\r
- }\r
- }\r
- // Timeout checker\r
- if (s.timeout > 0) {\r
- setTimeout(function () {\r
- // Check to see if the request is still happening\r
- if (!requestDone) uploadCallback("timeout");\r
- }, s.timeout);\r
- }\r
- try {\r
- // var io = $('#' + frameId);\r
- var form = $('#' + formId);\r
- $(form).attr('action', s.url);\r
- $(form).attr('method', 'POST');\r
- $(form).attr('target', frameId);\r
- if (form.encoding) {\r
- form.encoding = 'multipart/form-data';\r
- }\r
- else {\r
- form.enctype = 'multipart/form-data';\r
- }\r
- $(form).submit();\r
- } catch (e) {\r
- jQuery.handleError(s, xml, null, e);\r
- }\r
- if (window.attachEvent) {\r
- document.getElementById(frameId).attachEvent('onload', uploadCallback);\r
- }\r
- else {\r
- document.getElementById(frameId).addEventListener('load', uploadCallback, false);\r
- }\r
- return {\r
- abort: function () {}\r
- };\r
- },\r
- uploadHttpData: function (r, type) {\r
- var data = !type;\r
- data = type == "xml" || data ? r.responseXML : r.responseText;\r
- // If the type is "script", eval it in global context\r
- if (type == "script") jQuery.globalEval(data);\r
- // Get the JavaScript object, if JSON is used.\r
- if (type == "json") eval("data = " + data);\r
- // evaluate scripts within html\r
- if (type == "html") jQuery("<div>").html(data).evalScripts();\r
- return data;\r
- }\r
-})
\ No newline at end of file
-$(function(){\r
- formFunc();\r
- $("ol.timeline").live("click", function(e) {\r
- var $this = $(e.target);\r
- var type = $this.attr('class');\r
- switch(type) {\r
- case 'rt_btn':\r
- e.preventDefault();\r
- onRT($this);\r
- break;\r
- case 'retw_btn':\r
- e.preventDefault();\r
- onNwRT($this);\r
- break;\r
- case 'replie_btn':\r
- e.preventDefault();\r
- onReplie($this,e);\r
- break;\r
- case 'favor_btn':\r
- e.preventDefault();\r
- onFavor($this);\r
- break;\r
- case 'unfav_btn':\r
- e.preventDefault();\r
- UnFavor($this);\r
- break;\r
- case 'delete_btn':\r
- e.preventDefault();\r
- onDelete($this);\r
- break;\r
- case 'rt_undo':\r
- case 'unrt_btn':\r
- e.preventDefault();\r
- onUndoRt($this);\r
- break;\r
- case 'msg_replie_btn':\r
- e.preventDefault();\r
- onReplieDM($this);\r
- break;\r
- case 'msg_delete_btn':\r
- e.preventDefault();\r
- onDeleteMsg($this);\r
- break;\r
- }\r
- });\r
- $("#submit_btn").click(function(e){\r
- updateStatus();\r
- e.preventDefault();\r
- });\r
- });\r
+$(function(){
+ formFunc();
+ $("ol.timeline").live("click", function(e) {
+ var $this = $(e.target);
+ var type = $this.attr('class');
+ switch(type) {
+ case 'rt_btn':
+ e.preventDefault();
+ onRT($this);
+ break;
+ case 'retw_btn':
+ e.preventDefault();
+ onNwRT($this);
+ break;
+ case 'replie_btn':
+ e.preventDefault();
+ onReplie($this,e);
+ break;
+ case 'favor_btn':
+ e.preventDefault();
+ onFavor($this);
+ break;
+ case 'unfav_btn':
+ e.preventDefault();
+ UnFavor($this);
+ break;
+ case 'delete_btn':
+ e.preventDefault();
+ onDelete($this);
+ break;
+ case 'rt_undo':
+ case 'unrt_btn':
+ e.preventDefault();
+ onUndoRt($this);
+ break;
+ case 'msg_replie_btn':
+ e.preventDefault();
+ onReplieDM($this);
+ break;
+ case 'msg_delete_btn':
+ e.preventDefault();
+ onDeleteMsg($this);
+ break;
+ }
+ });
+ $("#submit_btn").click(function(e){
+ updateStatus();
+ e.preventDefault();
+ });
+ });
+++ /dev/null
-/**\r
- *\r
- * Color picker\r
- * Author: Stefan Petre www.eyecon.ro\r
- * \r
- * Dual licensed under the MIT and GPL licenses\r
- * \r
- */\r
-(function ($) {\r
- var ColorPicker = function () {\r
- var\r
- ids = {},\r
- inAction,\r
- charMin = 65,\r
- visible,\r
- tpl = '<div class="colorpicker"><div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"><button type="button" name="submit">Done</button></div></div>',\r
- defaults = {\r
- eventName: 'click',\r
- onShow: function () {},\r
- onBeforeShow: function(){},\r
- onHide: function () {},\r
- onChange: function () {},\r
- onSubmit: function () {},\r
- color: 'ff0000',\r
- livePreview: true,\r
- flat: false\r
- },\r
- fillRGBFields = function (hsb, cal) {\r
- var rgb = HSBToRGB(hsb);\r
- $(cal).data('colorpicker').fields\r
- .eq(1).val(rgb.r).end()\r
- .eq(2).val(rgb.g).end()\r
- .eq(3).val(rgb.b).end();\r
- },\r
- fillHSBFields = function (hsb, cal) {\r
- $(cal).data('colorpicker').fields\r
- .eq(4).val(hsb.h).end()\r
- .eq(5).val(hsb.s).end()\r
- .eq(6).val(hsb.b).end();\r
- },\r
- fillHexFields = function (hsb, cal) {\r
- $(cal).data('colorpicker').fields\r
- .eq(0).val(HSBToHex(hsb)).end();\r
- },\r
- setSelector = function (hsb, cal) {\r
- $(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100}));\r
- $(cal).data('colorpicker').selectorIndic.css({\r
- left: parseInt(150 * hsb.s/100, 10),\r
- top: parseInt(150 * (100-hsb.b)/100, 10)\r
- });\r
- },\r
- setHue = function (hsb, cal) {\r
- $(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10));\r
- },\r
- setCurrentColor = function (hsb, cal) {\r
- $(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb));\r
- },\r
- setNewColor = function (hsb, cal) {\r
- $(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb));\r
- },\r
- keyDown = function (ev) {\r
- var pressedKey = ev.charCode || ev.keyCode || -1;\r
- if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) {\r
- return false;\r
- }\r
- var cal = $(this).parent().parent();\r
- if (cal.data('colorpicker').livePreview === true) {\r
- change.apply(this);\r
- }\r
- },\r
- change = function (ev) {\r
- var cal = $(this).parent().parent(), col;\r
- if (this.parentNode.className.indexOf('_hex') > 0) {\r
- cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value));\r
- } else if (this.parentNode.className.indexOf('_hsb') > 0) {\r
- cal.data('colorpicker').color = col = fixHSB({\r
- h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10),\r
- s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10),\r
- b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10)\r
- });\r
- } else {\r
- cal.data('colorpicker').color = col = RGBToHSB(fixRGB({\r
- r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10),\r
- g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10),\r
- b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10)\r
- }));\r
- }\r
- if (ev) {\r
- fillRGBFields(col, cal.get(0));\r
- fillHexFields(col, cal.get(0));\r
- fillHSBFields(col, cal.get(0));\r
- }\r
- setSelector(col, cal.get(0));\r
- setHue(col, cal.get(0));\r
- setNewColor(col, cal.get(0));\r
- cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]);\r
- },\r
- blur = function (ev) {\r
- var cal = $(this).parent().parent();\r
- cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus');\r
- },\r
- focus = function () {\r
- charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65;\r
- $(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus');\r
- $(this).parent().addClass('colorpicker_focus');\r
- },\r
- downIncrement = function (ev) {\r
- var field = $(this).parent().find('input').focus();\r
- var current = {\r
- el: $(this).parent().addClass('colorpicker_slider'),\r
- max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255),\r
- y: ev.pageY,\r
- field: field,\r
- val: parseInt(field.val(), 10),\r
- preview: $(this).parent().parent().data('colorpicker').livePreview \r
- };\r
- $(document).bind('mouseup', current, upIncrement);\r
- $(document).bind('mousemove', current, moveIncrement);\r
- },\r
- moveIncrement = function (ev) {\r
- ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10))));\r
- if (ev.data.preview) {\r
- change.apply(ev.data.field.get(0), [true]);\r
- }\r
- return false;\r
- },\r
- upIncrement = function (ev) {\r
- change.apply(ev.data.field.get(0), [true]);\r
- ev.data.el.removeClass('colorpicker_slider').find('input').focus();\r
- $(document).unbind('mouseup', upIncrement);\r
- $(document).unbind('mousemove', moveIncrement);\r
- return false;\r
- },\r
- downHue = function (ev) {\r
- var current = {\r
- cal: $(this).parent(),\r
- y: $(this).offset().top\r
- };\r
- current.preview = current.cal.data('colorpicker').livePreview;\r
- $(document).bind('mouseup', current, upHue);\r
- $(document).bind('mousemove', current, moveHue);\r
- },\r
- moveHue = function (ev) {\r
- change.apply(\r
- ev.data.cal.data('colorpicker')\r
- .fields\r
- .eq(4)\r
- .val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10))\r
- .get(0),\r
- [ev.data.preview]\r
- );\r
- return false;\r
- },\r
- upHue = function (ev) {\r
- fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));\r
- fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));\r
- $(document).unbind('mouseup', upHue);\r
- $(document).unbind('mousemove', moveHue);\r
- return false;\r
- },\r
- downSelector = function (ev) {\r
- var current = {\r
- cal: $(this).parent(),\r
- pos: $(this).offset()\r
- };\r
- current.preview = current.cal.data('colorpicker').livePreview;\r
- $(document).bind('mouseup', current, upSelector);\r
- $(document).bind('mousemove', current, moveSelector);\r
- },\r
- moveSelector = function (ev) {\r
- change.apply(\r
- ev.data.cal.data('colorpicker')\r
- .fields\r
- .eq(6)\r
- .val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10))\r
- .end()\r
- .eq(5)\r
- .val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10))\r
- .get(0),\r
- [ev.data.preview]\r
- );\r
- return false;\r
- },\r
- upSelector = function (ev) {\r
- fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));\r
- fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));\r
- $(document).unbind('mouseup', upSelector);\r
- $(document).unbind('mousemove', moveSelector);\r
- return false;\r
- },\r
- enterSubmit = function (ev) {\r
- $(this).addClass('colorpicker_focus');\r
- },\r
- leaveSubmit = function (ev) {\r
- $(this).removeClass('colorpicker_focus');\r
- },\r
- clickSubmit = function (ev) {\r
- var cal = $(this).parent();\r
- var col = cal.data('colorpicker').color;\r
- cal.data('colorpicker').origColor = col;\r
- setCurrentColor(col, cal.get(0));\r
- cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el);\r
- },\r
- show = function (ev) {\r
- var cal = $('#' + $(this).data('colorpickerId'));\r
- cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]);\r
- var pos = $(this).offset();\r
- var viewPort = getViewport();\r
- var top = pos.top + this.offsetHeight;\r
- var left = pos.left;\r
- if (top + 176 > viewPort.t + viewPort.h) {\r
- top -= this.offsetHeight + 176;\r
- }\r
- if (left + 356 > viewPort.l + viewPort.w) {\r
- left -= 356;\r
- }\r
- cal.css({left: left + 'px', top: top + 'px'});\r
- if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) {\r
- cal.show();\r
- }\r
- $(document).bind('mousedown', {cal: cal}, hide);\r
- return false;\r
- },\r
- hide = function (ev) {\r
- if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) {\r
- if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) {\r
- ev.data.cal.hide();\r
- }\r
- $(document).unbind('mousedown', hide);\r
- }\r
- },\r
- isChildOf = function(parentEl, el, container) {\r
- if (parentEl == el) {\r
- return true;\r
- }\r
- if (parentEl.contains) {\r
- return parentEl.contains(el);\r
- }\r
- if ( parentEl.compareDocumentPosition ) {\r
- return !!(parentEl.compareDocumentPosition(el) & 16);\r
- }\r
- var prEl = el.parentNode;\r
- while(prEl && prEl != container) {\r
- if (prEl == parentEl)\r
- return true;\r
- prEl = prEl.parentNode;\r
- }\r
- return false;\r
- },\r
- getViewport = function () {\r
- var m = document.compatMode == 'CSS1Compat';\r
- return {\r
- l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft),\r
- t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop),\r
- w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth),\r
- h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight)\r
- };\r
- },\r
- fixHSB = function (hsb) {\r
- return {\r
- h: Math.min(360, Math.max(0, hsb.h)),\r
- s: Math.min(100, Math.max(0, hsb.s)),\r
- b: Math.min(100, Math.max(0, hsb.b))\r
- };\r
- }, \r
- fixRGB = function (rgb) {\r
- return {\r
- r: Math.min(255, Math.max(0, rgb.r)),\r
- g: Math.min(255, Math.max(0, rgb.g)),\r
- b: Math.min(255, Math.max(0, rgb.b))\r
- };\r
- },\r
- fixHex = function (hex) {\r
- var len = 6 - hex.length;\r
- if (len > 0) {\r
- var o = [];\r
- for (var i=0; i<len; i++) {\r
- o.push('0');\r
- }\r
- o.push(hex);\r
- hex = o.join('');\r
- }\r
- return hex;\r
- }, \r
- HexToRGB = function (hex) {\r
- var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);\r
- return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)};\r
- },\r
- HexToHSB = function (hex) {\r
- return RGBToHSB(HexToRGB(hex));\r
- },\r
- RGBToHSB = function (rgb) {\r
- var hsb = {\r
- h: 0,\r
- s: 0,\r
- b: 0\r
- };\r
- var min = Math.min(rgb.r, rgb.g, rgb.b);\r
- var max = Math.max(rgb.r, rgb.g, rgb.b);\r
- var delta = max - min;\r
- hsb.b = max;\r
- if (max != 0) {\r
- \r
- }\r
- hsb.s = max != 0 ? 255 * delta / max : 0;\r
- if (hsb.s != 0) {\r
- if (rgb.r == max) {\r
- hsb.h = (rgb.g - rgb.b) / delta;\r
- } else if (rgb.g == max) {\r
- hsb.h = 2 + (rgb.b - rgb.r) / delta;\r
- } else {\r
- hsb.h = 4 + (rgb.r - rgb.g) / delta;\r
- }\r
- } else {\r
- hsb.h = -1;\r
- }\r
- hsb.h *= 60;\r
- if (hsb.h < 0) {\r
- hsb.h += 360;\r
- }\r
- hsb.s *= 100/255;\r
- hsb.b *= 100/255;\r
- return hsb;\r
- },\r
- HSBToRGB = function (hsb) {\r
- var rgb = {};\r
- var h = Math.round(hsb.h);\r
- var s = Math.round(hsb.s*255/100);\r
- var v = Math.round(hsb.b*255/100);\r
- if(s == 0) {\r
- rgb.r = rgb.g = rgb.b = v;\r
- } else {\r
- var t1 = v;\r
- var t2 = (255-s)*v/255;\r
- var t3 = (t1-t2)*(h%60)/60;\r
- if(h==360) h = 0;\r
- if(h<60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3}\r
- else if(h<120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3}\r
- else if(h<180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3}\r
- else if(h<240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3}\r
- else if(h<300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3}\r
- else if(h<360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3}\r
- else {rgb.r=0; rgb.g=0; rgb.b=0}\r
- }\r
- return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};\r
- },\r
- RGBToHex = function (rgb) {\r
- var hex = [\r
- rgb.r.toString(16),\r
- rgb.g.toString(16),\r
- rgb.b.toString(16)\r
- ];\r
- $.each(hex, function (nr, val) {\r
- if (val.length == 1) {\r
- hex[nr] = '0' + val;\r
- }\r
- });\r
- return hex.join('');\r
- },\r
- HSBToHex = function (hsb) {\r
- return RGBToHex(HSBToRGB(hsb));\r
- },\r
- restoreOriginal = function () {\r
- var cal = $(this).parent();\r
- var col = cal.data('colorpicker').origColor;\r
- cal.data('colorpicker').color = col;\r
- fillRGBFields(col, cal.get(0));\r
- fillHexFields(col, cal.get(0));\r
- fillHSBFields(col, cal.get(0));\r
- setSelector(col, cal.get(0));\r
- setHue(col, cal.get(0));\r
- setNewColor(col, cal.get(0));\r
- };\r
- return {\r
- init: function (opt) {\r
- opt = $.extend({}, defaults, opt||{});\r
- if (typeof opt.color == 'string') {\r
- opt.color = HexToHSB(opt.color);\r
- } else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) {\r
- opt.color = RGBToHSB(opt.color);\r
- } else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) {\r
- opt.color = fixHSB(opt.color);\r
- } else {\r
- return this;\r
- }\r
- return this.each(function () {\r
- if (!$(this).data('colorpickerId')) {\r
- var options = $.extend({}, opt);\r
- options.origColor = opt.color;\r
- var id = 'collorpicker_' + parseInt(Math.random() * 1000);\r
- $(this).data('colorpickerId', id);\r
- var cal = $(tpl).attr('id', id);\r
- if (options.flat) {\r
- cal.appendTo(this).show();\r
- } else {\r
- cal.appendTo(document.body);\r
- }\r
- options.fields = cal\r
- .find('input')\r
- .bind('keyup', keyDown)\r
- .bind('change', change)\r
- .bind('blur', blur)\r
- .bind('focus', focus);\r
- cal\r
- .find('span').bind('mousedown', downIncrement).end()\r
- .find('>div.colorpicker_current_color').bind('click', restoreOriginal);\r
- options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector);\r
- options.selectorIndic = options.selector.find('div div');\r
- options.el = this;\r
- options.hue = cal.find('div.colorpicker_hue div');\r
- cal.find('div.colorpicker_hue').bind('mousedown', downHue);\r
- options.newColor = cal.find('div.colorpicker_new_color');\r
- options.currentColor = cal.find('div.colorpicker_current_color');\r
- cal.data('colorpicker', options);\r
- cal.find('div.colorpicker_submit')\r
- .bind('mouseenter', enterSubmit)\r
- .bind('mouseleave', leaveSubmit)\r
- .bind('click', clickSubmit);\r
- fillRGBFields(options.color, cal.get(0));\r
- fillHSBFields(options.color, cal.get(0));\r
- fillHexFields(options.color, cal.get(0));\r
- setHue(options.color, cal.get(0));\r
- setSelector(options.color, cal.get(0));\r
- setCurrentColor(options.color, cal.get(0));\r
- setNewColor(options.color, cal.get(0));\r
- if (options.flat) {\r
- cal.css({\r
- position: 'relative',\r
- display: 'block'\r
- });\r
- } else {\r
- $(this).bind(options.eventName, show);\r
- }\r
- }\r
- });\r
- },\r
- showPicker: function() {\r
- return this.each( function () {\r
- if ($(this).data('colorpickerId')) {\r
- show.apply(this);\r
- }\r
- });\r
- },\r
- hidePicker: function() {\r
- return this.each( function () {\r
- if ($(this).data('colorpickerId')) {\r
- $('#' + $(this).data('colorpickerId')).hide();\r
- }\r
- });\r
- },\r
- setColor: function(col) {\r
- if (typeof col == 'string') {\r
- col = HexToHSB(col);\r
- } else if (col.r != undefined && col.g != undefined && col.b != undefined) {\r
- col = RGBToHSB(col);\r
- } else if (col.h != undefined && col.s != undefined && col.b != undefined) {\r
- col = fixHSB(col);\r
- } else {\r
- return this;\r
- }\r
- return this.each(function(){\r
- if ($(this).data('colorpickerId')) {\r
- var cal = $('#' + $(this).data('colorpickerId'));\r
- cal.data('colorpicker').color = col;\r
- cal.data('colorpicker').origColor = col;\r
- fillRGBFields(col, cal.get(0));\r
- fillHSBFields(col, cal.get(0));\r
- fillHexFields(col, cal.get(0));\r
- setHue(col, cal.get(0));\r
- setSelector(col, cal.get(0));\r
- setCurrentColor(col, cal.get(0));\r
- setNewColor(col, cal.get(0));\r
- }\r
- });\r
- }\r
- };\r
- }();\r
- $.fn.extend({\r
- ColorPicker: ColorPicker.init,\r
- ColorPickerHide: ColorPicker.hidePicker,\r
- ColorPickerShow: ColorPicker.showPicker,\r
- ColorPickerSetColor: ColorPicker.setColor\r
- });\r
-})(jQuery)
\ No newline at end of file
+++ /dev/null
-$(function(){\r
- formFunc();\r
- $(".rt_btn").live("click", function(e){\r
- e.preventDefault();\r
- onRT($(this));\r
- });\r
- $(".replie_btn").live("click", function(e){\r
- e.preventDefault();\r
- onReplie($(this));\r
- });\r
- $(".delete_btn").click(function(e){\r
- e.preventDefault();\r
- onDelete($(this), "收藏");\r
- });\r
- $(".retw_btn").live("click", function(e){\r
- e.preventDefault();\r
- onNwRT($(this));\r
- }); \r
-});\r
updateSentTip("Your image has been uploaded!", 3e3, "success");
$("#photoArea").slideToggle(100);
}else{
+ console.log(data);
updateSentTip("Failed to upload, please try again.", 3e3, "failure");
$("#photoArea").slideToggle(100);
}
error: function (data, status, e){
updateSentTip("Failed to upload, please try again.", 3e3, "failure");
$("#photoArea").slideToggle(100);
+ console.log(data);
}
})
return false;
//Lazy Load
(function(a){a.fn.lazyload=function(b){var c={threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window};if(b){a.extend(c,b)}var d=this;if("scroll"==c.event){a(c.container).bind("scroll",function(b){var e=0;d.each(function(){if(a.abovethetop(this,c)||a.leftofbegin(this,c)){}else if(!a.belowthefold(this,c)&&!a.rightoffold(this,c)){a(this).trigger("appear")}else{if(e++>c.failurelimit){return false}}});var f=a.grep(d,function(a){return!a.loaded});d=a(f)})}this.each(function(){var b=this;if(undefined==a(b).attr("original")){a(b).attr("original",a(b).attr("src"))}if("scroll"!=c.event||undefined==a(b).attr("src")||c.placeholder==a(b).attr("src")||a.abovethetop(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.rightoffold(b,c)){if(c.placeholder){a(b).attr("src",c.placeholder)}else{a(b).removeAttr("src")}b.loaded=false}else{b.loaded=true}a(b).one("appear",function(){if(!this.loaded){a("<img />").bind("load",function(){a(b).hide().attr("src",a(b).attr("original"))[c.effect](c.effectspeed);b.loaded=true}).attr("src",a(b).attr("original"))}});if("scroll"!=c.event){a(b).bind(c.event,function(c){if(!b.loaded){a(b).trigger("appear")}})}});a(c.container).trigger(c.event);return this};a.belowthefold=function(b,c){if(c.container===undefined||c.container===window){var d=a(window).height()+a(window).scrollTop()}else{var d=a(c.container).offset().top+a(c.container).height()}return d<=a(b).offset().top-c.threshold};a.rightoffold=function(b,c){if(c.container===undefined||c.container===window){var d=a(window).width()+a(window).scrollLeft()}else{var d=a(c.container).offset().left+a(c.container).width()}return d<=a(b).offset().left-c.threshold};a.abovethetop=function(b,c){if(c.container===undefined||c.container===window){var d=a(window).scrollTop()}else{var d=a(c.container).offset().top}return d>=a(b).offset().top+c.threshold+a(b).height()};a.leftofbegin=function(b,c){if(c.container===undefined||c.container===window){var d=a(window).scrollLeft()}else{var d=a(c.container).offset().left}return d>=a(b).offset().left+c.threshold+a(b).width()};a.extend(a.expr[":"],{"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})","above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})","right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})","left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"})})(jQuery);
-//Infinite Scroll
-(function(a){a.fn.infinitescroll=function(b,c){function l(){if(n.isDone){i();return false}else{var b=o.children().get();if(b.length==0){return a.event.trigger("ajaxError",[{status:404}])}else{m.callback(o)}while(o[0].firstChild){p.appendChild(o[0].firstChild)}a(m.contentSelector)[0].appendChild(p);n.loadingMsg.fadeOut("normal");if(m.animate){var d=a(window).scrollTop()+a("#infscr-loading").height()+m.extraScrollPx+"px";a("html,body").animate({scrollTop:d},800,function(){n.isDuringAjax=false})}c.call(a(m.contentSelector)[0],b);if(!m.animate)n.isDuringAjax=false}}function k(){n.isDuringAjax=true;n.loadingMsg.appendTo(m.contentSelector).show();a(m.navSelector).hide();n.currPage++;d("heading into ajax",r);o=a(m.contentSelector).is("table")?a("<tbody/>"):a("<div/>");p=document.createDocumentFragment();o.load(r.join(n.currPage)+" "+m.itemSelector,null,l)}function j(){if(n.isDuringAjax||n.isInvalidPage||n.isDone)return;if(!h(m,n))return;a(document).trigger("retrieve.infscr")}function i(){n.loadingMsg.find("img").hide().parent().find("div").html(m.donetext).animate({opacity:1},2e3).fadeOut("normal");m.errorCallback()}function h(){var b=0+g()-(m.localMode?a(n.container).scrollTop():a(n.container).scrollTop()||a(n.container.ownerDocument.body).scrollTop())-a(m.localMode?n.container:window).height();d("math:",b,n.pixelsFromNavToBottom);var c=b;var e=n.pixelsFromNavToBottom;return b-m.bufferPx<n.pixelsFromNavToBottom}function g(){return m.localMode?a(n.container)[0].scrollHeight&&a(n.container)[0].scrollHeight:a(document).height()}function f(a){a.match(q)?a.match(q)[2]:a;if(a.match(/^(.*?)\b2\b(.*?$)/)){a=a.match(/^(.*?)\b2\b(.*?$)/).slice(1)}else if(a.match(/^(.*?)2(.*?$)/)){if(a.match(/^(.*?page=)2(\/.*|$)/)){a=a.match(/^(.*?page=)2(\/.*|$)/).slice(1);return a}d("Trying backup next selector parse technique. Treacherous waters here, matey.");a=a.match(/^(.*?)2(.*?$)/).slice(1)}else{if(a.match(/^(.*?page=)1(\/.*|$)/)){a=a.match(/^(.*?page=)1(\/.*|$)/).slice(1);return a}n.isInvalidPage=true}return a}function e(b){for(var c in b){if(c.indexOf&&c.indexOf("Selector")>-1&&a(b[c]).length===0){d("Your "+c+" found no elements.");return false}return true}}function d(){if(m.debug){window.console&&console.log.call(console,arguments)}}a.browser.ie6=a.browser.msie&&a.browser.version<7;var m=a.extend({},a.infinitescroll.defaults,b),n=a.infinitescroll,o,p;c=c||function(){};if(!e(m)){return false}n.container=m.localMode?this:document.documentElement;m.contentSelector=m.contentSelector||this;var q=/(.*?\/\/).*?(\/.*)/,r=a(m.nextSelector).attr("href");if(!r){d("Navigation selector not found");return}r=f(r);if(m.localMode)a(n.container)[0].scrollTop=0;n.pixelsFromNavToBottom=n.container==document.documentElement?300:g()+a(n.container).offset().top-a(m.navSelector).offset().top;n.loadingMsg=a('<li class="scro"><img alt="Loading..." src="'+m.loadingImg+'" /> '+m.loadingText+"</li>");(new Image).src=m.loadingImg;a(document).ajaxError(function(b,c,e){d("Page not found. Self-destructing...");if(c.status==404){i();n.isDone=true;a(m.localMode?this:window).unbind("scroll.infscr")}});a(m.localMode?this:window).bind("scroll.infscr",j).trigger("scroll.infscr");a(document).bind("retrieve.infscr",k);return this};a.infinitescroll={defaults:{debug:false,preload:false,nextSelector:"a#more:last",loadingImg:"img/square.gif",loadingText:" Please wait...",donetext:"Sorry, but we have no more loading for you!",navSelector:"div.navigation",contentSelector:null,extraScrollPx:150,itemSelector:"#allTimeline li",animate:false,localMode:false,bufferPx:400,errorCallback:function(){},callback:undefined},loadingImg:undefined,loadingMsg:undefined,container:undefined,currPage:1,currDOMChunk:null,isDuringAjax:false,isInvalidPage:false,isDone:false}})(jQuery);
+/*
+ --------------------------------
+ Infinite Scroll
+ --------------------------------
+ + https://github.com/paulirish/infinite-scroll
+ + version 2.0b2.111027
+ + Copyright 2011 Paul Irish & Luke Shumard
+ + Licensed under the MIT license
+
+ + Documentation: http://infinite-scroll.com/
+
+*/
+
+(function (window, $, undefined) {
+
+ $.infinitescroll = function infscr(options, callback, element) {
+
+ this.element = $(element);
+ this._create(options, callback);
+
+ };
+
+ $.infinitescroll.defaults = {
+ loading: {
+ finished: undefined,
+ finishedMsg: "<em>Congratulations, you've reached the edge of the timeline.</em>",
+ img: "img/square.gif",
+ msg: null,
+ msgText: "<em>Loading more tweets...</em>",
+ selector: null,
+ speed: 'fast',
+ start: undefined
+ },
+ state: {
+ isDuringAjax: false,
+ isInvalidPage: false,
+ isDestroyed: false,
+ isDone: false, // For when it goes all the way through the archive.
+ isPaused: false,
+ currPage: 1
+ },
+ callback: undefined,
+ debug: false,
+ behavior: undefined,
+ binder: $(window), // used to cache the selector
+ nextSelector: "div.navigation a:first",
+ navSelector: "div.navigation",
+ contentSelector: null, // rename to pageFragment
+ extraScrollPx: 150,
+ itemSelector: "div.post",
+ animate: false,
+ pathParse: undefined,
+ dataType: 'html',
+ appendCallback: true,
+ bufferPx: 40,
+ errorCallback: function () { },
+ infid: 0, //Instance ID
+ pixelsFromNavToBottom: undefined,
+ path: undefined
+ };
+
+
+ $.infinitescroll.prototype = {
+
+ /*
+ ----------------------------
+ Private methods
+ ----------------------------
+ */
+
+ // Bind or unbind from scroll
+ _binding: function infscr_binding(binding) {
+
+ var instance = this,
+ opts = instance.options;
+
+ opts.v = '2.0b2.111027';
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['_binding_'+opts.behavior] !== undefined) {
+ this['_binding_'+opts.behavior].call(this);
+ return;
+ }
+
+ if (binding !== 'bind' && binding !== 'unbind') {
+ this._debug('Binding value ' + binding + ' not valid')
+ return false;
+ }
+
+ if (binding == 'unbind') {
+
+ (this.options.binder).unbind('smartscroll.infscr.' + instance.options.infid);
+
+ } else {
+
+ (this.options.binder)[binding]('smartscroll.infscr.' + instance.options.infid, function () {
+ instance.scroll();
+ });
+
+ };
+
+ this._debug('Binding', binding);
+
+ },
+
+ // Fundamental aspects of the plugin are initialized
+ _create: function infscr_create(options, callback) {
+
+ // If selectors from options aren't valid, return false
+ if (!this._validate(options)) { return false; }
+ // Define options and shorthand
+ var opts = this.options = $.extend(true, {}, $.infinitescroll.defaults, options),
+ // get the relative URL - everything past the domain name.
+ relurl = /(.*?\/\/).*?(\/.*)/,
+ path = $(opts.nextSelector).attr('href');
+
+ // contentSelector is 'page fragment' option for .load() / .ajax() calls
+ opts.contentSelector = opts.contentSelector || this.element;
+
+ // loading.selector - if we want to place the load message in a specific selector, defaulted to the contentSelector
+ opts.loading.selector = opts.loading.selector || opts.contentSelector;
+
+ // if there's not path, return
+ if (!path) { this._debug('Navigation selector not found'); return; }
+
+ // Set the path to be a relative URL from root.
+ opts.path = this._determinepath(path);
+
+ // Define loading.msg
+ opts.loading.msg = $('<div id="infscr-loading"><img alt="Loading..." src="' + opts.loading.img + '" /><div>' + opts.loading.msgText + '</div></div>');
+
+ // Preload loading.img
+ (new Image()).src = opts.loading.img;
+
+ // distance from nav links to bottom
+ // computed as: height of the document + top offset of container - top offset of nav link
+ opts.pixelsFromNavToBottom = $(document).height() - $(opts.navSelector).offset().top;
+
+ // determine loading.start actions
+ opts.loading.start = opts.loading.start || function() {
+
+ $(opts.navSelector).hide();
+ opts.loading.msg
+ .appendTo(opts.loading.selector)
+ .show(opts.loading.speed, function () {
+ beginAjax(opts);
+ });
+ };
+
+ // determine loading.finished actions
+ opts.loading.finished = opts.loading.finished || function() {
+ opts.loading.msg.fadeOut('normal');
+ };
+
+ // callback loading
+ opts.callback = function(instance,data) {
+ if (!!opts.behavior && instance['_callback_'+opts.behavior] !== undefined) {
+ instance['_callback_'+opts.behavior].call($(opts.contentSelector)[0], data);
+ }
+ if (callback) {
+ callback.call($(opts.contentSelector)[0], data, opts);
+ }
+ };
+
+ this._setup();
+
+ },
+
+ // Console log wrapper
+ _debug: function infscr_debug() {
+
+ if (this.options && this.options.debug) {
+ return window.console && console.log.call(console, arguments);
+ }
+
+ },
+
+ // find the number to increment in the path.
+ _determinepath: function infscr_determinepath(path) {
+
+ var opts = this.options;
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['_determinepath_'+opts.behavior] !== undefined) {
+ this['_determinepath_'+opts.behavior].call(this,path);
+ return;
+ }
+
+ if (!!opts.pathParse) {
+
+ this._debug('pathParse manual');
+ return opts.pathParse(path, this.options.state.currPage+1);
+
+ } else if (path.match(/^(.*?)\b2\b(.*?$)/)) {
+ path = path.match(/^(.*?)\b2\b(.*?$)/).slice(1);
+
+ // if there is any 2 in the url at all.
+ } else if (path.match(/^(.*?)2(.*?$)/)) {
+
+ // page= is used in django:
+ // http://www.infinite-scroll.com/changelog/comment-page-1/#comment-127
+ if (path.match(/^(.*?page=)2(\/.*|$)/)) {
+ path = path.match(/^(.*?page=)2(\/.*|$)/).slice(1);
+ return path;
+ }
+
+ path = path.match(/^(.*?)2(.*?$)/).slice(1);
+
+ } else {
+
+ // page= is used in drupal too but second page is page=1 not page=2:
+ // thx Jerod Fritz, vladikoff
+ if (path.match(/^(.*?page=)1(\/.*|$)/)) {
+ path = path.match(/^(.*?page=)1(\/.*|$)/).slice(1);
+ return path;
+ } else {
+ this._debug('Sorry, we couldn\'t parse your Next (Previous Posts) URL. Verify your the css selector points to the correct A tag. If you still get this error: yell, scream, and kindly ask for help at infinite-scroll.com.');
+ // Get rid of isInvalidPage to allow permalink to state
+ opts.state.isInvalidPage = true; //prevent it from running on this page.
+ }
+ }
+ this._debug('determinePath', path);
+ return path;
+
+ },
+
+ // Custom error
+ _error: function infscr_error(xhr) {
+
+ var opts = this.options;
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['_error_'+opts.behavior] !== undefined) {
+ this['_error_'+opts.behavior].call(this,xhr);
+ return;
+ }
+
+ if (xhr !== 'destroy' && xhr !== 'end') {
+ xhr = 'unknown';
+ }
+
+ this._debug('Error', xhr);
+
+ if (xhr == 'end') {
+ this._showdonemsg();
+ }
+
+ opts.state.isDone = true;
+ opts.state.currPage = 1; // if you need to go back to this instance
+ opts.state.isPaused = false;
+ this._binding('unbind');
+
+ },
+
+ // Load Callback
+ _loadcallback: function infscr_loadcallback(box, data) {
+
+ var opts = this.options,
+ callback = this.options.callback, // GLOBAL OBJECT FOR CALLBACK
+ result = (opts.state.isDone) ? 'done' : (!opts.appendCallback) ? 'no-append' : 'append',
+ frag;
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['_loadcallback_'+opts.behavior] !== undefined) {
+ this['_loadcallback_'+opts.behavior].call(this,box,data);
+ return;
+ }
+
+ switch (result) {
+
+ case 'done':
+
+ this._showdonemsg();
+ return false;
+
+ break;
+
+ case 'no-append':
+
+ if (opts.dataType == 'html') {
+ data = '<div>' + data + '</div>';
+ data = $(data).find(opts.itemSelector);
+ };
+
+ break;
+
+ case 'append':
+
+ var children = box.children();
+
+ // if it didn't return anything
+ if (children.length == 0) {
+ return this._error('end');
+ }
+
+ // added by esmizzle 2012-01-26 - update the path to the link for the next set of elements
+ var nexturl = $(data).find(opts.nextSelector).attr('href');
+ this._debug('nexturl: '+ nexturl)
+ this.options.path[0] = nexturl;
+ this.options.path[1] = '#pathcomplete';
+
+ // use a documentFragment because it works when content is going into a table or UL
+ frag = document.createDocumentFragment();
+ while (box[0].firstChild) {
+ frag.appendChild(box[0].firstChild);
+ }
+
+ this._debug('contentSelector', $(opts.contentSelector)[0])
+ $(opts.contentSelector)[0].appendChild(frag);
+ // previously, we would pass in the new DOM element as context for the callback
+ // however we're now using a documentfragment, which doesnt havent parents or children,
+ // so the context is the contentContainer guy, and we pass in an array
+ // of the elements collected as the first argument.
+
+ data = children.get();
+
+
+ break;
+
+ }
+
+ // loadingEnd function
+ opts.loading.finished.call($(opts.contentSelector)[0],opts)
+
+
+ // smooth scroll to ease in the new content
+ if (opts.animate) {
+ var scrollTo = $(window).scrollTop() + $('#infscr-loading').height() + opts.extraScrollPx + 'px';
+ $('html,body').animate({ scrollTop: scrollTo }, 800, function () { opts.state.isDuringAjax = false; });
+ }
+
+ if (!opts.animate) opts.state.isDuringAjax = false; // once the call is done, we can allow it again.
+
+ callback(this,data);
+
+ },
+
+ _nearbottom: function infscr_nearbottom() {
+
+ var opts = this.options,
+ pixelsFromWindowBottomToBottom = 0 + $(document).height() - (opts.binder.scrollTop()) - $(window).height();
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['_nearbottom_'+opts.behavior] !== undefined) {
+ return this['_nearbottom_'+opts.behavior].call(this);
+ }
+
+ this._debug('math:', pixelsFromWindowBottomToBottom, opts.pixelsFromNavToBottom);
+
+ // if distance remaining in the scroll (including buffer) is less than the orignal nav to bottom....
+ return (pixelsFromWindowBottomToBottom - opts.bufferPx < opts.pixelsFromNavToBottom);
+
+ },
+
+ // Pause / temporarily disable plugin from firing
+ _pausing: function infscr_pausing(pause) {
+
+ var opts = this.options;
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['_pausing_'+opts.behavior] !== undefined) {
+ this['_pausing_'+opts.behavior].call(this,pause);
+ return;
+ }
+
+ // If pause is not 'pause' or 'resume', toggle it's value
+ if (pause !== 'pause' && pause !== 'resume' && pause !== null) {
+ this._debug('Invalid argument. Toggling pause value instead');
+ };
+
+ pause = (pause && (pause == 'pause' || pause == 'resume')) ? pause : 'toggle';
+
+ switch (pause) {
+ case 'pause':
+ opts.state.isPaused = true;
+ break;
+
+ case 'resume':
+ opts.state.isPaused = false;
+ break;
+
+ case 'toggle':
+ opts.state.isPaused = !opts.state.isPaused;
+ break;
+ }
+
+ this._debug('Paused', opts.state.isPaused);
+ return false;
+
+ },
+
+ // Behavior is determined
+ // If the behavior option is undefined, it will set to default and bind to scroll
+ _setup: function infscr_setup() {
+
+ var opts = this.options;
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['_setup_'+opts.behavior] !== undefined) {
+ this['_setup_'+opts.behavior].call(this);
+ return;
+ }
+
+ this._binding('bind');
+
+ return false;
+
+ },
+
+ // Show done message
+ _showdonemsg: function infscr_showdonemsg() {
+
+ var opts = this.options;
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['_showdonemsg_'+opts.behavior] !== undefined) {
+ this['_showdonemsg_'+opts.behavior].call(this);
+ return;
+ }
+
+ opts.loading.msg
+ .find('img')
+ .hide()
+ .parent()
+ .find('div').html(opts.loading.finishedMsg).animate({ opacity: 1 }, 2000, function () {
+ $(this).parent().fadeOut('normal');
+ });
+
+ // user provided callback when done
+ opts.errorCallback.call($(opts.contentSelector)[0],'done');
+
+ },
+
+ // grab each selector option and see if any fail
+ _validate: function infscr_validate(opts) {
+
+ for (var key in opts) {
+ if (key.indexOf && key.indexOf('Selector') > -1 && $(opts[key]).length === 0) {
+ this._debug('Your ' + key + ' found no elements.');
+ return false;
+ }
+ return true;
+ }
+
+ },
+
+ /*
+ ----------------------------
+ Public methods
+ ----------------------------
+ */
+
+ // Bind to scroll
+ bind: function infscr_bind() {
+ this._binding('bind');
+ },
+
+ // Destroy current instance of plugin
+ destroy: function infscr_destroy() {
+
+ this.options.state.isDestroyed = true;
+ return this._error('destroy');
+
+ },
+
+ // Set pause value to false
+ pause: function infscr_pause() {
+ this._pausing('pause');
+ },
+
+ // Set pause value to false
+ resume: function infscr_resume() {
+ this._pausing('resume');
+ },
+
+ // Retrieve next set of content items
+ retrieve: function infscr_retrieve(pageNum) {
+
+ var instance = this,
+ opts = instance.options,
+ path = opts.path,
+ box, frag, desturl, method, condition,
+ pageNum = pageNum || null,
+ getPage = (!!pageNum) ? pageNum : opts.state.currPage;
+ beginAjax = function infscr_ajax(opts) {
+
+ // increment the URL bit. e.g. /page/3/
+ opts.state.currPage++;
+
+ instance._debug('heading into ajax', path);
+
+ // if we're dealing with a table we can't use DIVs
+ box = $(opts.contentSelector).is('table') ? $('<tbody/>') : $('<div/>');
+
+ desturl = (path[1] == '#pathcomplete') ? path[0] : path.join(opts.state.currPage); // only throw the currPage in there if we need it
+ instance._debug('desturl: '+desturl);
+
+ method = (opts.dataType == 'html' || opts.dataType == 'json') ? opts.dataType : 'html+callback';
+ if (opts.appendCallback && opts.dataType == 'html') method += '+callback'
+
+ switch (method) {
+
+ case 'html+callback':
+ instance._debug('Using HTML via .load() method');
+ box.load(desturl + ' ' + opts.itemSelector, null, function infscr_ajax_callback(responseText) {
+ instance._loadcallback(box, responseText);
+ });
+
+ break;
+
+ case 'html':
+ case 'json':
+
+ instance._debug('Using ' + (method.toUpperCase()) + ' via $.ajax() method');
+ $.ajax({
+ // params
+ url: desturl,
+ dataType: opts.dataType,
+ complete: function infscr_ajax_callback(jqXHR, textStatus) {
+ condition = (typeof (jqXHR.isResolved) !== 'undefined') ? (jqXHR.isResolved()) : (textStatus === "success" || textStatus === "notmodified");
+ (condition) ? instance._loadcallback(box, jqXHR.responseText) : instance._error('end');
+ }
+ });
+
+ break;
+ }
+ };
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['retrieve_'+opts.behavior] !== undefined) {
+ this['retrieve_'+opts.behavior].call(this,pageNum);
+ return;
+ }
+
+
+ // for manual triggers, if destroyed, get out of here
+ if (opts.state.isDestroyed) {
+ this._debug('Instance is destroyed');
+ return false;
+ };
+
+ // we dont want to fire the ajax multiple times
+ opts.state.isDuringAjax = true;
+
+ opts.loading.start.call($(opts.contentSelector)[0],opts);
+
+ },
+
+ // Check to see next page is needed
+ scroll: function infscr_scroll() {
+
+ var opts = this.options,
+ state = opts.state;
+
+ // if behavior is defined and this function is extended, call that instead of default
+ if (!!opts.behavior && this['scroll_'+opts.behavior] !== undefined) {
+ this['scroll_'+opts.behavior].call(this);
+ return;
+ }
+
+ if (state.isDuringAjax || state.isInvalidPage || state.isDone || state.isDestroyed || state.isPaused) return;
+
+ if (!this._nearbottom()) return;
+
+ this.retrieve();
+
+ },
+
+ // Toggle pause value
+ toggle: function infscr_toggle() {
+ this._pausing();
+ },
+
+ // Unbind from scroll
+ unbind: function infscr_unbind() {
+ this._binding('unbind');
+ },
+
+ // update options
+ update: function infscr_options(key) {
+ if ($.isPlainObject(key)) {
+ this.options = $.extend(true,this.options,key);
+ }
+ }
+
+ }
+
+
+ /*
+ ----------------------------
+ Infinite Scroll function
+ ----------------------------
+
+ Borrowed logic from the following...
+
+ jQuery UI
+ - https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.widget.js
+
+ jCarousel
+ - https://github.com/jsor/jcarousel/blob/master/lib/jquery.jcarousel.js
+
+ Masonry
+ - https://github.com/desandro/masonry/blob/master/jquery.masonry.js
+
+ */
+
+ $.fn.infinitescroll = function infscr_init(options, callback) {
+
+
+ var thisCall = typeof options;
+
+ switch (thisCall) {
+
+ // method
+ case 'string':
+
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ this.each(function () {
+
+ var instance = $.data(this, 'infinitescroll');
+
+ if (!instance) {
+ // not setup yet
+ // return $.error('Method ' + options + ' cannot be called until Infinite Scroll is setup');
+ return false;
+ }
+ if (!$.isFunction(instance[options]) || options.charAt(0) === "_") {
+ // return $.error('No such method ' + options + ' for Infinite Scroll');
+ return false;
+ }
+
+ // no errors!
+ instance[options].apply(instance, args);
+
+ });
+
+ break;
+
+ // creation
+ case 'object':
+
+ this.each(function () {
+
+ var instance = $.data(this, 'infinitescroll');
+
+ if (instance) {
+
+ // update options of current instance
+ instance.update(options);
+
+ } else {
+
+ // initialize new instance
+ $.data(this, 'infinitescroll', new $.infinitescroll(options, callback, this));
+
+ }
+
+ });
+
+ break;
+
+ }
+
+ return this;
+
+ };
+
+
+
+ /*
+ * smartscroll: debounced scroll event for jQuery *
+ * https://github.com/lukeshumard/smartscroll
+ * Based on smartresize by @louis_remi: https://github.com/lrbabe/jquery.smartresize.js *
+ * Copyright 2011 Louis-Remi & Luke Shumard * Licensed under the MIT license. *
+ */
+
+ var event = $.event,
+ scrollTimeout;
+
+ event.special.smartscroll = {
+ setup: function () {
+ $(this).bind("scroll", event.special.smartscroll.handler);
+ },
+ teardown: function () {
+ $(this).unbind("scroll", event.special.smartscroll.handler);
+ },
+ handler: function (event, execAsap) {
+ // Save the context
+ var context = this,
+ args = arguments;
+
+ // set correct event type
+ event.type = "smartscroll";
+
+ if (scrollTimeout) { clearTimeout(scrollTimeout); }
+ scrollTimeout = setTimeout(function () {
+ $.event.handle.apply(context, args);
+ }, execAsap === "execAsap" ? 0 : 100);
+ }
+ };
+
+ $.fn.smartscroll = function (fn) {
+ return fn ? this.bind("smartscroll", fn) : this.trigger("smartscroll", ["execAsap"]);
+ };
+
+
+})(window, jQuery);
+
//Autocomplete
-(function(a){a.fn.extend({autocomplete:function(b,c){var d=typeof b=="string";c=a.extend({},a.Autocompleter.defaults,{url:d?b:null,data:d?null:b,delay:d?a.Autocompleter.defaults.delay:10,max:c&&!c.scroll?10:150},c);c.highlight=c.highlight||function(a){return a};c.formatMatch=c.formatMatch||c.formatItem;return this.each(function(){new a.Autocompleter(this,c)})},result:function(a){return this.bind("result",a)},search:function(a){return this.trigger("search",[a])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(a){return this.trigger("setOptions",[a])},unautocomplete:function(){return this.trigger("unautocomplete")}});a.Autocompleter=function(b,c){function x(){e.removeClass(c.loadingClass)}function w(b){var d=[];var e=b.split("\n");for(var f=0;f<e.length;f++){var g=a.trim(e[f]);if(g){g=g.split("|");d[d.length]={data:g,value:g[0],result:c.formatResult&&c.formatResult(g,g[0])||g[0]}}}return d}function v(d,e,f){if(!c.matchCase)d=d.toLowerCase();var g=h.load(d);if(g&&g.length){e(d,g)}else if(typeof c.url=="string"&&c.url.length>0){var i={timestamp:+(new Date)};a.each(c.extraParams,function(a,b){i[a]=typeof b=="function"?b():b});a.ajax({mode:"abort",port:"autocomplete"+b.name,dataType:c.dataType,url:c.url,data:a.extend({q:q(d),limit:c.max},i),success:function(a){var b=c.parse&&c.parse(a)||w(a);h.add(d,b);e(d,b)}})}else{l.emptyList();f(d)}}function u(a,b){if(b&&b.length&&i){x();l.display(b,a);r(a,b[0].value);l.show()}else{t()}}function t(){var d=l.visible();l.hide();clearTimeout(f);x();if(c.mustMatch){e.search(function(a){if(!a){if(c.multiple){var b=p(e.val()).slice(0,-1);e.val(b.join(c.multipleSeparator)+(b.length?c.multipleSeparator:""))}else e.val("")}})}if(d)a.Autocompleter.Selection(b,b.value.length,b.value.length)}function s(){clearTimeout(f);f=setTimeout(t,200)}function r(f,h){if(c.autoFill&&q(e.val()).toLowerCase()==f.toLowerCase()&&j!=d.BACKSPACE){e.val(e.val()+h.substring(q(g).length));a.Autocompleter.Selection(b,g.length,g.length+h.length)}}function q(a){if(!c.multiple)return a;var b=p(a);return b[b.length-1]}function p(b){if(!b){return[""]}var d=b.split(c.multipleSeparator);var e=[];a.each(d,function(b,c){if(a.trim(c))e[b]=a.trim(c)});return e}function o(a,b){if(j==d.DEL){l.hide();return}var f=e.val();if(!b&&f==g)return;g=f;f=q(f);if(f.length>=c.minChars){e.addClass(c.loadingClass);if(!c.matchCase)f=f.toLowerCase();v(f,u,t)}else{x();l.hide()}}function n(){var a=l.selected();if(!a)return false;var b=a.result;g=b;if(c.multiple){var d=p(e.val());if(d.length>1){b=d.slice(0,d.length-1).join(c.multipleSeparator)+c.multipleSeparator+b}b+=c.multipleSeparator}e.val(b);t();e.trigger("result",[a.data,a.value]);return true}var d={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var e=a(b).attr("autocomplete","off").addClass(c.inputClass);var f;var g="";var h=a.Autocompleter.Cache(c);var i=0;var j;var k={mouseDownOnSelect:false};var l=a.Autocompleter.Select(c,b,n,k);var m;a.browser.opera&&a(b.form).bind("submit.autocomplete",function(){if(m){m=false;return false}});e.bind((a.browser.opera?"keypress":"keydown")+".autocomplete",function(b){j=b.keyCode;switch(b.keyCode){case d.UP:b.preventDefault();if(l.visible()){l.prev()}else{o(0,true)}break;case d.DOWN:b.preventDefault();if(l.visible()){l.next()}else{o(0,true)}break;case d.PAGEUP:b.preventDefault();if(l.visible()){l.pageUp()}else{o(0,true)}break;case d.PAGEDOWN:b.preventDefault();if(l.visible()){l.pageDown()}else{o(0,true)}break;case c.multiple&&a.trim(c.multipleSeparator)==","&&d.COMMA:case d.TAB:case d.RETURN:if(n()){b.preventDefault();m=true;return false}break;case d.ESC:l.hide();break;default:clearTimeout(f);f=setTimeout(o,c.delay);break}}).focus(function(){i++}).blur(function(){i=0;if(!k.mouseDownOnSelect){s()}}).click(function(){if(i++>1&&!l.visible()){o(0,true)}}).bind("search",function(){function c(a,c){var d;if(c&&c.length){for(var f=0;f<c.length;f++){if(c[f].result.toLowerCase()==a.toLowerCase()){d=c[f];break}}}if(typeof b=="function")b(d);else e.trigger("result",d&&[d.data,d.value])}var b=arguments.length>1?arguments[1]:null;a.each(p(e.val()),function(a,b){v(b,c,c)})}).bind("flushCache",function(){h.flush()}).bind("setOptions",function(){a.extend(c,arguments[1]);if("data"in arguments[1])h.populate()}).bind("unautocomplete",function(){l.unbind();e.unbind();a(b.form).unbind(".autocomplete")});};a.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(a){return a[0]},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:true,scrollHeight:180};a.Autocompleter.Cache=function(b){function h(){c={};d=0}function g(){if(!b.data)return false;var c={},d=0;if(!b.url)b.cacheLength=1;c[""]=[];for(var e=0,g=b.data.length;e<g;e++){var h=b.data[e];h=typeof h=="string"?[h]:h;var i=b.formatMatch(h,e+1,b.data.length);if(i===false)continue;var j=i.charAt(0).toLowerCase();if(!c[j])c[j]=[];var k={value:i,data:h,result:b.formatResult&&b.formatResult(h)||i};c[j].push(k);if(d++<b.max){c[""].push(k)}}a.each(c,function(a,c){b.cacheLength++;f(a,c)})}function f(a,e){if(d>b.cacheLength){h()}if(!c[a]){d++}c[a]=e}function e(a,c){if(!b.matchCase)a=a.toLowerCase();var d=a.indexOf(c);if(b.matchContains=="word"){d=a.toLowerCase().search("\\b"+c.toLowerCase())}if(d==-1)return false;return d==0||b.matchContains}var c={};var d=0;setTimeout(g,25);return{flush:h,add:f,populate:g,load:function(f){if(!b.cacheLength||!d)return null;if(!b.url&&b.matchContains){var g=[];for(var h in c){if(h.length>0){var i=c[h];a.each(i,function(a,b){if(e(b.value,f)){g.push(b)}})}}return g}else if(c[f]){return c[f]}else if(b.matchSubset){for(var j=f.length-1;j>=b.minChars;j--){var i=c[f.substr(0,j)];if(i){var g=[];a.each(i,function(a,b){if(e(b.value,f)){g[g.length]=b}});return g}}}return null}}};a.Autocompleter.Select=function(b,c,d,e){function s(){m.empty();var c=r(i.length);for(var d=0;d<c;d++){if(!i[d])continue;var e=b.formatItem(i[d].data,d+1,c,i[d].value,j);if(e===false)continue;var k=a("<li/>").html(b.highlight(e,j)).addClass(d%2==0?"ac_even":"ac_odd").appendTo(m)[0];a.data(k,"ac_data",i[d])}g=m.find("li");if(b.selectFirst){g.slice(0,1).addClass(f.ACTIVE);h=0}if(a.fn.bgiframe)m.bgiframe()}function r(a){return b.max&&b.max<a?b.max:a}function q(a){h+=a;if(h<0){h=g.size()-1}else if(h>=g.size()){h=0}}function p(a){g.slice(h,h+1).removeClass(f.ACTIVE);q(a);var c=g.slice(h,h+1).addClass(f.ACTIVE);if(b.scroll){var d=0;g.slice(0,h).each(function(){d+=this.offsetHeight});if(d+c[0].offsetHeight-m.scrollTop()>m[0].clientHeight){m.scrollTop(d+c[0].offsetHeight-m.innerHeight())}else if(d<m.scrollTop()){m.scrollTop(d)}}}function o(a){var b=a.target;while(b&&b.tagName!="LI")b=b.parentNode;if(!b)return[];return b}function n(){if(!k)return;l=a("<div/>").hide().addClass(b.resultsClass).css("position","absolute").appendTo(document.body);m=a("<ul/>").appendTo(l).mouseover(function(b){if(o(b).nodeName&&o(b).nodeName.toUpperCase()=="LI"){h=a("li",m).removeClass(f.ACTIVE).index(o(b));a(o(b)).addClass(f.ACTIVE)}}).click(function(b){a(o(b)).addClass(f.ACTIVE);d();c.focus();return false}).mousedown(function(){e.mouseDownOnSelect=true}).mouseup(function(){e.mouseDownOnSelect=false});if(b.width>0)l.css("width",b.width);k=false}var f={ACTIVE:"ac_over"};var g,h=-1,i,j="",k=true,l,m;return{display:function(a,b){n();i=a;j=b;s()},next:function(){p(1)},prev:function(){p(-1)},pageUp:function(){if(h!=0&&h-8<0){p(-h)}else{p(-8)}},pageDown:function(){if(h!=g.size()-1&&h+8>g.size()){p(g.size()-1-h)}else{p(8)}},hide:function(){l&&l.hide();g&&g.removeClass(f.ACTIVE);h=-1},visible:function(){return l&&l.is(":visible")},current:function(){return this.visible()&&(g.filter("."+f.ACTIVE)[0]||b.selectFirst&&g[0])},show:function(){var d=a(c).offset();l.css({width:typeof b.width=="string"||b.width>0?b.width:a(c).width(),top:d.top+c.offsetHeight,left:d.left}).show();if(b.scroll){m.scrollTop(0);m.css({maxHeight:b.scrollHeight,overflow:"auto"});if(a.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var e=0;g.each(function(){e+=this.offsetHeight});var f=e>b.scrollHeight;m.css("height",f?b.scrollHeight:e);if(!f){g.width(m.width()-parseInt(g.css("padding-left"))-parseInt(g.css("padding-right")))}}}},selected:function(){var b=g&&g.filter("."+f.ACTIVE).removeClass(f.ACTIVE);return b&&b.length&&a.data(b[0],"ac_data")},emptyList:function(){m&&m.empty()},unbind:function(){l&&l.remove()}}};a.Autocompleter.Selection=function(a,b,c){if(a.createTextRange){var d=a.createTextRange();d.collapse(true);d.moveStart("character",b);d.moveEnd("character",c);d.select()}else if(a.setSelectionRange){a.setSelectionRange(b,c)}else{if(a.selectionStart){a.selectionStart=b;a.selectionEnd=c}}a.focus()}})(jQuery);
+(function(a){a.fn.extend({autocomplete:function(b,c){var d=typeof b=="string";c=a.extend({},a.Autocompleter.defaults,{url:d?b:null,data:d?null:b,delay:d?a.Autocompleter.defaults.delay:10,max:c&&!c.scroll?10:150},c);c.highlight=c.highlight||function(a){return a};c.formatMatch=c.formatMatch||c.formatItem;return this.each(function(){new a.Autocompleter(this,c)})},result:function(a){return this.bind("result",a)},search:function(a){return this.trigger("search",[a])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(a){return this.trigger("setOptions",[a])},unautocomplete:function(){return this.trigger("unautocomplete")}});a.Autocompleter=function(b,c){function x(){e.removeClass(c.loadingClass)}function w(b){var d=[];var e=b.split("\n");for(var f=0;f<e.length;f++){var g=a.trim(e[f]);if(g){g=g.split("|");d[d.length]={data:g,value:g[0],result:c.formatResult&&c.formatResult(g,g[0])||g[0]}}}return d}function v(d,e,f){if(!c.matchCase)d=d.toLowerCase();var g=h.load(d);if(g&&g.length){e(d,g)}else if(typeof c.url=="string"&&c.url.length>0){var i={timestamp:+(new Date)};a.each(c.extraParams,function(a,b){i[a]=typeof b=="function"?b():b});a.ajax({mode:"abort",port:"autocomplete"+b.name,dataType:c.dataType,url:c.url,data:a.extend({q:q(d),limit:c.max},i),success:function(a){var b=c.parse&&c.parse(a)||w(a);h.add(d,b);e(d,b)}})}else{l.emptyList();f(d)}}function u(a,b){if(b&&b.length&&i){x();l.display(b,a);r(a,b[0].value);l.show()}else{t()}}function t(){var d=l.visible();l.hide();clearTimeout(f);x();if(c.mustMatch){e.search(function(a){if(!a){if(c.multiple){var b=p(e.val()).slice(0,-1);e.val(b.join(c.multipleSeparator)+(b.length?c.multipleSeparator:""))}else e.val("")}})}if(d)a.Autocompleter.Selection(b,b.value.length,b.value.length)}function s(){clearTimeout(f);f=setTimeout(t,200)}function r(f,h){if(c.autoFill&&q(e.val()).toLowerCase()==f.toLowerCase()&&j!=d.BACKSPACE){e.val(e.val()+h.substring(q(g).length));a.Autocompleter.Selection(b,g.length,g.length+h.length)}}function q(a){if(!c.multiple)return a;var b=p(a);return b[b.length-1]}function p(b){if(!b){return[""]}var d=b.split(c.multipleSeparator);var e=[];a.each(d,function(b,c){if(a.trim(c))e[b]=a.trim(c)});return e}function o(a,b){if(j==d.DEL){l.hide();return}var f=e.val();if(!b&&f==g)return;g=f;f=q(f);if(f.length>=c.minChars){e.addClass(c.loadingClass);if(!c.matchCase)f=f.toLowerCase();v(f,u,t)}else{x();l.hide()}}function n(){var a=l.selected();if(!a)return false;var b=a.result;g=b;if(c.multiple){var d=p(e.val());if(d.length>1){b=d.slice(0,d.length-1).join(c.multipleSeparator)+c.multipleSeparator+b}b+=c.multipleSeparator}e.val(b);t();e.trigger("result",[a.data,a.value]);return true}var d={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var e=a(b).attr("autocomplete","off").addClass(c.inputClass);var f;var g="";var h=a.Autocompleter.Cache(c);var i=0;var j;var k={mouseDownOnSelect:false};var l=a.Autocompleter.Select(c,b,n,k);var m;a.browser.opera&&a(b.form).bind("submit.autocomplete",function(){if(m){m=false;return false}});e.bind((a.browser.opera?"keypress":"keydown")+".autocomplete",function(b){j=b.keyCode;switch(b.keyCode){case d.UP:b.preventDefault();if(l.visible()){l.prev()}else{o(0,true)}break;case d.DOWN:b.preventDefault();if(l.visible()){l.next()}else{o(0,true)}break;case d.PAGEUP:b.preventDefault();if(l.visible()){l.pageUp()}else{o(0,true)}break;case d.PAGEDOWN:b.preventDefault();if(l.visible()){l.pageDown()}else{o(0,true)}break;case c.multiple&&a.trim(c.multipleSeparator)==","&&d.COMMA:case d.TAB:case d.RETURN:if(n()){b.preventDefault();m=true;return false}break;case d.ESC:l.hide();break;default:clearTimeout(f);f=setTimeout(o,c.delay);break}}).focus(function(){i++}).blur(function(){i=0;if(!k.mouseDownOnSelect){s()}}).click(function(){if(i++>1&&!l.visible()){o(0,true)}}).bind("search",function(){function c(a,c){var d;if(c&&c.length){for(var f=0;f<c.length;f++){if(c[f].result.toLowerCase()==a.toLowerCase()){d=c[f];break}}}if(typeof b=="function")b(d);else e.trigger("result",d&&[d.data,d.value])}var b=arguments.length>1?arguments[1]:null;a.each(p(e.val()),function(a,b){v(b,c,c)})}).bind("flushCache",function(){h.flush()}).bind("setOptions",function(){a.extend(c,arguments[1]);if("data"in arguments[1])h.populate()}).bind("unautocomplete",function(){l.unbind();e.unbind();a(b.form).unbind(".autocomplete")});};a.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(a){return a[0]},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:true,scrollHeight:180};a.Autocompleter.Cache=function(b){function h(){c={};d=0}function g(){if(!b.data)return false;var c={},d=0;if(!b.url)b.cacheLength=1;c[""]=[];for(var e=0,g=b.data.length;e<g;e++){var h=b.data[e];h=typeof h=="string"?[h]:h;var i=b.formatMatch(h,e+1,b.data.length);if(i===false)continue;var j=i.charAt(0).toLowerCase();if(!c[j])c[j]=[];var k={value:i,data:h,result:b.formatResult&&b.formatResult(h)||i};c[j].push(k);if(d++<b.max){c[""].push(k)}}a.each(c,function(a,c){b.cacheLength++;f(a,c)})}function f(a,e){if(d>b.cacheLength){h()}if(!c[a]){d++}c[a]=e}function e(a,c){if(!b.matchCase)a=a.toLowerCase();var d=a.indexOf(c);if(b.matchContains=="word"){d=a.toLowerCase().search("\\b"+c.toLowerCase())}if(d==-1)return false;return d==0||b.matchContains}var c={};var d=0;setTimeout(g,25);return{flush:h,add:f,populate:g,load:function(f){if(!b.cacheLength||!d)return null;if(!b.url&&b.matchContains){var g=[];for(var h in c){if(h.length>0){var i=c[h];a.each(i,function(a,b){if(e(b.value,f)){g.push(b)}})}}return g}else if(c[f]){return c[f]}else if(b.matchSubset){for(var j=f.length-1;j>=b.minChars;j--){var i=c[f.substr(0,j)];if(i){var g=[];a.each(i,function(a,b){if(e(b.value,f)){g[g.length]=b}});return g}}}return null}}};a.Autocompleter.Select=function(b,c,d,e){function s(){m.empty();var c=r(i.length);for(var d=0;d<c;d++){if(!i[d])continue;var e=b.formatItem(i[d].data,d+1,c,i[d].value,j);if(e===false)continue;var k=a("<li/>").html(b.highlight(e,j)).addClass(d%2==0?"ac_even":"ac_odd").appendTo(m)[0];a.data(k,"ac_data",i[d])}g=m.find("li");if(b.selectFirst){g.slice(0,1).addClass(f.ACTIVE);h=0}if(a.fn.bgiframe)m.bgiframe()}function r(a){return b.max&&b.max<a?b.max:a}function q(a){h+=a;if(h<0){h=g.size()-1}else if(h>=g.size()){h=0}}function p(a){g.slice(h,h+1).removeClass(f.ACTIVE);q(a);var c=g.slice(h,h+1).addClass(f.ACTIVE);if(b.scroll){var d=0;g.slice(0,h).each(function(){d+=this.offsetHeight});if(d+c[0].offsetHeight-m.scrollTop()>m[0].clientHeight){m.scrollTop(d+c[0].offsetHeight-m.innerHeight())}else if(d<m.scrollTop()){m.scrollTop(d)}}}function o(a){var b=a.target;while(b&&b.tagName!="LI")b=b.parentNode;if(!b)return[];return b}function n(){if(!k)return;l=a("<div/>").hide().addClass(b.resultsClass).css("position","absolute").appendTo(document.body);m=a("<ul/>").appendTo(l).mouseover(function(b){if(o(b).nodeName&&o(b).nodeName.toUpperCase()=="LI"){h=a("li",m).removeClass(f.ACTIVE).index(o(b));a(o(b)).addClass(f.ACTIVE)}}).click(function(b){b.preventDefault();a(o(b)).addClass(f.ACTIVE);d();c.focus()}).mousedown(function(){e.mouseDownOnSelect=true}).mouseup(function(){e.mouseDownOnSelect=false});if(b.width>0)l.css("width",b.width);k=false}var f={ACTIVE:"ac_over"};var g,h=-1,i,j="",k=true,l,m;return{display:function(a,b){n();i=a;j=b;s()},next:function(){p(1)},prev:function(){p(-1)},pageUp:function(){if(h!=0&&h-8<0){p(-h)}else{p(-8)}},pageDown:function(){if(h!=g.size()-1&&h+8>g.size()){p(g.size()-1-h)}else{p(8)}},hide:function(){l&&l.hide();g&&g.removeClass(f.ACTIVE);h=-1},visible:function(){return l&&l.is(":visible")},current:function(){return this.visible()&&(g.filter("."+f.ACTIVE)[0]||b.selectFirst&&g[0])},show:function(){var d=a(c).offset();l.css({width:typeof b.width=="string"||b.width>0?b.width:a(c).width(),top:d.top+c.offsetHeight,left:d.left}).show();if(b.scroll){m.scrollTop(0);m.css({maxHeight:b.scrollHeight,overflow:"auto"});if(a.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var e=0;g.each(function(){e+=this.offsetHeight});var f=e>b.scrollHeight;m.css("height",f?b.scrollHeight:e);if(!f){g.width(m.width()-parseInt(g.css("padding-left"))-parseInt(g.css("padding-right")))}}}},selected:function(){var b=g&&g.filter("."+f.ACTIVE).removeClass(f.ACTIVE);return b&&b.length&&a.data(b[0],"ac_data")},emptyList:function(){m&&m.empty()},unbind:function(){l&&l.remove()}}};a.Autocompleter.Selection=function(a,b,c){if(a.createTextRange){var d=a.createTextRange();d.collapse(true);d.moveStart("character",b);d.moveEnd("character",c);d.select()}else if(a.setSelectionRange){a.setSelectionRange(b,c)}else{if(a.selectionStart){a.selectionStart=b;a.selectionEnd=c}}a.focus()}})(jQuery);
//Timeago
(function(a){function f(a){return(new Date).getTime()-a.getTime()}function e(a){return b.inWords(f(a))}function d(b){b=a(b);var c=a.trim(b.attr("id"));if(!b.data("timeago")){b.data("timeago",{datetime:new Date(c*1e3)})}return b.data("timeago")}function c(){var b=d(this);if(!isNaN(b.datetime)){a(this).text(e(b.datetime))}return this}a.timeago=function(a){if(a instanceof Date){return e(a)}};var b=a.timeago;a.extend(a.timeago,{settings:{refreshMillis:6e4,allowFuture:false,strings:{prefixAgo:null,prefixFromNow:null,suffixAgo:"ago",suffixFromNow:"from now",seconds:"%d seconds",minute:"about a minute",minutes:"%d minutes",hour:"about an hour",hours:"about %d hours",day:"a day",days:"%d days",month:"about a month",months:"%d months",year:"about a year",years:"%d years",numbers:[]}},inWords:function(b){function k(d,e){var f=a.isFunction(d)?d(e,b):d;var g=c.numbers&&c.numbers[e]||e;return f.replace(/%d/i,g)}var c=this.settings.strings;var d=c.prefixAgo;var e=c.suffixAgo;if(this.settings.allowFuture){if(b<0){d=c.prefixFromNow;e=c.suffixFromNow}b=Math.abs(b)}var f=b/1e3;var g=f/60;var h=g/60;var i=h/24;var j=i/365;var l=f<45&&k(c.seconds,Math.round(f))||f<90&&k(c.minute,1)||g<45&&k(c.minutes,Math.round(g))||g<90&&k(c.hour,1)||h<24&&k(c.hours,Math.round(h))||h<48&&k(c.day,1)||i<30&&k(c.days,Math.floor(i))||i<60&&k(c.month,1)||i<365&&k(c.months,Math.floor(i/30))||j<2&&k(c.year,1)||k(c.years,Math.floor(j));return a.trim([d,l,e].join(" "))}});a.fn.timeago=function(){var a=this;a.each(c);var d=b.settings;if(d.refreshMillis>0){setInterval(function(){a.each(c)},d.refreshMillis)}return a}})(jQuery);
(function(a){a.extend(a.fn,{caret:function(a,b){var c=this[0];if(c){if(typeof a=="undefined"){if(c.selectionStart){a=c.selectionStart;b=c.selectionEnd}else if(document.selection){var d=this.val();var e=document.selection.createRange().duplicate();e.moveEnd("character",d.length);a=e.text==""?d.length:d.lastIndexOf(e.text);e=document.selection.createRange().duplicate();e.moveStart("character",-d.length);b=e.text.length}}else{var d=this.val();if(typeof a!="number")a=-1;if(typeof b!="number")b=-1;if(a<0)a=0;if(b>d.length)b=d.length;if(b<a)b=a;if(a>b)a=b;c.focus();if(c.selectionStart){c.selectionStart=a;c.selectionEnd=b}else if(document.selection){var e=c.createTextRange();e.collapse(true);e.moveStart("character",a);e.moveEnd("character",b-a);e.select()}}return{start:a,end:b}}}})})(jQuery);
//ajaxFileupload
-jQuery.extend({createUploadIframe:function(a,b){var c="jUploadFrame"+a;var d='<iframe id="'+c+'" name="'+c+'" style="position:absolute; top:-9999px; left:-9999px"';if(window.ActiveXObject){if(typeof b=="boolean"){d+=' src="'+"javascript:false"+'"'}else if(typeof b=="string"){d+=' src="'+b+'"'}}d+=" />";jQuery(d).appendTo(document.body);return jQuery("#"+c).get(0)},createUploadForm:function(a,b,c){var d="jUploadForm"+a;var e="jUploadFile"+a;var f=jQuery('<form action="" method="POST" name="'+d+'" id="'+d+'" enctype="multipart/form-data"></form>');if(c){for(var g in c){jQuery('<input type="hidden" name="'+g+'" value="'+c[g]+'" />').appendTo(f)}}var h=jQuery("#"+b);var i=jQuery(h).clone();jQuery(h).attr("id",e);jQuery(h).before(i);jQuery(h).appendTo(f);jQuery(f).css("position","absolute");jQuery(f).css("top","-1200px");jQuery(f).css("left","-1200px");jQuery(f).appendTo("body");return f},ajaxFileUpload:function(a){a=jQuery.extend({},jQuery.ajaxSettings,a);var b=(new Date).getTime();var c=jQuery.createUploadForm(b,a.fileElementId,typeof a.data=="undefined"?false:a.data);var d=jQuery.createUploadIframe(b,a.secureuri);var e="jUploadFrame"+b;var f="jUploadForm"+b;if(a.global&&!(jQuery.active++)){jQuery.event.trigger("ajaxStart")}var g=false;var h={};if(a.global)jQuery.event.trigger("ajaxSend",[h,a]);var i=function(b){var d=document.getElementById(e);try{if(d.contentWindow){h.responseText=d.contentWindow.document.body?d.contentWindow.document.body.innerHTML:null;h.responseXML=d.contentWindow.document.XMLDocument?d.contentWindow.document.XMLDocument:d.contentWindow.document}else if(d.contentDocument){h.responseText=d.contentDocument.document.body?d.contentDocument.document.body.innerHTML:null;h.responseXML=d.contentDocument.document.XMLDocument?d.contentDocument.document.XMLDocument:d.contentDocument.document}}catch(f){jQuery.handleError(a,h,null,f)}if(h||b=="timeout"){g=true;var i;try{i=b!="timeout"?"success":"error";if(i!="error"){var j=jQuery.uploadHttpData(h,a.dataType);if(a.success)a.success(j,i);if(a.global)jQuery.event.trigger("ajaxSuccess",[h,a])}else jQuery.handleError(a,h,i)}catch(f){i="error";jQuery.handleError(a,h,i,f)}if(a.global)jQuery.event.trigger("ajaxComplete",[h,a]);if(a.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");if(a.complete)a.complete(h,i);jQuery(d).unbind();setTimeout(function(){try{jQuery(d).remove();jQuery(c).remove()}catch(b){jQuery.handleError(a,h,null,b)}},100);h=null}};if(a.timeout>0){setTimeout(function(){if(!g)i("timeout")},a.timeout)}try{var c=jQuery("#"+f);jQuery(c).attr("action",a.url);jQuery(c).attr("method","POST");jQuery(c).attr("target",e);if(c.encoding){jQuery(c).attr("encoding","multipart/form-data")}else{jQuery(c).attr("enctype","multipart/form-data")}jQuery(c).submit()}catch(j){jQuery.handleError(a,h,null,j)}jQuery("#"+e).load(i);return{abort:function(){}}},uploadHttpData:function(r,type){var data=!type;data=type=="xml"||data?r.responseXML:r.responseText;if(type=="script")jQuery.globalEval(data);if(type=="json")eval("data = "+data);if(type=="html")jQuery("<div>").html(data).evalScripts();return data}});
\ No newline at end of file
+jQuery.extend({createUploadIframe:function(a,b){var c="jUploadFrame"+a;var d='<iframe id="'+c+'" name="'+c+'" style="position:absolute; top:-9999px; left:-9999px"';if(window.ActiveXObject){if(typeof b=="boolean"){d+=' src="'+"javascript:false"+'"'}else if(typeof b=="string"){d+=' src="'+b+'"'}}d+=" />";jQuery(d).appendTo(document.body);return jQuery("#"+c).get(0)},createUploadForm:function(a,b,c){var d="jUploadForm"+a;var e="jUploadFile"+a;var f=jQuery('<form action="" method="POST" name="'+d+'" id="'+d+'" enctype="multipart/form-data"></form>');if(c){for(var g in c){jQuery('<input type="hidden" name="'+g+'" value="'+c[g]+'" />').appendTo(f)}}var h=jQuery("#"+b);var i=jQuery(h).clone();jQuery(h).attr("id",e);jQuery(h).before(i);jQuery(h).appendTo(f);jQuery(f).css("position","absolute");jQuery(f).css("top","-1200px");jQuery(f).css("left","-1200px");jQuery(f).appendTo("body");return f},ajaxFileUpload:function(a){a=jQuery.extend({},jQuery.ajaxSettings,a);var b=(new Date).getTime();var c=jQuery.createUploadForm(b,a.fileElementId,typeof a.data=="undefined"?false:a.data);var d=jQuery.createUploadIframe(b,a.secureuri);var e="jUploadFrame"+b;var f="jUploadForm"+b;if(a.global&&!(jQuery.active++)){jQuery.event.trigger("ajaxStart")}var g=false;var h={};if(a.global)jQuery.event.trigger("ajaxSend",[h,a]);var i=function(b){var d=document.getElementById(e);try{if(d.contentWindow){h.responseText=d.contentWindow.document.body?d.contentWindow.document.body.innerHTML:null;h.responseXML=d.contentWindow.document.XMLDocument?d.contentWindow.document.XMLDocument:d.contentWindow.document}else if(d.contentDocument){h.responseText=d.contentDocument.document.body?d.contentDocument.document.body.innerHTML:null;h.responseXML=d.contentDocument.document.XMLDocument?d.contentDocument.document.XMLDocument:d.contentDocument.document}}catch(f){jQuery.handleError(a,h,null,f)}if(h||b=="timeout"){g=true;var i;try{i=b!="timeout"?"success":"error";if(i!="error"){var j=jQuery.uploadHttpData(h,a.dataType);if(a.success)a.success(j,i);if(a.global)jQuery.event.trigger("ajaxSuccess",[h,a])}else jQuery.handleError(a,h,i)}catch(f){i="error";jQuery.handleError(a,h,i,f)}if(a.global)jQuery.event.trigger("ajaxComplete",[h,a]);if(a.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");if(a.complete)a.complete(h,i);jQuery(d).unbind();setTimeout(function(){try{jQuery(d).remove();jQuery(c).remove()}catch(b){jQuery.handleError(a,h,null,b)}},100);h=null}};if(a.timeout>0){setTimeout(function(){if(!g)i("timeout")},a.timeout)}try{var c=jQuery("#"+f);jQuery(c).attr("action",a.url);jQuery(c).attr("method","POST");jQuery(c).attr("target",e);if(c.encoding){jQuery(c).attr("encoding","multipart/form-data")}else{jQuery(c).attr("enctype","multipart/form-data")}jQuery(c).submit()}catch(j){jQuery.handleError(a,h,null,j)}jQuery("#"+e).load(i);return{abort:function(){}}},uploadHttpData:function(r,type){var data=!type;data=type=="xml"||data?r.responseXML:r.responseText;if(type=="script")jQuery.globalEval(data);if(type=="json")eval("data = "+data);if(type=="html")jQuery("<div>").html(data).evalScripts();return data}});
+++ /dev/null
-/*!\r
- * jQuery Plugins Package for Rabr\r
- * https://rabr.in/\r
- *\r
- * Copyright 2010, Plugins Authors\r
- * Packaged by disinfeqt\r
- * http://www.zdxia.com/\r
- * \r
- * Currently including:\r
- * - Cookie\r
- * - Color\r
- * - Tipsy\r
- * - Lazy Load\r
- * - Marquee\r
- */\r
-\r
-//Cookie\r
-jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options=$.extend({},options);options.expires=-1}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000))}else{date=options.expires}expires='; expires='+date.toUTCString()}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('')}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}return cookieValue}};\r
-\r
-//Color\r
-(function(d){d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(f,e){d.fx.step[e]=function(g){if(!g.colorInit){g.start=c(g.elem,e);g.end=b(g.end);g.colorInit=true}g.elem.style[e]="rgb("+[Math.max(Math.min(parseInt((g.pos*(g.end[0]-g.start[0]))+g.start[0]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[1]-g.start[1]))+g.start[1]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[2]-g.start[2]))+g.start[2]),255),0)].join(",")+")"}});function b(f){var e;if(f&&f.constructor==Array&&f.length==3){return f}if(e=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(f)){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}if(e=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(f)){return[parseFloat(e[1])*2.55,parseFloat(e[2])*2.55,parseFloat(e[3])*2.55]}if(e=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(f)){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}if(e=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(f)){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}if(e=/rgba\(0, 0, 0, 0\)/.exec(f)){return a.transparent}return a[d.trim(f).toLowerCase()]}function c(g,e){var f;do{f=d.curCSS(g,e);if(f!=""&&f!="transparent"||d.nodeName(g,"body")){break}e="backgroundColor"}while(g=g.parentNode);return b(f)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}})(jQuery);\r
-\r
-//Tipsy\r
-(function($){$.fn.tipsy=function(options){options=$.extend({},$.fn.tipsy.defaults,options);return this.each(function(){var opts=$.fn.tipsy.elementOptions(this,options);$(this).hover(function(){$.data(this,'cancel.tipsy',true);var tip=$.data(this,'active.tipsy');if(!tip){tip=$('<div class="tipsy"><div class="tipsy-inner"/></div>');tip.css({position:'absolute',zIndex:100000});$.data(this,'active.tipsy',tip);}\r
-if($(this).attr('title')||typeof($(this).attr('original-title'))!='string'){$(this).attr('original-title',$(this).attr('title')||'').removeAttr('title');}\r
-var title;if(typeof opts.title=='string'){title=$(this).attr(opts.title=='title'?'original-title':opts.title);}else if(typeof opts.title=='function'){title=opts.title.call(this);}\r
-tip.find('.tipsy-inner')[opts.html?'html':'text'](title||opts.fallback);var pos=$.extend({},$(this).offset(),{width:this.offsetWidth,height:this.offsetHeight});tip.get(0).className='tipsy';tip.remove().css({top:0,left:0,visibility:'hidden',display:'block'}).appendTo(document.body);var actualWidth=tip[0].offsetWidth,actualHeight=tip[0].offsetHeight;var gravity=(typeof opts.gravity=='function')?opts.gravity.call(this):opts.gravity;switch(gravity.charAt(0)){case'n':tip.css({top:pos.top+pos.height,left:pos.left+pos.width/2-actualWidth/2}).addClass('tipsy-north');break;case's':tip.css({top:pos.top-actualHeight,left:pos.left+pos.width/2-actualWidth/2}).addClass('tipsy-south');break;case'e':tip.css({top:pos.top+pos.height/2-actualHeight/2,left:pos.left-actualWidth}).addClass('tipsy-east');break;case'w':tip.css({top:pos.top+pos.height/2-actualHeight/2,left:pos.left+pos.width}).addClass('tipsy-west');break;}\r
-if(opts.fade){tip.css({opacity:0,display:'block',visibility:'visible'}).animate({opacity:0.8});}else{tip.css({visibility:'visible'});}},function(){$.data(this,'cancel.tipsy',false);var self=this;setTimeout(function(){if($.data(this,'cancel.tipsy'))return;var tip=$.data(self,'active.tipsy');if(opts.fade){tip.stop().fadeOut(function(){$(this).remove();});}else{tip.remove();}},100);});});};$.fn.tipsy.elementOptions=function(ele,options){return $.metadata?$.extend({},options,$(ele).metadata()):options;};$.fn.tipsy.defaults={fade:false,fallback:'',gravity:'n',html:false,title:'title'};$.fn.tipsy.autoNS=function(){return $(this).offset().top>($(document).scrollTop()+$(window).height()/2)?'s':'n';};$.fn.tipsy.autoWE=function(){return $(this).offset().left>($(document).scrollLeft()+$(window).width()/2)?'e':'w';};})(jQuery);\r
-\r
-//Lazy Load\r
-(function($){$.fn.lazyload=function(options){var settings={threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window};if(options){$.extend(settings,options);}\r
-var elements=this;if("scroll"==settings.event){$(settings.container).bind("scroll",function(event){var counter=0;elements.each(function(){if($.abovethetop(this,settings)||$.leftofbegin(this,settings)){}else if(!$.belowthefold(this,settings)&&!$.rightoffold(this,settings)){$(this).trigger("appear");}else{if(counter++>settings.failurelimit){return false;}}});var temp=$.grep(elements,function(element){return!element.loaded;});elements=$(temp);});}\r
-this.each(function(){var self=this;if(undefined==$(self).attr("original")){$(self).attr("original",$(self).attr("src"));}\r
-if("scroll"!=settings.event||undefined==$(self).attr("src")||settings.placeholder==$(self).attr("src")||($.abovethetop(self,settings)||$.leftofbegin(self,settings)||$.belowthefold(self,settings)||$.rightoffold(self,settings))){if(settings.placeholder){$(self).attr("src",settings.placeholder);}else{$(self).removeAttr("src");}\r
-self.loaded=false;}else{self.loaded=true;}\r
-$(self).one("appear",function(){if(!this.loaded){$("<img />").bind("load",function(){$(self).hide().attr("src",$(self).attr("original"))\r
-[settings.effect](settings.effectspeed);self.loaded=true;}).attr("src",$(self).attr("original"));};});if("scroll"!=settings.event){$(self).bind(settings.event,function(event){if(!self.loaded){$(self).trigger("appear");}});}});$(settings.container).trigger(settings.event);return this;};$.belowthefold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).height()+$(window).scrollTop();}else{var fold=$(settings.container).offset().top+$(settings.container).height();}\r
-return fold<=$(element).offset().top-settings.threshold;};$.rightoffold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).width()+$(window).scrollLeft();}else{var fold=$(settings.container).offset().left+$(settings.container).width();}\r
-return fold<=$(element).offset().left-settings.threshold;};$.abovethetop=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollTop();}else{var fold=$(settings.container).offset().top;}\r
-return fold>=$(element).offset().top+settings.threshold+$(element).height();};$.leftofbegin=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollLeft();}else{var fold=$(settings.container).offset().left;}\r
-return fold>=$(element).offset().left+settings.threshold+$(element).width();};$.extend($.expr[':'],{"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})","above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})","right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})","left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"});})(jQuery);\r
-\r
-//Marquee\r
-(function($){$.fn.rabrMarquee=function(options){var opts=$.extend({},$.fn.rabrMarquee.defaults,options);return this.each(function(){var $marquee=$(this);var _scrollObj=$marquee.get(0);var scrollW=$marquee.width();var scrollH=$marquee.height();var $element=$marquee.children();var $kids=$element.children();var scrollSize=0;var _type=(opts.direction=='left'||opts.direction=='right')?1:0;$element.css(_type?'width':'height',10000);if(opts.isEqual){scrollSize=$kids[_type?'outerWidth':'outerHeight']()*$kids.length;}else{$kids.each(function(){scrollSize+=$(this)[_type?'outerWidth':'outerHeight']();});}\r
-if(scrollSize<(_type?scrollW:scrollH))return;$element.append($kids.clone()).css(_type?'width':'height',scrollSize*2);var numMoved=0;function scrollFunc(){var _dir=(opts.direction=='left'||opts.direction=='right')?'scrollLeft':'scrollTop';if(opts.loop>0){numMoved+=opts.scrollAmount;if(numMoved>scrollSize*opts.loop){_scrollObj[_dir]=0;return clearInterval(moveId);}}\r
-if(opts.direction=='left'||opts.direction=='up'){_scrollObj[_dir]+=opts.scrollAmount;if(_scrollObj[_dir]>=scrollSize){_scrollObj[_dir]=0;}}else{_scrollObj[_dir]-=opts.scrollAmount;if(_scrollObj[_dir]<=0){_scrollObj[_dir]=scrollSize;}}}\r
-var moveId=setInterval(scrollFunc,opts.scrollDelay);$marquee.hover(function(){clearInterval(moveId);},function(){clearInterval(moveId);moveId=setInterval(scrollFunc,opts.scrollDelay);});});};$.fn.rabrMarquee.defaults={isEqual:true,loop:0,direction:'left',scrollAmount:1,scrollDelay:20};$.fn.rabrMarquee.setDefaults=function(settings){$.extend($.fn.rabrMarquee.defaults,settings);};})(jQuery);
\ No newline at end of file
+++ /dev/null
-/*
- * jquery.tools 1.1.2 - The missing UI library for the Web
- *
- * [tools.tooltip-1.1.3, tools.overlay-1.1.2, tools.expose-1.0.5]
- *
- * Copyright (c) 2009 Tero Piirainen
- * http://flowplayer.org/tools/
- *
- * Dual licensed under MIT and GPL 2+ licenses
- * http://www.opensource.org/licenses
- *
- * -----
- *
- * File generated: Thu Dec 24 07:22:44 GMT 2009
- */
-(function(c){var d=[];c.tools=c.tools||{};c.tools.tooltip={version:"1.1.3",conf:{effect:"toggle",fadeOutSpeed:"fast",tip:null,predelay:0,delay:30,opacity:1,lazy:undefined,position:["top","center"],offset:[0,0],cancelDefault:true,relative:false,oneInstance:true,events:{def:"mouseover,mouseout",input:"focus,blur",widget:"focus mouseover,blur mouseout",tooltip:"mouseover,mouseout"},api:false},addEffect:function(e,g,f){b[e]=[g,f]}};var b={toggle:[function(e){var f=this.getConf(),g=this.getTip(),h=f.opacity;if(h<1){g.css({opacity:h})}g.show();e.call()},function(e){this.getTip().hide();e.call()}],fade:[function(e){this.getTip().fadeIn(this.getConf().fadeInSpeed,e)},function(e){this.getTip().fadeOut(this.getConf().fadeOutSpeed,e)}]};function a(f,g){var p=this,k=c(this);f.data("tooltip",p);var l=f.next();if(g.tip){l=c(g.tip);if(l.length>1){l=f.nextAll(g.tip).eq(0);if(!l.length){l=f.parent().nextAll(g.tip).eq(0)}}}function o(u){var t=g.relative?f.position().top:f.offset().top,s=g.relative?f.position().left:f.offset().left,v=g.position[0];t-=l.outerHeight()-g.offset[0];s+=f.outerWidth()+g.offset[1];var q=l.outerHeight()+f.outerHeight();if(v=="center"){t+=q/2}if(v=="bottom"){t+=q}v=g.position[1];var r=l.outerWidth()+f.outerWidth();if(v=="center"){s-=r/2}if(v=="left"){s-=r}return{top:t,left:s}}var i=f.is(":input"),e=i&&f.is(":checkbox, :radio, select, :button"),h=f.attr("type"),n=g.events[h]||g.events[i?(e?"widget":"input"):"def"];n=n.split(/,\s*/);if(n.length!=2){throw"Tooltip: bad events configuration for "+h}f.bind(n[0],function(r){if(g.oneInstance){c.each(d,function(){this.hide()})}var q=l.data("trigger");if(q&&q[0]!=this){l.hide().stop(true,true)}r.target=this;p.show(r);n=g.events.tooltip.split(/,\s*/);l.bind(n[0],function(){p.show(r)});if(n[1]){l.bind(n[1],function(){p.hide(r)})}});f.bind(n[1],function(q){p.hide(q)});if(!c.browser.msie&&!i&&!g.predelay){f.mousemove(function(){if(!p.isShown()){f.triggerHandler("mouseover")}})}if(g.opacity<1){l.css("opacity",g.opacity)}var m=0,j=f.attr("title");if(j&&g.cancelDefault){f.removeAttr("title");f.data("title",j)}c.extend(p,{show:function(r){if(r){f=c(r.target)}clearTimeout(l.data("timer"));if(l.is(":animated")||l.is(":visible")){return p}function q(){l.data("trigger",f);var t=o(r);if(g.tip&&j){l.html(f.data("title"))}r=r||c.Event();r.type="onBeforeShow";k.trigger(r,[t]);if(r.isDefaultPrevented()){return p}t=o(r);l.css({position:"absolute",top:t.top,left:t.left});var s=b[g.effect];if(!s){throw'Nonexistent effect "'+g.effect+'"'}s[0].call(p,function(){r.type="onShow";k.trigger(r)})}if(g.predelay){clearTimeout(m);m=setTimeout(q,g.predelay)}else{q()}return p},hide:function(r){clearTimeout(l.data("timer"));clearTimeout(m);if(!l.is(":visible")){return}function q(){r=r||c.Event();r.type="onBeforeHide";k.trigger(r);if(r.isDefaultPrevented()){return}b[g.effect][1].call(p,function(){r.type="onHide";k.trigger(r)})}if(g.delay&&r){l.data("timer",setTimeout(q,g.delay))}else{q()}return p},isShown:function(){return l.is(":visible, :animated")},getConf:function(){return g},getTip:function(){return l},getTrigger:function(){return f},bind:function(q,r){k.bind(q,r);return p},onHide:function(q){return this.bind("onHide",q)},onBeforeShow:function(q){return this.bind("onBeforeShow",q)},onShow:function(q){return this.bind("onShow",q)},onBeforeHide:function(q){return this.bind("onBeforeHide",q)},unbind:function(q){k.unbind(q);return p}});c.each(g,function(q,r){if(c.isFunction(r)){p.bind(q,r)}})}c.prototype.tooltip=function(e){var f=this.eq(typeof e=="number"?e:0).data("tooltip");if(f){return f}var g=c.extend(true,{},c.tools.tooltip.conf);if(c.isFunction(e)){e={onBeforeShow:e}}else{if(typeof e=="string"){e={tip:e}}}e=c.extend(true,g,e);if(typeof e.position=="string"){e.position=e.position.split(/,?\s/)}if(e.lazy!==false&&(e.lazy===true||this.length>20)){this.one("mouseover",function(h){f=new a(c(this),e);f.show(h);d.push(f)})}else{this.each(function(){f=new a(c(this),e);d.push(f)})}return e.api?f:this}})(jQuery);
-(function(c){c.tools=c.tools||{};c.tools.overlay={version:"1.1.2",addEffect:function(e,f,g){b[e]=[f,g]},conf:{top:"10%",left:"center",absolute:false,speed:"normal",closeSpeed:"fast",effect:"default",close:null,oneInstance:true,closeOnClick:true,closeOnEsc:true,api:false,expose:null,target:null}};var b={};c.tools.overlay.addEffect("default",function(e){this.getOverlay().fadeIn(this.getConf().speed,e)},function(e){this.getOverlay().fadeOut(this.getConf().closeSpeed,e)});var d=[];function a(g,k){var o=this,m=c(this),n=c(window),j,i,h,e=k.expose&&c.tools.expose.version;var f=k.target||g.attr("rel");i=f?c(f):null||g;if(!i.length){throw"Could not find Overlay: "+f}if(g&&g.index(i)==-1){g.click(function(p){o.load(p);return p.preventDefault()})}c.each(k,function(p,q){if(c.isFunction(q)){m.bind(p,q)}});c.extend(o,{load:function(u){if(o.isOpened()){return o}var r=b[k.effect];if(!r){throw'Overlay: cannot find effect : "'+k.effect+'"'}if(k.oneInstance){c.each(d,function(){this.close(u)})}u=u||c.Event();u.type="onBeforeLoad";m.trigger(u);if(u.isDefaultPrevented()){return o}h=true;if(e){i.expose().load(u)}var t=k.top;var s=k.left;var p=i.outerWidth({margin:true});var q=i.outerHeight({margin:true});if(typeof t=="string"){t=t=="center"?Math.max((n.height()-q)/2,0):parseInt(t,10)/100*n.height()}if(s=="center"){s=Math.max((n.width()-p)/2,0)}if(!k.absolute){t+=n.scrollTop();s+=n.scrollLeft()}i.css({top:t,left:s,position:"absolute"});u.type="onStart";m.trigger(u);r[0].call(o,function(){if(h){u.type="onLoad";m.trigger(u)}});if(k.closeOnClick){c(document).bind("click.overlay",function(w){if(!o.isOpened()){return}var v=c(w.target);if(v.parents(i).length>1){return}c.each(d,function(){this.close(w)})})}if(k.closeOnEsc){c(document).unbind("keydown.overlay").bind("keydown.overlay",function(v){if(v.keyCode==27){c.each(d,function(){this.close(v)})}})}return o},close:function(q){if(!o.isOpened()){return o}q=q||c.Event();q.type="onBeforeClose";m.trigger(q);if(q.isDefaultPrevented()){return}h=false;b[k.effect][1].call(o,function(){q.type="onClose";m.trigger(q)});var p=true;c.each(d,function(){if(this.isOpened()){p=false}});if(p){c(document).unbind("click.overlay").unbind("keydown.overlay")}return o},getContent:function(){return i},getOverlay:function(){return i},getTrigger:function(){return g},getClosers:function(){return j},isOpened:function(){return h},getConf:function(){return k},bind:function(p,q){m.bind(p,q);return o},unbind:function(p){m.unbind(p);return o}});c.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(p,q){o[q]=function(r){return o.bind(q,r)}});if(e){if(typeof k.expose=="string"){k.expose={color:k.expose}}c.extend(k.expose,{api:true,closeOnClick:k.closeOnClick,closeOnEsc:false});var l=i.expose(k.expose);l.onBeforeClose(function(p){o.close(p)});o.onClose(function(p){l.close(p)})}j=i.find(k.close||".close");if(!j.length&&!k.close){j=c('<div class="close"></div>');i.prepend(j)}j.click(function(p){o.close(p)})}c.fn.overlay=function(e){var f=this.eq(typeof e=="number"?e:0).data("overlay");if(f){return f}if(c.isFunction(e)){e={onBeforeLoad:e}}var g=c.extend({},c.tools.overlay.conf);e=c.extend(true,g,e);this.each(function(){f=new a(c(this),e);d.push(f);c(this).data("overlay",f)});return e.api?f:this}})(jQuery);
-(function(b){b.tools=b.tools||{};b.tools.expose={version:"1.0.5",conf:{maskId:null,loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,color:"#456",api:false}};function a(){if(b.browser.msie){var f=b(document).height(),e=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,f-e<20?e:f]}return[b(window).width(),b(document).height()]}function c(h,g){var e=this,j=b(this),d=null,f=false,i=0;b.each(g,function(k,l){if(b.isFunction(l)){j.bind(k,l)}});b(window).resize(function(){e.fit()});b.extend(this,{getMask:function(){return d},getExposed:function(){return h},getConf:function(){return g},isLoaded:function(){return f},load:function(n){if(f){return e}i=h.eq(0).css("zIndex");if(g.maskId){d=b("#"+g.maskId)}if(!d||!d.length){var l=a();d=b("<div/>").css({position:"absolute",top:0,left:0,width:l[0],height:l[1],display:"none",opacity:0,zIndex:g.zIndex});if(g.maskId){d.attr("id",g.maskId)}b("body").append(d);var k=d.css("backgroundColor");if(!k||k=="transparent"||k=="rgba(0, 0, 0, 0)"){d.css("backgroundColor",g.color)}if(g.closeOnEsc){b(document).bind("keydown.unexpose",function(o){if(o.keyCode==27){e.close()}})}if(g.closeOnClick){d.bind("click.unexpose",function(o){e.close(o)})}}n=n||b.Event();n.type="onBeforeLoad";j.trigger(n);if(n.isDefaultPrevented()){return e}b.each(h,function(){var o=b(this);if(!/relative|absolute|fixed/i.test(o.css("position"))){o.css("position","relative")}});h.css({zIndex:Math.max(g.zIndex+1,i=="auto"?0:i)});var m=d.height();if(!this.isLoaded()){d.css({opacity:0,display:"block"}).fadeTo(g.loadSpeed,g.opacity,function(){if(d.height()!=m){d.css("height",m)}n.type="onLoad";j.trigger(n)})}f=true;return e},close:function(k){if(!f){return e}k=k||b.Event();k.type="onBeforeClose";j.trigger(k);if(k.isDefaultPrevented()){return e}d.fadeOut(g.closeSpeed,function(){k.type="onClose";j.trigger(k);h.css({zIndex:b.browser.msie?i:null})});f=false;return e},fit:function(){if(d){var k=a();d.css({width:k[0],height:k[1]})}},bind:function(k,l){j.bind(k,l);return e},unbind:function(k){j.unbind(k);return e}});b.each("onBeforeLoad,onLoad,onBeforeClose,onClose".split(","),function(k,l){e[l]=function(m){return e.bind(l,m)}})}b.fn.expose=function(d){var e=this.eq(typeof d=="number"?d:0).data("expose");if(e){return e}if(typeof d=="string"){d={color:d}}var f=b.extend({},b.tools.expose.conf);d=b.extend(f,d);this.each(function(){e=new c(b(this),d);b(this).data("expose",e)});return d.api?e:this}})(jQuery);
-$(function(){\r
- $(".rt_btn").click(function(e){\r
- e.preventDefault();\r
- if ($("#textbox").length > 0) {\r
- onRT($(this));\r
- } else {\r
- $("#info_head").after('<h2>What are you doing?</h2>' + formHTML);\r
- formFunc();\r
- onRT($(this));\r
- }\r
- });\r
- $(".retw_btn").live("click", function(e){\r
- e.preventDefault();\r
- onNwRT($(this));\r
- });\r
- $(".rt_undo").live("click", function(e){\r
- e.preventDefault();\r
- onUndoRt($(this));\r
- });\r
- $(".replie_btn").live("click", function(e){\r
- e.preventDefault();\r
- var replie_id = $(this).parent().parent().find(".status_word").find(".user_name").text();\r
- if ($("#textbox").length > 0) {\r
- onReplie($(this),e);\r
- } else {\r
- $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);\r
- formFunc();\r
- onReplie($(this),e);\r
- }\r
- });\r
-\r
- $("#list_send_btn").click(function(e){\r
- e.preventDefault();\r
- if ($("#textbox").length == 0) {\r
- $("#info_head").after('<h2>What are you doing?</h2>' + formHTML);\r
- formFunc();\r
- }\r
- });\r
- \r
- $(".favor_btn").live("click", function(e){\r
- e.preventDefault();\r
- onFavor($(this));\r
- });\r
-\r
- $("#list_follow_btn").live("click", function(e){\r
- e.preventDefault();\r
- var $this = $(this);\r
- var id = $("#info_name").text();\r
- updateSentTip("Following list " + id + "...", 5000, "ing");\r
- \r
- $.ajax({\r
- url: "ajax/list.php",\r
- type: "POST",\r
- data: "action=create&id=" + id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- updateSentTip("You have followed " + id + ".", 3000, "success");\r
- $this.after('<a class="info_btn_hover" id="list_block_btn" href="#">Unfollow</a>');\r
- $this.remove();\r
- } else {\r
- updateSentTip("Failed to follow list " + id + ".", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Failed to follow list " + id + ".", 3000, "failure");\r
- }\r
- });\r
- });\r
- \r
- \r
- $("#list_block_btn").live("click", function(e){\r
- e.preventDefault();\r
- var $this = $(this);\r
- var id = $("#info_name").text();\r
- updateSentTip("Unfollowing list " + id + "...");\r
- $.ajax({\r
- url: "ajax/list.php",\r
- type: "POST",\r
- data: "action=destory&id=" + id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- updateSentTip("You have unfollowed list " + id + ".", 3000, "success");\r
- $this.after('<a class="info_btn" id="list_follow_btn" href="javascript:void(0)">Unfollow</a>');\r
- $this.remove();\r
- } else {\r
- updateSentTip("Failed to unfollow list " + id + ".", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Failed to unfollow list " + id + ".", 3000, "failure");\r
- }\r
- });\r
- \r
- });\r
- \r
- document.onclick = function(){\r
- document.title =document.title.replace(/(\([0-9]+\))/g, "");\r
- }\r
- var args = location.href.split("?")[1]; \r
- if (!args.split("&")[1] || args.split("&")[1] == "p=1") {\r
- setInterval(function(){\r
- update();\r
- }, 2000*60);\r
- }\r
-});\r
-\r
-function update() {\r
- var since_id = $(".timeline li:first-child").find(".status_id").text();\r
- var list_id = $("#info_name").text();\r
- $.ajax({\r
- url: "ajax/updateList.php",\r
- type: "GET",\r
- dataType: "text",\r
- data: "id=" + list_id + "&since_id=" + since_id,\r
- success: function(msg) {\r
- \r
- if ($.trim(msg).indexOf("</li>") > 0) {\r
- $(".timeline").prepend(msg);\r
- var num = 0;\r
- if (document.title.match(/\d+/) != null) {\r
- num = parseInt(document.title.match(/\d+/));\r
- }\r
- document.title = "(" + (num+$(msg).length )+ ")" + document.title.replace(/(\([0-9]+\))/g, "");\r
- }\r
- \r
- }\r
- });\r
-}
\ No newline at end of file
+$(function(){
+ $(".rt_btn").click(function(e){
+ e.preventDefault();
+ if ($("#textbox").length > 0) {
+ onRT($(this));
+ } else {
+ $("#info_head").after('<h2>What are you doing?</h2>' + formHTML);
+ formFunc();
+ onRT($(this));
+ }
+ });
+ $(".retw_btn").live("click", function(e){
+ e.preventDefault();
+ onNwRT($(this));
+ });
+ $(".rt_undo").live("click", function(e){
+ e.preventDefault();
+ onUndoRt($(this));
+ });
+ $(".replie_btn").live("click", function(e){
+ e.preventDefault();
+ var replie_id = $(this).parent().parent().find(".status_word").find(".user_name").attr("id");
+ if ($("#textbox").length > 0) {
+ onReplie($(this),e);
+ } else {
+ $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);
+ formFunc();
+ onReplie($(this),e);
+ }
+ });
+
+ $("#list_send_btn").click(function(e){
+ e.preventDefault();
+ if ($("#textbox").length == 0) {
+ $("#info_head").after('<h2>What are you doing?</h2>' + formHTML);
+ formFunc();
+ }
+ });
+
+ $(".favor_btn").live("click", function(e){
+ e.preventDefault();
+ onFavor($(this));
+ });
+
+ $("#list_follow_btn").live("click", function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var id = $("#info_name").text();
+ updateSentTip("Following list " + id + "...", 5000, "ing");
+
+ $.ajax({
+ url: "ajax/list.php",
+ type: "POST",
+ data: "action=create&id=" + id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ updateSentTip("You have followed " + id + ".", 3000, "success");
+ $this.after('<a class="info_btn_hover" id="list_block_btn" href="#">Unfollow</a>');
+ $this.remove();
+ } else {
+ updateSentTip("Failed to follow list " + id + ".", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Failed to follow list " + id + ".", 3000, "failure");
+ }
+ });
+ });
+
+
+ $("#list_block_btn").live("click", function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var id = $("#info_name").text();
+ updateSentTip("Unfollowing list " + id + "...", 5000, "ing");
+ $.ajax({
+ url: "ajax/list.php",
+ type: "POST",
+ data: "action=destory&id=" + id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ updateSentTip("You have unfollowed list " + id + ".", 3000, "success");
+ $this.after('<a class="info_btn" id="list_follow_btn" href="#">Follow</a>');
+ $this.remove();
+ } else {
+ updateSentTip("Failed to unfollow list " + id + ".", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Failed to unfollow list " + id + ".", 3000, "failure");
+ }
+ });
+
+ });
+
+ document.onclick = function(){
+ document.title =document.title.replace(/(\([0-9]+\))/g, "");
+ }
+ var args = location.href.split("?")[1];
+ if (!args.split("&")[1] || args.split("&")[1] == "p=1") {
+ setInterval(function(){
+ update();
+ }, 2000*60);
+ }
+});
+
+function update() {
+ var since_id = $(".timeline li:first-child").find(".status_id").text();
+ var list_id = $("#info_name").text();
+ $.ajax({
+ url: "ajax/updateList.php",
+ type: "GET",
+ dataType: "text",
+ data: "id=" + list_id + "&since_id=" + since_id,
+ success: function(msg) {
+
+ if ($.trim(msg).indexOf("</li>") > 0) {
+ $(".timeline").prepend(msg);
+ var num = 0;
+ if (document.title.match(/\d+/) != null) {
+ num = parseInt(document.title.match(/\d+/));
+ }
+ document.title = "(" + (num+$(msg).length )+ ")" + document.title.replace(/(\([0-9]+\))/g, "");
+ }
+
+ }
+ });
+}
-$(function(){\r
- $(".delete_btn").hide();\r
- $(".rank_list").find("li").live("mouseover", function(){\r
- $(this).find(".delete_btn").css("display", "inline-block");\r
- });\r
- \r
- $(".rank_list").find("li").live("mouseout", function(){\r
- $(this).find(".delete_btn").hide();\r
- });\r
- \r
- $(".list_delete_btn").click(function(e){\r
- e.preventDefault();\r
- var $this = $(this); \r
- var list_id = $(".list_id").text();\r
- var member_name = $.trim($(this).parent().parent().find(".rank_screenname").text());\r
- member_name = member_name.replace("(","").replace(")","");\r
- var member_id = $.trim($(this).parent().parent().find("#rank_id").text());\r
- \r
- var confirm = window.confirm("Are you sure to delete " + member_name + "?");\r
- if (confirm) {\r
- updateSentTip("Deleting " + member_name + "...", 5000, "ing");\r
- $.ajax({\r
- url: "ajax/delete.php",\r
- type: "POST",\r
- data: "id=" + list_id + "&list_member=" + member_id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- $this.parent().parent().parent().remove();\r
- updateSentTip(member_name + " has been deleted.", 3000, "success");\r
- } else {\r
- updateSentTip("Failed to delete " + member_name + ".", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Failed to delete " + member_name + ".", 3000, "failure");\r
- }\r
- });\r
- }\r
- });\r
-});\r
+$(function(){
+ $(".delete_btn").hide();
+ $(".rank_list").find("li").live("mouseover", function(){
+ $(this).find(".delete_btn").css("display", "inline-block");
+ });
+
+ $(".rank_list").find("li").live("mouseout", function(){
+ $(this).find(".delete_btn").hide();
+ });
+
+ $(".list_delete_btn").click(function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var lidparts = $(".list_id").text().split("/");
+ var slug = lidparts[1];
+ var owner = lidparts[0].replace("@","");
+ var member_name = $.trim($(this).parent().parent().find(".rank_screenname").text());
+ member_name = member_name.replace("(","").replace(")","");
+ var member_id = $.trim($(this).parent().parent().find("#rank_id").text());
+
+ var confirm = window.confirm("Are you sure to delete " + member_name + "?");
+ if (confirm) {
+ updateSentTip("Deleting " + member_name + "...", 5000, "ing");
+ $.ajax({
+ url: "ajax/delete.php",
+ type: "POST",
+ data: "slug=" + slug + "&owner=" + owner + "&list_member=" + member_id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ $this.parent().parent().parent().remove();
+ updateSentTip(member_name + " has been deleted.", 3000, "success");
+ } else {
+ updateSentTip("Failed to delete " + member_name + ".", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Failed to delete " + member_name + ".", 3000, "failure");
+ }
+ });
+ }
+ });
+});
-$(function(){\r
- $(".rt_btn").live("click", function(e){\r
- e.preventDefault();\r
- onRT($(this));\r
- });\r
- \r
- $(".replie_btn").live("click", function(e){\r
- e.preventDefault();\r
- onReplie($(this),e);\r
- });\r
- $(".favor_btn").live("click", function(e){\r
- e.preventDefault();\r
- onFavor($(this));\r
- });\r
- $(".unfollow_list").live("click",function(e){\r
- e.preventDefault();\r
- var $this = $(this);\r
- var id = $(this).parent().parent().find(".rank_name").text().substr(1);\r
- updateSentTip("Unfollowing lists...", 5000, "ing");\r
- $.ajax({\r
- url: "ajax/list.php",\r
- type: "POST",\r
- data: "action=destory&id=" + id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- updateSentTip("Successfully unfollowing list" + id, 3000, "success");\r
- $this.remove();\r
- } else {\r
- updateSentTip("Unfollow failed. Please try again.", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Unfollow failed. Please try again.", 3000, "failure");\r
- }\r
- });\r
- \r
- });\r
-\r
- $(".delete_list").click(function(e){\r
- e.preventDefault();\r
- var $this = $(this); \r
- var list_id = $(this).parent().parent().find(".rank_name").text().substr(1);\r
- var confirm = window.confirm("Do you really want to delete" + list_id + "?");\r
- if (confirm) {\r
- updateSentTip("deleting list" + list_id + "...", 5000, "ing");\r
- $.ajax({\r
- url: "ajax/delete.php",\r
- type: "POST",\r
- data: "list_id=" + list_id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- $this.parent().parent().parent().remove();\r
- updateSentTip("Successfully deleting" + list_id, 3000, "success");\r
- } else {\r
- updateSentTip("Delete failed. Please try again.", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Delete failed. Please try again.", 3000, "failure");\r
- }\r
- });\r
- }\r
- });\r
- \r
- $("#list_create_btn").click(function(e){\r
- e.preventDefault();\r
- $("#list_form").toggle("fast");\r
- $("#list_name").focus().val("");\r
- $("#list_description").val("");\r
- $("#list_protect").removeAttr("checked");\r
- $("#pre_list_name").val("");\r
- $("#is_edit").val(0);\r
- });\r
- \r
- $(".edit_list").click(function(e){\r
- e.preventDefault();\r
- var parent = $(this).parent().parent();\r
- var list_name = parent.find(".rank_name").text().split("/")[1];\r
- var list_description = parent.find(".rank_description").text().slice(3);\r
- var list_protect = parent.find(".rank_count").text().indexOf("隐私群") > 0;\r
-\r
- $("#list_form").show("fast");\r
- $("#list_name").focus().val(list_name);\r
- $("#list_description").val(list_description);\r
- if (list_protect) { \r
- $("#list_protect").attr("checked", "checked");\r
- } else {\r
- $("#list_protect").removeAttr("checked");\r
- }\r
- $("#is_edit").val(1);\r
- $("#pre_list_name").val(list_name);\r
- })\r
- \r
- \r
- \r
- $(".add_member").click(function(e){\r
- e.preventDefault();\r
- $("#member_form").remove();\r
- var position = $(this).position();\r
- var liPosition = $(this).parent().parent().parent().position();\r
- var list_name = $(this).parent().parent().find(".rank_name").text().split("/")[1];\r
- $('<form method="POST" action="./lists.php?t=1" id="member_form">' +\r
- '<span>User ID:(Saperated with comma, e.g. JLHwung,twitter)</span>' +\r
- '<span><textarea type="text" name="list_members" id="list_members"></textarea></span>' +\r
- '<input type="hidden" name="member_list_name" value="' + list_name + '" />' +\r
- '<span><input type="submit" class="btn" id="member_submit" value="Submit" /> <input type="button" class="btn" id="member_cancel" value="Cancel" /></span>' +\r
- '</form>').appendTo("#statuses").css("left", liPosition.left + position.left).css("top", liPosition.top + position.top + 30);\r
- \r
- $("#member_cancel").click(function(){\r
- $("#member_form").remove();\r
- })\r
- })\r
- \r
-});
\ No newline at end of file
+$(function(){
+ $(".rt_btn").live("click", function(e){
+ e.preventDefault();
+ onRT($(this));
+ });
+
+ $(".replie_btn").live("click", function(e){
+ e.preventDefault();
+ onReplie($(this),e);
+ });
+ $(".favor_btn").live("click", function(e){
+ e.preventDefault();
+ onFavor($(this));
+ });
+ $(".unfollow_list").live("click",function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var id = $this.parent().parent().find(".rank_name").text().substr(1);
+ updateSentTip("Unfollowing lists...", 5000, "ing");
+ $.ajax({
+ url: "ajax/list.php",
+ type: "POST",
+ data: "action=destory&id=" + id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ updateSentTip("Successfully unfollowing list " + id, 3000, "success");
+ $this.parent().parent().parent().fadeOut("fast");
+ } else {
+ updateSentTip("Unfollow failed. Please try again.", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Unfollow failed. Please try again.", 3000, "failure");
+ }
+ });
+
+ });
+
+ $(".delete_list").live("click", function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var list_slug = $this.parent().parent().find(".rank_name").text().split("/")[1];
+ var confirm = window.confirm("Do you really want to delete " + list_slug + "?");
+ if (confirm) {
+ updateSentTip("deleting list " + list_slug + "...", 5000, "ing");
+ $.ajax({
+ url: "ajax/delete.php",
+ type: "POST",
+ data: "list_slug=" + list_slug,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ updateSentTip("Successfully deleting " + list_slug, 3000, "success");
+ $this.parent().parent().parent().fadeOut("fast");
+ } else {
+ updateSentTip("Delete failed. Please try again.", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Delete failed. Please try again.", 3000, "failure");
+ }
+ });
+ }
+ });
+
+ $("#list_create_btn").live("click", function(e){
+ e.preventDefault();
+ $("#list_form").toggle("fast");
+ $("#list_name").focus().val("");
+ $("#list_description").val("");
+ $("#list_protect").removeAttr("checked");
+ $("#pre_list_name").val("");
+ $("#list_spanid").val("");
+ $("#is_edit").val(0);
+ $("#list_submit").val("Create");
+ });
+
+ $(".edit_list").live("click", function(e){
+ e.preventDefault();
+ var parent = $(this).parent().parent();
+ var list_name = parent.find(".rank_name").text().split("/")[1];
+ var list_description = parent.find(".rank_description").text().slice(5);
+ var list_protect = parent.find(".rank_count").text().indexOf("Private") > 0;
+
+ $("#list_form").show("fast");
+ $("#list_name").focus().val(list_name);
+ $("#list_description").val(list_description);
+ if (list_protect) {
+ $("#list_protect").attr("checked", "checked");
+ } else {
+ $("#list_protect").removeAttr("checked");
+ }
+ $("#list_spanid").val(parent.attr("id"));
+ $("#is_edit").val(1);
+ $("#list_submit").val("Edit");
+ $("#pre_list_name").val(list_name);
+ })
+
+ $("#list_submit").live("click", function(e){
+ e.preventDefault();
+ var list_name = $("#list_name").val();
+ if (list_name.length == 0) {
+ window.alert("List name cannot be empty!");
+ return;
+ }
+ $('#list_form').slideToggle(300);
+ var list_description = $("#list_description").val();
+ var list_protect = $("#list_protect").attr("checked") == "checked" ? "private" : "public";
+ var pre_list_name = $("#pre_list_name").val();
+ var is_edit = $("#is_edit").val();
+ var postdata = {"name" : list_name,
+ "description" : list_description,
+ "mode" : list_protect};
+ if (is_edit == 1) {
+ postdata["slug"] = pre_list_name;
+ updateSentTip("editing list " + pre_list_name + "...", 5000, "ing");
+ var spanid = $("#list_spanid").val();
+ } else
+ updateSentTip("creating list " + list_name + "...", 5000, "ing");
+
+ $.ajax({
+ url: "ajax/modifyList.php",
+ type: "POST",
+ dataType: "json",
+ data: postdata,
+ success: function(msg) {
+ if (msg.result == 'success') {
+ if (is_edit == 1) {
+ updateSentTip("Successfully modifying list " + pre_list_name, 3000, "success");
+ var rank_content = $("#"+spanid);
+ rank_content.find(".rank_name").html('<a href="list.php?id='+msg.listuri+'"><em>'+msg.username+'/</em>'+list_name+'</a>');
+ var rank_count = rank_content.find(".rank_count");
+ rank_count.html(rank_count.html().replace(/Public|Private/, list_protect == "public" ? "Public" : "Private"));
+ rank_content.find(".rank_description").html("Bio: "+list_description);
+ }
+ else {
+ updateSentTip("Successfully creating list " + list_name, 3000, "success");
+ var html = '<li><span class=\"rank_img\"><img src="'+msg.imgurl+'" /></span>';
+ html += '<div class="rank_content" id="'+msg.contentid+'"><span class="rank_num"><span class="rank_name">';
+ html +='<a href="list.php?id='+msg.listuri+'"><em>'+msg.username+'/</em>'+list_name+'</a>';
+ html += '</span></span><span class="rank_count">Followers: 0 Members: 0 '+(list_protect == "public" ? "Public" : "Private")+'</span>';
+ html += '<span class="rank_description">Bio: '+list_description+'</span>';
+ html += '<span id="list_action"><a id="btn" href="#" class="edit_list">Edit</a> <a id="btn" href="#" class="delete_list">Delete</a> <a id="btn" href="#" class="add_member">Add Members</a></span>';
+ html += "</div></li>";
+ $(html).prependTo($(".rank_list")).fadeIn('fast');
+ }
+ } else {
+ if (is_edit == 1)
+ updateSentTip("Editing failed. Please try again.", 3000, "failure");
+ else
+ updateSentTip("Creating failed. Please try again.", 3000, "failure");
+ }
+ }
+ });
+ });
+
+ $(".add_member").live("click", function(e){
+ e.preventDefault();
+ $("#member_form").remove();
+ var position = $(this).position();
+ var liPosition = $(this).parent().parent().parent().position();
+ var list_name = $(this).parent().parent().find(".rank_name").text().split("/")[1];
+ var owner_name = $(this).parent().parent().find(".rank_name").text().split("/")[0];
+ var rank_count = $(this).parent().parent().find(".rank_count");
+ owner_name = owner_name.split("@")[1];
+ $('<form method="POST" action="./lists.php?t=1" id="member_form">' +
+ '<span>User ID:(Saperated with comma, e.g. JLHwung,twitter)</span>' +
+ '<span><textarea type="text" name="list_members" id="list_members"></textarea></span>' +
+ '<span><input type="submit" class="btn" id="member_submit" value="Submit" /> <input type="button" class="btn" id="member_cancel" value="Cancel" /></span>' +
+ '</form>').appendTo("#statuses").css("left", liPosition.left + position.left).css("top", liPosition.top + position.top + 30);
+
+ $("#member_cancel").click(function(){
+ $("#member_form").remove();
+ });
+
+ $("#member_submit").click(function(e){
+ e.preventDefault();
+ var list_members = $("#list_members").val();
+ if (list_members.length <= 0) {
+ window.alert("User IDs cannot be empty!");
+ return;
+ }
+ $("#member_form").remove();
+ updateSentTip("adding members to list " + list_name + "...", 5000, "ing");
+ $.ajax({
+ url: "ajax/addMembersToList.php",
+ type: "POST",
+ data: { "slug" : list_name,
+ "owner" : owner_name,
+ "add_members" : list_members},
+ success: function(msg) {
+ if (msg.indexOf("error") >= 0) {
+ updateSentTip("Adding failed. Please try again.", 3000, "failure");
+ } else {
+ updateSentTip("Successfully adding members to list " + list_name, 3000, "success");
+ rank_count.html(msg);
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Adding failed. Please try again.", 3000, "failure");
+ }
+ });
+ })
+ })
+
+});
+++ /dev/null
-$(function(){\r
- document.getElementById("submit_btn").disabled=false; \r
- leaveWord();\r
- $("#textbox").focus();\r
- $("#textbox").keydown(leaveWord).keyup(leaveWord).keydown(function(event){\r
- if (event.ctrlKey && event.keyCode==13) {\r
- $("form:first").submit();\r
- }\r
- });\r
- \r
- $(".submit_btn").click(function(){\r
- document.getElementById("submit_btn").disabled=true; \r
- });\r
- \r
- $(".rt_btn").live("click", function(){\r
- $("#textbox").val("RT @" + $(this).parent().find(".status_word").text());\r
- $("#textbox").focus();\r
- leaveWord();\r
- });\r
- \r
- $(".replie_btn").live("click", function(){\r
- var replie_id = $(this).parent().find(".status_word").find(".user_name").text();\r
- $("#textbox").val("@" + replie_id + " ");\r
- $("#textbox").focus();\r
- $("#in_reply_to").val($(this).parent().find(".status_id").text());\r
- leaveWord();\r
- });\r
-});\r
-\r
-function leaveWord() {\r
- var leave = 140-$("#textbox").val().length;\r
- if (leave < 0) {\r
- $("#tip").css("color","#CC0000");\r
- $("#tip b").css("color","#CC0000");\r
- $("#tip").html("<b>" + (-leave) + "</b>");\r
- } else {\r
- $("#tip").css("color","#000000");\r
- $("#tip b").css("color","#000000");\r
- $("#tip").html("<b>" + leave + "</b>");\r
- }\r
-}
\ No newline at end of file
-//message function\r
-$(function () {\r
- formFunc();\r
- var temp = [];\r
- var auto = [];\r
- $("a.user_name").each(function(){\r
- var u = this.text;\r
- if (!(u in temp)) {\r
- temp[u] = true;\r
- auto.push(u);\r
- }\r
- });\r
- $("#sent_id").autocomplete(auto);\r
- $("#allMessage").click(function(e) {\r
- var $this = $(e.target);\r
- var type = $this.attr('class');\r
- switch(type) {\r
- case 'msg_replie_btn':\r
- e.preventDefault();\r
- $("#sent_id").val($this.parent().parent().find(".status_word").find(".user_name").text());\r
- $("#textbox").focus();\r
- break;\r
- case 'msg_delete_btn':\r
- e.preventDefault();\r
- var message_id = $.trim($this.parent().parent().find(".status_id").text());\r
- var confirm = window.confirm("Are you sure to delete this message?");\r
-\r
- if (confirm) {\r
- updateSentTip("Deleting message...", 5000, "ing");\r
- $.ajax({\r
- url: "ajax/delete.php",\r
- type: "POST",\r
- data: "message_id=" + message_id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- $this.parent().parent().parent().remove();\r
- updateSentTip("Message deleted.", 3000, "success");\r
- } else {\r
- updateSentTip("Failed to delete this message!", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Failed to delete this message!", 3000, "failure");\r
- }\r
- });\r
- }\r
- break;\r
- }\r
- });\r
-});
\ No newline at end of file
+//message function
+$(function () {
+ formFunc();
+ var temp = [];
+ var auto = [];
+ $("a.user_name").each(function(){
+ var u = this.id;
+ if (!(u in temp)) {
+ temp[u] = true;
+ auto.push(u);
+ }
+ });
+ $("#sent_id").autocomplete(auto);
+ $("#allMessage").click(function(e) {
+ var $this = $(e.target);
+ var type = $this.attr('class');
+ switch(type) {
+ case 'msg_replie_btn':
+ e.preventDefault();
+ $("#sent_id").val($this.parent().parent().find(".status_word").find(".user_name").attr("id"));
+ $("#textbox").focus();
+ break;
+ case 'msg_delete_btn':
+ e.preventDefault();
+ var message_id = $.trim($this.parent().parent().find(".status_id").text());
+ var confirm = window.confirm("Are you sure to delete this message?");
+
+ if (confirm) {
+ updateSentTip("Deleting message...", 5000, "ing");
+ $.ajax({
+ url: "ajax/delete.php",
+ type: "POST",
+ data: "message_id=" + message_id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ $this.parent().parent().parent().remove();
+ updateSentTip("Message deleted.", 3000, "success");
+ } else {
+ updateSentTip("Failed to delete this message!", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Failed to delete this message!", 3000, "failure");
+ }
+ });
+ }
+ break;
+ }
+ });
+});
+++ /dev/null
-$(function(){\r
- $("#analyze").click(function(){\r
- var user_1 = $.trim($("#user_1").val());\r
- var user_2 = $.trim($("#user_2").val());\r
- if(user_1 === $.trim($("#sideid").text())){\r
- $("#descr").animate({opacity: 0}, 200, function(){\r
- $("#descr").html("Due to the the limitation of API, you cannot enter your name in the first blank!").css("color", "#83161F").animate({opacity: 1}, 100);\r
- });\r
- return;\r
- };\r
- if(user_1 !== '' & user_2 !== ''){\r
- $("#analyze").val("").addClass("loading");\r
- $.ajax({\r
- url: "ajax/getRelationship.php" + "?target=" + user_1 + "&source=" + user_2,\r
- type: "GET",\r
- dataType: "text",\r
- data: "target=" + user_1 + "&source=" + user_2,\r
- success: function(msg) {\r
- msg = $.trim(msg);\r
- if(msg.length > 0 && msg !== "error") {\r
- $("#analyze").val("Analyze").removeClass("loading");\r
- $("#descr").html("Rabr Nexus is a tool helps you analyze relationships between you or the others.").css("color", "#333333");\r
- $("#result").animate({opacity: 0}, 500, function(){\r
- $("#result").removeClass("intro").html(msg).animate({opacity: 1}, 500);\r
- });\r
- }else{\r
- $("#descr").animate({opacity: 0}, 200, function(){\r
- $("#descr").html("Something went wrong, please try again!").css("color", "#83161F").animate({opacity: 1}, 100);\r
- });\r
- }\r
- },\r
- error: function() {\r
- $("#descr").animate({opacity: 0}, 200, function(){\r
- $("#descr").html("Something went wrong, please try again!").css("color", "#83161F").animate({opacity: 1}, 100);\r
- });\r
- }\r
- });\r
- }\r
- });\r
- });
\ No newline at end of file
+++ /dev/null
-$(document).ready(function(){\r
- formFunc();\r
- $(".rt_btn").live("click", function(e){\r
- e.preventDefault();\r
- onRT($(this));\r
- });\r
-\r
- $(".replie_btn").live("click", function(e){\r
- e.preventDefault();\r
- onReplie($(this),e);\r
- });\r
- $(".favor_btn").live("click", function(e){\r
- e.preventDefault();\r
- onFavor($(this));\r
- });\r
- $(".delete_btn").live("click", function(e){\r
- e.preventDefault();\r
- onDelete($(this), "Tweet");\r
- });\r
- $("#submit_btn").click(function(e){\r
- updateStatus();\r
- e.preventDefault();\r
- });\r
- });\r
source.hide().slideDown('fast');
var statusid = $.trim($(msg).find('.status_id').text());
var statusText = $.trim($(msg).find('.tweet').html());
+ var statusDate = $.trim($(msg).find('span.date a').attr('id'));
embrTweet(source);
$(".mine").slideDown("fast");
$("#full_status").fadeIn("fast");
$("#currently .status-text").hide().text(limitation(text)).fadeIn("fast");
- $("#latest_meta").hide().html("<a target=\"_blank\" href=\"status.php?id="+statusid+"\">less than 5 seconds ago</a>").fadeIn("fast");
+ $("#latest_meta").hide().html("<a target=\"_blank\" href=\"status.php?id="+statusid+"\" id=\""+statusDate+"\">less than 5 seconds ago</a>").fadeIn("fast");
$("#currently .full-text").hide().html(statusText);
- $("#full_meta").hide().html("<a target=\"_blank\" href=\"status.php?id="+statusid+"\">less than 5 seconds ago</a>");
+ $("#full_meta").hide().html("<a target=\"_blank\" href=\"status.php?id="+statusid+"\" id=\""+statusDate+"\">less than 5 seconds ago</a>");
$("#full_meta a,.full-text a").click(function (e){e.stopPropagation();});
previewMedia(source);
freshProfile();
if($rm.length > 0){
$rm.fadeIn('fast');
}else{
- var id = $that.find(".status_word").find(".user_name").text();
+ var id = $that.find(".status_word").find(".user_name").attr("id");
$that.addClass("loading");
$.ajax({
url: 'ajax/relation.php',
}
function rmmention($this,e){
- var replie_id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+ var replie_id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
var in_reply_id = $this.parent().parent().parent().find(".status_id").text();
var text = "@"+replie_id;
var mode = "In reply to ";
+ if ($("#textbox").length <= 0) {
+ $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);
+ formFunc();
+ }
scroll(0,0);
$("#textbox").focus().val($("#textbox").val()+text+' ');
$("#in_reply_to").val(in_reply_id);
leaveWord();
}
function rmdm($this,e){
- var replie_id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+ var replie_id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
var text = "D "+replie_id;
+ if ($("#textbox").length <= 0) {
+ $("#info_head").after('<h2>Send message to ' + replie_id + '</h2>' + formHTML);
+ formFunc();
+ }
scroll(0,0);
$("#textbox").focus().val($("#textbox").val()+text+' ');;
$("#in_reply_to").val(e.target.parent().parent().parent().find(".status_id").text());
leaveWord();
}
function rmfollow($this){
- var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+ var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
updateSentTip("Following "+id+"...",5e3,"ing");
$.ajax({
url: "ajax/relation.php",
});
}
function rmunfollow($this){
- var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+ var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
if (confirm("Are you sure to unfollow "+id+" ?")){
updateSentTip("Unfollowing "+id+"...",5e3,"ing");
$.ajax({
}
}
function rmblock($this){
- var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+ var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
if (confirm("Are you sure to block "+id+" ?")){
updateSentTip("Blocking "+id+"...",5e3,"ing");
$.ajax({
}
}
function rmunblock($this){
- var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+ var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
if (confirm("Are you sure to unblock "+id+" ?")){
updateSentTip("Unblocking "+id+"...",5e3,"ing");
$.ajax({
}
}
function rmspam($this){
- var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+ var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
if (confirm("Are you sure to report "+id+" ?")){
updateSentTip("Reporting "+id+" as a spammer...",5e3,"ing");
$.ajax({
}
function onReplie($this,e){
var $word = $this.parent().parent().find(".status_word");
- var replie_id = $word.find(".user_name").text();
+ var replie_id = $word.find(".user_name").attr("id");
var in_reply_id = $this.parent().parent().find(".status_id").text();
var text = "@"+replie_id;
var start = text.length+1;
leaveWord();
}
function onRT($this){
- var replie_id = $this.parent().parent().find(".status_word").find(".user_name").text();
+ var replie_id = $this.parent().parent().find(".status_word").find(".user_name").attr("id");
scroll(0,0);
var status_word = $this.parent().parent().find(".status_word").clone();
status_word.find('.tweet a[rel=noreferrer]').each(function(){
- $(this).text($(this).attr('href'));
+ var imgsrc = $(this).attr('href');
+ if (imgsrc.indexOf('img.php') > -1) {
+ imgsrc = imgsrc.substr(15);
+ }
+ $(this).text(imgsrc);
});
- $("#textbox").focus().val(" RT @"+replie_id+":"+status_word.text().replace(replie_id,"")).caret(0);
+ $("#textbox").focus().val(" RT @"+replie_id+":"+status_word.find('.tweet').text()).caret(0);
$("#full_status,#latest_meta,#full_meta,#currently .full-text,#latest_meta").hide();
$("#currently .status-text").html("Retweet @"+replie_id+"'s tweet with comment.");
leaveWord();
}
function onReplieDM($this){
- var replie_id = $this.parent().parent().find(".status_word").find(".user_name").text();
+ var replie_id = $this.parent().parent().find(".status_word").find(".user_name").attr("id");
var text = "D "+replie_id;
scroll(0,0);
$("#textbox").focus().val($("#textbox").val()+text+' ');
if (msg.length >= 0){
statusBody.parent().addClass("retweet");
statusBody.find(".source").hide();
- statusBody.find(".status_info").append("<span class=\"rt_source\">Retweeted by you from <a rel=\"nofollow\" href=\"http://code.google.com/p/embr/\">embr</a></span>").fadeIn("fast");
+ statusBody.find(".status_info").append("<span class=\"rt_source\">Retweeted by you.").fadeIn("fast");
statusBody.find(".date").hide();
- statusBody.find(".status_info").append("<span class=\"rt_undo\" title=\"Your followers will no longer see the tweet as retweeted by you.\"> <a href=\"#\">(Undo)</a><span class=\"rt_id\" style=\"display: none;\">"+msg+"</span></span>").fadeIn("fast");
+ statusBody.find(".status_info").append("<span class=\"rt_undos\" title=\"Your followers will no longer see the tweet as retweeted by you.\"> <a class=\"rt_undo\" href=\"#\">(Undo)</a><span class=\"rt_id\" style=\"display: none;\">"+msg+"</span></span>").fadeIn("fast");
updateSentTip("This tweet has been retweeted!",3e3,"success");
- $(".rt_undo").tipsy({
+ $(".rt_undos").tipsy({
gravity: 's'
});
}else{
if (statusInfo.find(".rt_source").size() === 1){
statusInfo.find(".source").show().find(".date").show();
statusInfo.find(".rt_source").remove()
- statusInfo.find(".rt_undo").remove();
+ statusInfo.find(".rt_undos").remove();
statusBody.removeClass("retweet");
}else{
statusBody.fadeOut("fast");
if(d == 't.cn' || d == 'goo.gl' || d == 'bit.ly' || d == 'j.mp' || d == 'is.gd' || d == '163.fm') {
e.preventDefault();
updateSentTip('Unshorting the URL...',3e3,'ing');
- $.getJSON('http://api.longurl.org/v2/expand?url=' +encodeURIComponent($this.attr('href')) + '&format=json&callback=?', function(data) {
- if('long-url' in data) {
- var url = data['long-url'];
+ $.getJSON('ajax/expand.php?url=' +encodeURIComponent($this.attr('href')), function(data) {
+ if('expanded_url' in data) {
+ var url = data['expanded_url'];
if (url != $this.attr('href')) {
var tmp = url.split("://");
$this.text(tmp[1]);
$(this).addClass("reply");
}
});
-};
\ No newline at end of file
+};
$(function(){
+ var theAC = null;
+ var searches = null;
+
+ $("#btn_savesearch").click(function(e){
+ var nowsearch = $("#query").val().trim();
+ if (theAC == null || searches == null || nowsearch == '') {
+ updateSentTip("Error in saving search!", 3000, "failure");
+ return;
+ }
+
+ var sameone = false;
+ $.each(searches, function(){
+ if (nowsearch == this[1]) {
+ updateSentTip("Duplicated search!", 3000, "failure");
+ sameone = true;
+ }
+ });
+ if (sameone) return;
+
+ $.ajax({
+ url: "ajax/savedSearches.php",
+ data: {method: "save", query: nowsearch},
+ type: "GET",
+ success: function(msg) {
+ if (msg.indexOf("[") >= 0) {
+ updateSentTip("Successfully saved search!", 3000, "success");
+ var theData = eval("("+msg+")");
+ searches.push(theData);
+ theAC.flushCache();
+ theAC.setOptions({data:searches});
+ }
+ else
+ updateSentTip("Error in saving search!", 3000, "failure");
+ },
+ error: function(msg) {
+ updateSentTip("Error in saving search!", 3000, "failure");
+ }
+ });
+ });
+
+ $.ajax({
+ url: "ajax/savedSearches.php",
+ data: {method: "list"},
+ type: "GET",
+ success: function(msg) {
+ searches = eval("("+msg+")");
+ $(".ss_delete_btn").live("click",function(e){
+ e.preventDefault();
+ $("#query").val("");
+ if (theAC != null && searches != null) {
+ var selectedId = $(this).attr("id").substr(3);
+ var selectedIndex = -1;
+ $.each(searches, function(ind, ele){
+ if (ele[0] == selectedId)
+ selectedIndex = ind;
+ });
+ if (selectedIndex != -1) {
+ var cfm = window.confirm("Are you sure to delete the saved search \"" + searches[selectedIndex][1] + "\"?");
+ if (!cfm) return;
+ $.ajax({
+ url: "ajax/savedSearches.php",
+ data: {method: "delete", ssid: selectedId},
+ type: "GET",
+ success: function(m) {
+ if (m.indexOf("success") >= 0)
+ updateSentTip("Successfully deleted saved search!", 3000, "success");
+ else
+ updateSentTip("Error in deleting saved search!", 3000, "failure");
+ searches.splice(selectedIndex, 1);
+ theAC.flushCache();
+ theAC.setOptions({data:searches});
+ },
+ error: function(m) {
+ updateSentTip("Error in deleting saved search!", 3000, "failure");
+ }
+ });
+ }
+ }
+ });
+ theAC = $("#query").autocomplete(searches, {
+ minChars:0,
+ formatItem:function(data, i, total) {
+ return "<a class=\"ss_delete_btn\" href=\"#\" id=\"sgt" + data[0] + "\" >delete</a>" + data[1];
+ },
+ formatMatch:function(data, i, total) {
+ return data[1];
+ },
+ formatResult:function(data) {
+ return data[1];
+ }
+ });
+ },
+ error: function(msg) {
+ updateSentTip("Failed to fetch the saved searches!", 3000, "failure");
+ }
+ });
+
formHTML = "<h2>What are you doing?</h2>" + formHTML + "<div class=\"clear\"></div>";
$("#allTimeline").click(function(e) {
var $this = $(e.target);
checkbox('sidebarscroll',"#sidebarscroll",true,function(){
$(window).unbind('scroll',scroller);
});
+ checkbox('shownick',"#shownick",false);
checkbox('twitterbg',"#twitterbg",false,function(){
if($.cookie('twitterbg') === 'true'){
$.ajax({
$.cookie('Bgcolor', '');
$.cookie('Bgimage','');
$.cookie('showpic','true');
+ $.cookie('shownick','false');
$.cookie('mediaPre','true');
$.cookie('p_avatar','false');
$.cookie('homeInterval',1);
e.preventDefault();
ProfileImageUpload();
});
+ $("#BackgroundUpload").click(function (e) {
+ e.preventDefault();
+ ProfileBackgroundUpload();
+ });
$("#saveProfile").click(function(e){
e.preventDefault();
$.ajax({
}
});
});
+
+ $("#tile").click(function() {
+ ProfileBackgroundTile($(this).prop('checked'));
+ });
});
function checkbox(c,id,d,extra){
var $id = $(id);
dataType: "json",
success: function(msg){
freshProfile();
- $(".settings > img").attr("src",$.cookie("imgurl"));
+ $("#avatarimg").attr("src",$.cookie("imgurl"));
}
});
updateSentTip("Your profile image has been uploaded!", 3000, "success");
}
})
return false;
-}
\ No newline at end of file
+}
+
+function ProfileBackgroundUpload() {
+ updateSentTip("Uploading your profile background...", 10000, "ing");
+ $.ajaxFileUpload({
+ url: 'ajax/uploadImage.php?do=background',
+ timeout: 60000,
+ secureuri: false,
+ fileElementId: 'profile_background',
+ dataType: 'json',
+ success: function (data, status) {
+ if (typeof(console) !== 'undefined' && console != null) {
+ console.info(data);
+ }
+ if (typeof(data.result) != 'undefined' && data.result == "success") {
+ if ($.cookie('twitterbg') === 'true') {
+ $.ajax({
+ url:'ajax/updateProfile.php?extra=bg',
+ dataType:'json',
+ success: function() { location.reload(); }
+ });
+ }
+ $("#backgroundimg").attr("src",data.url);
+ updateSentTip("Your profile background has been uploaded!", 3000, "success");
+ } else {
+ updateSentTip("Failed to upload, please try again.", 3000, "failure");
+ }
+ },
+ error: function (data, status, e) {
+ updateSentTip("Failed to upload, please try again.", 3000, "failure");
+ }
+ })
+ return false;
+}
+
+function ProfileBackgroundTile(tile) {
+ updateSentTip("Updating your profile background tile...", 3000, "ing");
+ $.ajax({
+ url: 'ajax/uploadImage.php?do=background',
+ type: 'POST',
+ data: {'tile': tile},
+ dataType: 'json',
+ success: function (data, status) {
+ if (typeof(console) !== 'undefined' && console != null) {
+ console.info(data);
+ }
+ if (typeof(data.result) != 'undefined' && data.result == "success") {
+ if ($.cookie('twitterbg') === 'true') {
+ $.ajax({
+ url:'ajax/updateProfile.php?extra=bg',
+ dataType:'json',
+ success: function() { location.reload(); }
+ });
+ }
+ var isok = data.tile === 'true';
+ if (isok != $("#tile").prop('checked')) {
+ $("#tile").prop('checked', isok);
+ updateSentTip("Failed to update, please try again.", 3000, "failure");
+ }
+ else {
+ updateSentTip("Your profile background tile has been updated!", 3000, "success");
+ }
+ } else {
+ updateSentTip("Failed to update, please try again.", 3000, "failure");
+ }
+ },
+ error: function (data, status, e) {
+ updateSentTip("Failed to update, please try again.", 3000, "failure");
+ }
+ })
+ return false;
+}
-$(function(){\r
- $("#allTimeline").click(function(e) {\r
- var $this = $(e.target);\r
- var type = $this.attr('class');\r
- switch(type) {\r
- case 'rt_btn':\r
- e.preventDefault();\r
- if ($("#textbox").length > 0) {\r
- onInfoRT($this);\r
- } else {\r
- $("#info_head").after('<h2>What\'s happening?</h2>' + formHTML);\r
- formFunc();\r
- onInfoRT($this);\r
- }\r
- break;\r
- case 'retw_btn':\r
- e.preventDefault();\r
- onNwRT($this);\r
- break;\r
- case 'replie_btn':\r
- e.preventDefault();\r
- var replie_id = $this.parent().parent().find(".status_word").find(".user_name").text();\r
- if ($("#textbox").length > 0) {\r
- onInfoReplie($this,e);\r
- } else {\r
- $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);\r
- formFunc();\r
- onInfoReplie($this,e);\r
- }\r
- break;\r
- case 'favor_btn':\r
- e.preventDefault();\r
- onFavor($this);\r
- break;\r
- case 'unfav_btn':\r
- e.preventDefault();\r
- UnFavor($this);\r
- break;\r
- case 'rt_undo':\r
- e.preventDefault();\r
- onUndoRt($this);\r
- break;\r
- }\r
- });\r
-\r
- $("#info_reply_btn").click(function(){\r
- var replie_id = $("#info_name").text();\r
- if ($("#textbox").length > 0) {\r
- $("#textbox").val($("#textbox").val() + "@" + replie_id + " ");\r
- $("#textbox").focus();\r
- leaveWord();\r
- } else {\r
- $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);\r
- formFunc();\r
- $("#textbox").val($("#textbox").val() + "@" + replie_id + " ");\r
- $("#textbox").focus();\r
- leaveWord();\r
- }\r
- });\r
- if (getCookie("infoShow") == "hide") {\r
- onHide();\r
- }\r
- $("#info_hide_btn").click(function(){\r
- onHide();\r
- });\r
-\r
- $("#info_follow_btn").click(function(e){\r
- e.preventDefault();\r
- var $this = $(this);\r
- var id = $("#info_name").text();\r
- updateSentTip("Following " + id + "...", 5000, "ing");\r
- $.ajax({\r
- url: "ajax/relation.php",\r
- type: "POST",\r
- data: "action=create&id=" + id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- updateSentTip("You have followed " + id + "!", 3000, "success");\r
- $this.after('<a class="btn btn-red" id="info_block_btn" href="javascript:void(0)">Unfollow</a>');\r
- $this.remove();\r
- if($('#unblock') != null){\r
- $('#unblock').after('<a class="btn" id="block_btn" href="javascript:void(0)">Block</a>');\r
- $('#unblock').remove();\r
- }\r
- } else {\r
- updateSentTip("Failed to follow " + id + ", please try again.", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Failed to follow " + id + ", please try again.", 3000, "failure");\r
- }\r
- });\r
- });\r
-\r
- $("#info_block_btn").click(function(e){\r
- e.preventDefault();\r
- var $this = $(this);\r
- var id = $("#info_name").text();\r
- if (confirm("Are you sure to unfollow " + id + " ?")) {\r
- updateSentTip("Unfollowing " + id + "...", 5000, "ing");\r
- $.ajax({\r
- url: "ajax/relation.php",\r
- type: "POST",\r
- data: "action=destory&id=" + id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- updateSentTip("You have unfollowed " + id + "!", 3000, "success");\r
- $this.after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');\r
- $this.remove();\r
- } else {\r
- updateSentTip("Failed to unfollow " + id + ", please try again.", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Failed to unfollow " + id + ", please try again.", 3000, "failure");\r
- }\r
- });\r
- }\r
- });\r
-\r
- $("#block_btn").click(function(e){\r
- e.preventDefault();\r
- var $this = $(this);\r
- var id = $("#info_name").text();\r
- if (confirm("Are you sure to block " + id + " ?")) {\r
- updateSentTip("Blocking " + id + "...", 5000, "ing");\r
- $.ajax({\r
- url: "ajax/relation.php",\r
- type: "POST",\r
- data: "action=block&id=" + id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- updateSentTip("You have blocked " + id + "!", 3000, "success");\r
- $this.after('<a class="btn" id="unblock_btn" href="javascript:void(0)">Unblock</a>');\r
- $this.remove();\r
- if($('#info_block_btn') != null){\r
- $('#info_block_btn').after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');\r
- $('#info_block_btn').remove();\r
- }\r
- } else {\r
- updateSentTip("Failed to block " + id + ", please try again.", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Failed to block " + id + ", please try again.", 3000, "failure");\r
- }\r
- });\r
- }\r
- });\r
-\r
- $("#unblock_btn").click(function(e){\r
- e.preventDefault();\r
- var $this = $(this);\r
- var id = $("#info_name").text();\r
- if (confirm("Are you sure to unblock " + id + " ?")) {\r
- updateSentTip("Unblocking...", 5000, "ing");\r
- $.ajax({\r
- url: "ajax/relation.php",\r
- type: "POST",\r
- data: "action=unblock&id=" + id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- updateSentTip("Unblocked.", 3000, "success");\r
- $this.after('<a class="btn" id="block_btn" href="javascript:void(0)">Block</a>');\r
- $this.remove();\r
- } else {\r
- updateSentTip("Failed to unblock, please try again.", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Failed to unblock, please try again.", 3000, "failure");\r
- }\r
- });\r
- }\r
- });\r
- \r
- $("#report_btn").click(function(e){\r
- e.preventDefault();\r
- var $this = $(this);\r
- var id = $("#info_name").text();\r
- if (confirm("Are you sure to report " + id + " for spam?")) {\r
- updateSentTip("Reporting " + id + " for spam...", 5000, "ing");\r
- $.ajax({\r
- url: "ajax/relation.php",\r
- type: "POST",\r
- data: "action=report&id=" + id,\r
- success: function(msg) {\r
- if (msg.indexOf("success") >= 0) {\r
- updateSentTip("You have reported " + id + " for spam!", 3000, "success");\r
- /*\r
- $this.after('<a class="btn" id="unblock_btn" href="javascript:void(0)">Unblock</a>');\r
- $this.remove();\r
- \r
- if($('#info_block_btn') != null){\r
- $('#info_block_btn').after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');\r
- $('#info_block_btn').remove();\r
- }\r
- */\r
- } else {\r
- updateSentTip("Failed to report " + id + " for spam, please try again.", 3000, "failure");\r
- }\r
- },\r
- error: function(msg) {\r
- updateSentTip("Failed to report " + id + " for spam, please try again.", 3000, "failure");\r
- }\r
- });\r
- }\r
- });\r
- $("#tweeting_button").click(function (e) {\r
- e.preventDefault();\r
- if ($("#textbox").val().length >0 ) {\r
- updateStatus();\r
- } \r
- });\r
- \r
-});\r
-\r
-function onInfoReplie($this) {\r
- var replie_id = $("#info_name").text();\r
- $("#textbox").val("@" + replie_id + " ");\r
- $("#textbox").focus();\r
- $("#in_reply_to").val($this.parent().parent().find(".status_id").text());\r
- leaveWord();\r
-}\r
-\r
-function onInfoRT($this) {\r
- var replie_id = $("#info_name").text();\r
- var status_word = $this.parent().parent().find(".status_word").clone();\r
- status_word.find('.tweet a[rel=noreferrer]').each(function(){\r
- $(this).text($(this).attr('href'));\r
- });\r
- $("#textbox").focus().val(" RT @" + replie_id + ":" + status_word.text().replace(replie_id, "")).caret(0);\r
- leaveWord();\r
-}\r
-function getCookie(name){\r
- var strCookie=document.cookie;\r
- var arrCookie=strCookie.split("; ");\r
- for(var i=0;i<arrCookie.length;i++){\r
- var arr=arrCookie[i].split("=");\r
- if(arr[0]==name)return unescape(arr[1]);\r
- }\r
-return "";\r
-}\r
-function setCookie(name,value,expireHours){\r
- var cookieString=name+"="+escape(value);\r
- if(expireHours>0){\r
- var date=new Date();\r
- date.setTime(date.getTime+expireHours*3600*1000);\r
- cookieString=cookieString+"; expire="+date.toGMTString();\r
- }\r
- document.cookie=cookieString;\r
-} \r
-function onHide(){\r
- $this = $("#info_hide_btn");\r
- $this.after('<a class="btn" id="info_show_btn" href="javascript:void(0)">Show @</a>');\r
- $this.remove();\r
-\r
- $("#info_show_btn").click(function(){\r
- $(".timeline li").each(function(i,o) {\r
- $(this).show();\r
- });\r
- $(this).after('<a class="btn" id="info_hide_btn" href="javascript:void(0)">Hide @</a>');\r
- $(this).remove();\r
- $("#info_hide_btn").live("click", function(){\r
- onHide();\r
- });\r
- setCookie("infoShow","show");\r
- });\r
-\r
- $(".timeline li").each(function(i,o) {\r
- if ($(this).find(".status_word").text().indexOf("@") > -1) {\r
- $(this).hide();\r
- }\r
- });\r
- setCookie("infoShow","hide");\r
-}
\ No newline at end of file
+$(function(){
+ $("#allTimeline").click(function(e) {
+ var $this = $(e.target);
+ var type = $this.attr('class');
+ switch(type) {
+ case 'rt_btn':
+ e.preventDefault();
+ if ($("#textbox").length > 0) {
+ onRT($this);
+ } else {
+ $("#info_head").after('<h2>What\'s happening?</h2>' + formHTML);
+ formFunc();
+ onRT($this);
+ }
+ break;
+ case 'retw_btn':
+ e.preventDefault();
+ onNwRT($this);
+ break;
+ case 'replie_btn':
+ e.preventDefault();
+ var replie_id = $this.parent().parent().find(".status_word").find(".user_name").attr("id");
+ if ($("#textbox").length > 0) {
+ onReplie($this,e);
+ } else {
+ $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);
+ formFunc();
+ onReplie($this,e);
+ }
+ break;
+ case 'favor_btn':
+ e.preventDefault();
+ onFavor($this);
+ break;
+ case 'unfav_btn':
+ e.preventDefault();
+ UnFavor($this);
+ break;
+ case 'rt_undo':
+ e.preventDefault();
+ onUndoRt($this);
+ break;
+ }
+ });
+
+ $("#info_reply_btn").click(function(){
+ var replie_id = $("#info_name").text();
+ if ($("#textbox").length > 0) {
+ $("#textbox").val($("#textbox").val() + "@" + replie_id + " ");
+ $("#textbox").focus();
+ leaveWord();
+ } else {
+ $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);
+ formFunc();
+ $("#textbox").val($("#textbox").val() + "@" + replie_id + " ");
+ $("#textbox").focus();
+ leaveWord();
+ }
+ });
+ if (getCookie("infoShow") == "hide") {
+ onHide();
+ }
+ $("#info_hide_btn").click(function(){
+ onHide();
+ });
+
+ $("#info_follow_btn").click(function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var id = $("#info_name").text();
+ updateSentTip("Following " + id + "...", 5000, "ing");
+ $.ajax({
+ url: "ajax/relation.php",
+ type: "POST",
+ data: "action=create&id=" + id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ updateSentTip("You have followed " + id + "!", 3000, "success");
+ $this.after('<a class="btn btn-red" id="info_block_btn" href="javascript:void(0)">Unfollow</a>');
+ $this.remove();
+ if($('#unblock') != null){
+ $('#unblock').after('<a class="btn" id="block_btn" href="javascript:void(0)">Block</a>');
+ $('#unblock').remove();
+ }
+ } else {
+ updateSentTip("Failed to follow " + id + ", please try again.", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Failed to follow " + id + ", please try again.", 3000, "failure");
+ }
+ });
+ });
+
+ $("#info_block_btn").click(function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var id = $("#info_name").text();
+ if (confirm("Are you sure to unfollow " + id + " ?")) {
+ updateSentTip("Unfollowing " + id + "...", 5000, "ing");
+ $.ajax({
+ url: "ajax/relation.php",
+ type: "POST",
+ data: "action=destory&id=" + id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ updateSentTip("You have unfollowed " + id + "!", 3000, "success");
+ $this.after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');
+ $this.remove();
+ } else {
+ updateSentTip("Failed to unfollow " + id + ", please try again.", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Failed to unfollow " + id + ", please try again.", 3000, "failure");
+ }
+ });
+ }
+ });
+
+ $("#block_btn").click(function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var id = $("#info_name").text();
+ if (confirm("Are you sure to block " + id + " ?")) {
+ updateSentTip("Blocking " + id + "...", 5000, "ing");
+ $.ajax({
+ url: "ajax/relation.php",
+ type: "POST",
+ data: "action=block&id=" + id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ updateSentTip("You have blocked " + id + "!", 3000, "success");
+ $this.after('<a class="btn" id="unblock_btn" href="javascript:void(0)">Unblock</a>');
+ $this.remove();
+ if($('#info_block_btn') != null){
+ $('#info_block_btn').after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');
+ $('#info_block_btn').remove();
+ }
+ } else {
+ updateSentTip("Failed to block " + id + ", please try again.", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Failed to block " + id + ", please try again.", 3000, "failure");
+ }
+ });
+ }
+ });
+
+ $("#unblock_btn").click(function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var id = $("#info_name").text();
+ if (confirm("Are you sure to unblock " + id + " ?")) {
+ updateSentTip("Unblocking...", 5000, "ing");
+ $.ajax({
+ url: "ajax/relation.php",
+ type: "POST",
+ data: "action=unblock&id=" + id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ updateSentTip("Unblocked.", 3000, "success");
+ $this.after('<a class="btn" id="block_btn" href="javascript:void(0)">Block</a>');
+ $this.remove();
+ } else {
+ updateSentTip("Failed to unblock, please try again.", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Failed to unblock, please try again.", 3000, "failure");
+ }
+ });
+ }
+ });
+
+ $("#report_btn").click(function(e){
+ e.preventDefault();
+ var $this = $(this);
+ var id = $("#info_name").text();
+ if (confirm("Are you sure to report " + id + " for spam?")) {
+ updateSentTip("Reporting " + id + " for spam...", 5000, "ing");
+ $.ajax({
+ url: "ajax/relation.php",
+ type: "POST",
+ data: "action=report&id=" + id,
+ success: function(msg) {
+ if (msg.indexOf("success") >= 0) {
+ updateSentTip("You have reported " + id + " for spam!", 3000, "success");
+ } else {
+ updateSentTip("Failed to report " + id + " for spam, please try again.", 3000, "failure");
+ }
+ },
+ error: function(msg) {
+ updateSentTip("Failed to report " + id + " for spam, please try again.", 3000, "failure");
+ }
+ });
+ }
+ });
+});
+
+function getCookie(name){
+ var strCookie=document.cookie;
+ var arrCookie=strCookie.split("; ");
+ for(var i=0;i<arrCookie.length;i++){
+ var arr=arrCookie[i].split("=");
+ if(arr[0]==name)return unescape(arr[1]);
+ }
+return "";
+}
+function setCookie(name,value,expireHours){
+ var cookieString=name+"="+escape(value);
+ if(expireHours>0){
+ var date=new Date();
+ date.setTime(date.getTime+expireHours*3600*1000);
+ cookieString=cookieString+"; expire="+date.toGMTString();
+ }
+ document.cookie=cookieString;
+}
+function onHide(){
+ $this = $("#info_hide_btn");
+ $this.after('<a class="btn" id="info_show_btn" href="javascript:void(0)">Show @</a>');
+ $this.remove();
+
+ $("#info_show_btn").click(function(){
+ $(".timeline li").each(function(i,o) {
+ $(this).show();
+ });
+ $(this).after('<a class="btn" id="info_hide_btn" href="javascript:void(0)">Hide @</a>');
+ $(this).remove();
+ $("#info_hide_btn").live("click", function(){
+ onHide();
+ });
+ setCookie("infoShow","show");
+ });
+
+ $(".timeline li").each(function(i,o) {
+ if ($(this).find(".status_word").text().indexOf("@") > -1) {
+ $(this).hide();
+ }
+ });
+ setCookie("infoShow","hide");
+}
+++ /dev/null
-<?php\r
- define('SECURE_KEY', 'YOUR_SECRET_KEY_PLZ_CHANGE_IT');\r
- define('API_URL', 'http://twitter.com');\r
- define('API_TWITTER', 'http://api.twitter.com');\r
- define('TWITESE_API_URL', 'http://rabrapi0.appspot.com');\r
- define('SITE_OWNER', 'YOUR_NAME');\r
-\r
- // OAuth Config\r
- define("CONSUMER_KEY", "YOUR_KEY");\r
- define("CONSUMER_SECRET", "YOUR_SECRET");\r
- define("OAUTH_CALLBACK", "http://www.YOUR_DOMAIN.com/YOUR_DIR/oauth.php");\r
-?>\r
-<?php\r
- define('API_URL', 'http://api.twitter.com/1.1');\r
- \r
- // Config\r
- define('SECURE_KEY', 'YOU SHOULD CHANGE IT'); //You should NOT leave it blank\r
- define('BASE_URL','http://embr.in'); //Where your embr is hosted, i.e. http://bugbug.tk\r
- define("CONSUMER_KEY", "TEItTaPASySnYxziOyIdag");\r
- define("CONSUMER_SECRET", "xJEoWvBumpqgiiBuviWTa7GT8KCvP7Kv3n0hixhJaZY");\r
- \r
- //Extra Auth\r
- define('BASIC_AUTH', false); // if you set basic_auth true, u MUST set up the following BASIC_AUTH_USER and BASIC_AUTH_PW, and you d better reset your secure_key\r
- define('BASIC_AUTH_USER', 'your_basic_auth_user');\r
- define('BASIC_AUTH_PW', 'your_basic_auth_password');\r
-\r
- define('ID_AUTH',false); // if you set id_auth true, u MUST set up the following AUTH_ID list\r
- $AUTH_ID = array('username1','username2','username3','......');\r
-\r
- //Optional Information\r
- define('SITE_OWNER', 'TWITTER'); //Your Twitter ID \r
- define('BLOG_SITE',''); //blog_site\r
-?>\r
+<?php
+ define('API_URL', 'https://api.twitter.com/1.1');
+
+ // Config
+ define('SECURE_KEY', 'YOU SHOULD CHANGE IT'); //You should NOT leave it blank
+ define('BASE_URL','http://embr.in'); //Where your embr is hosted, i.e. http://bugbug.tk
+ define("CONSUMER_KEY", "TEItTaPASySnYxziOyIdag");
+ define("CONSUMER_SECRET", "xJEoWvBumpqgiiBuviWTa7GT8KCvP7Kv3n0hixhJaZY");
+
+ define('ID_AUTH',false); // if you set id_auth true, u MUST set up the following AUTH_ID list
+ $AUTH_ID = array('username1','username2','username3','......');
+
+ //Optional Information
+ define('SITE_OWNER', 'TWITTER'); //Your Twitter ID
+ define('BLOG_SITE',''); //blog_site
+?>
+++ /dev/null
-<?php\r
-\r
-class image_uploader{\r
- public $responseInfo;\r
- public $type = 'xml';\r
- public $user_agent = 'rabr';\r
-\r
- public function imgly($image){\r
- $postdata = array( 'media' => "@$image");\r
- $request = 'http://img.ly/api/upload';\r
- return $this->objectify( $this->process( $request, $postdata ) );\r
- }\r
-\r
- /**** request method ****/\r
- function process($url,$postargs=false)\r
- {\r
- $ch = curl_init($url);\r
- curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));\r
-\r
- if($postargs !== false)\r
- {\r
- curl_setopt ($ch, CURLOPT_POST, true);\r
- curl_setopt ($ch, CURLOPT_POSTFIELDS, $postargs);\r
- }\r
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\r
- curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);\r
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);\r
-\r
- $response = curl_exec($ch);\r
-\r
- $this->responseInfo=curl_getinfo($ch);\r
- curl_close($ch);\r
- return $this->responseInfo['http_code'];\r
- if( intval( $this->responseInfo['http_code'] ) == 200 )\r
- return $response; \r
- else\r
- return false;\r
- }\r
-\r
- function objectify( $data )\r
- {\r
- if( function_exists('simplexml_load_string') ) {\r
- $obj = simplexml_load_string( $data );\r
- }\r
- if (isset($obj->error) || !$obj) return false;\r
- else return $obj;\r
- }\r
-}\r
-?>\r
-<?php\r
+<?php
function mobile_device_detect($iphone=true,$ipad=true,$android=true,$opera=true,$blackberry=true,$palm=true,$windows=true,$mobileredirect=false,$desktopredirect=false){ $mobile_browser = false; $user_agent = $_SERVER['HTTP_USER_AGENT']; $accept = $_SERVER['HTTP_ACCEPT']; switch(true){ case (preg_match('/ipad/i',$user_agent)); $mobile_browser = $ipad; $status = 'Apple iPad'; if(substr($ipad,0,4)=='http'){ $mobileredirect = $ipad; } break; case (preg_match('/ipod/i',$user_agent)||preg_match('/iphone/i',$user_agent)); $mobile_browser = $iphone; $status = 'Apple'; if(substr($iphone,0,4)=='http'){ $mobileredirect = $iphone; } break; case (preg_match('/android/i',$user_agent)); $mobile_browser = $android; $status = 'Android'; if(substr($android,0,4)=='http'){ $mobileredirect = $android; } break; case (preg_match('/opera mini/i',$user_agent)); $mobile_browser = $opera; $status = 'Opera'; if(substr($opera,0,4)=='http'){ $mobileredirect = $opera; } break; case (preg_match('/blackberry/i',$user_agent)); $mobile_browser = $blackberry; $status = 'Blackberry'; if(substr($blackberry,0,4)=='http'){ $mobileredirect = $blackberry; } break; case (preg_match('/(pre\/|palm os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine)/i',$user_agent)); $mobile_browser = $palm; $status = 'Palm'; if(substr($palm,0,4)=='http'){ $mobileredirect = $palm; } break; case (preg_match('/(iris|3g_t|windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile)/i',$user_agent)); $mobile_browser = $windows; $status = 'Windows Smartphone'; if(substr($windows,0,4)=='http'){ $mobileredirect = $windows; } break; case (preg_match('/(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|m881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|s800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|d736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |sonyericsson|samsung|240x|x320|vx10|nokia|sony cmd|motorola|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|psp|treo)/i',$user_agent)); $mobile_browser = true; $status = 'Mobile matched on piped preg_match'; break; case ((strpos($accept,'text/vnd.wap.wml')>0)||(strpos($accept,'application/vnd.wap.xhtml+xml')>0)); $mobile_browser = true; $status = 'Mobile matched on content accept header'; break; case (isset($_SERVER['HTTP_X_WAP_PROFILE'])||isset($_SERVER['HTTP_PROFILE'])); $mobile_browser = true; $status = 'Mobile matched on profile headers being set'; break; case (in_array(strtolower(substr($user_agent,0,4)),array('1207'=>'1207','3gso'=>'3gso','4thp'=>'4thp','501i'=>'501i','502i'=>'502i','503i'=>'503i','504i'=>'504i','505i'=>'505i','506i'=>'506i','6310'=>'6310','6590'=>'6590','770s'=>'770s','802s'=>'802s','a wa'=>'a wa','acer'=>'acer','acs-'=>'acs-','airn'=>'airn','alav'=>'alav','asus'=>'asus','attw'=>'attw','au-m'=>'au-m','aur '=>'aur ','aus '=>'aus ','abac'=>'abac','acoo'=>'acoo','aiko'=>'aiko','alco'=>'alco','alca'=>'alca','amoi'=>'amoi','anex'=>'anex','anny'=>'anny','anyw'=>'anyw','aptu'=>'aptu','arch'=>'arch','argo'=>'argo','bell'=>'bell','bird'=>'bird','bw-n'=>'bw-n','bw-u'=>'bw-u','beck'=>'beck','benq'=>'benq','bilb'=>'bilb','blac'=>'blac','c55/'=>'c55/','cdm-'=>'cdm-','chtm'=>'chtm','capi'=>'capi','cond'=>'cond','craw'=>'craw','dall'=>'dall','dbte'=>'dbte','dc-s'=>'dc-s','dica'=>'dica','ds-d'=>'ds-d','ds12'=>'ds12','dait'=>'dait','devi'=>'devi','dmob'=>'dmob','doco'=>'doco','dopo'=>'dopo','el49'=>'el49','erk0'=>'erk0','esl8'=>'esl8','ez40'=>'ez40','ez60'=>'ez60','ez70'=>'ez70','ezos'=>'ezos','ezze'=>'ezze','elai'=>'elai','emul'=>'emul','eric'=>'eric','ezwa'=>'ezwa','fake'=>'fake','fly-'=>'fly-','fly_'=>'fly_','g-mo'=>'g-mo','g1 u'=>'g1 u','g560'=>'g560','gf-5'=>'gf-5','grun'=>'grun','gene'=>'gene','go.w'=>'go.w','good'=>'good','grad'=>'grad','hcit'=>'hcit','hd-m'=>'hd-m','hd-p'=>'hd-p','hd-t'=>'hd-t','hei-'=>'hei-','hp i'=>'hp i','hpip'=>'hpip','hs-c'=>'hs-c','htc '=>'htc ','htc-'=>'htc-','htca'=>'htca','htcg'=>'htcg','htcp'=>'htcp','htcs'=>'htcs','htct'=>'htct','htc_'=>'htc_','haie'=>'haie','hita'=>'hita','huaw'=>'huaw','hutc'=>'hutc','i-20'=>'i-20','i-go'=>'i-go','i-ma'=>'i-ma','i230'=>'i230','iac'=>'iac','iac-'=>'iac-','iac/'=>'iac/','ig01'=>'ig01','im1k'=>'im1k','inno'=>'inno','iris'=>'iris','jata'=>'jata','java'=>'java','kddi'=>'kddi','kgt'=>'kgt','kgt/'=>'kgt/','kpt '=>'kpt ','kwc-'=>'kwc-','klon'=>'klon','lexi'=>'lexi','lg g'=>'lg g','lg-a'=>'lg-a','lg-b'=>'lg-b','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-f'=>'lg-f','lg-g'=>'lg-g','lg-k'=>'lg-k','lg-l'=>'lg-l','lg-m'=>'lg-m','lg-o'=>'lg-o','lg-p'=>'lg-p','lg-s'=>'lg-s','lg-t'=>'lg-t','lg-u'=>'lg-u','lg-w'=>'lg-w','lg/k'=>'lg/k','lg/l'=>'lg/l','lg/u'=>'lg/u','lg50'=>'lg50','lg54'=>'lg54','lge-'=>'lge-','lge/'=>'lge/','lynx'=>'lynx','leno'=>'leno','m1-w'=>'m1-w','m3ga'=>'m3ga','m50/'=>'m50/','maui'=>'maui','mc01'=>'mc01','mc21'=>'mc21','mcca'=>'mcca','medi'=>'medi','meri'=>'meri','mio8'=>'mio8','mioa'=>'mioa','mo01'=>'mo01','mo02'=>'mo02','mode'=>'mode','modo'=>'modo','mot '=>'mot ','mot-'=>'mot-','mt50'=>'mt50','mtp1'=>'mtp1','mtv '=>'mtv ','mate'=>'mate','maxo'=>'maxo','merc'=>'merc','mits'=>'mits','mobi'=>'mobi','motv'=>'motv','mozz'=>'mozz','n100'=>'n100','n101'=>'n101','n102'=>'n102','n202'=>'n202','n203'=>'n203','n300'=>'n300','n302'=>'n302','n500'=>'n500','n502'=>'n502','n505'=>'n505','n700'=>'n700','n701'=>'n701','n710'=>'n710','nec-'=>'nec-','nem-'=>'nem-','newg'=>'newg','neon'=>'neon','netf'=>'netf','noki'=>'noki','nzph'=>'nzph','o2 x'=>'o2 x','o2-x'=>'o2-x','opwv'=>'opwv','owg1'=>'owg1','opti'=>'opti','oran'=>'oran','p800'=>'p800','pand'=>'pand','pg-1'=>'pg-1','pg-2'=>'pg-2','pg-3'=>'pg-3','pg-6'=>'pg-6','pg-8'=>'pg-8','pg-c'=>'pg-c','pg13'=>'pg13','phil'=>'phil','pn-2'=>'pn-2','pt-g'=>'pt-g','palm'=>'palm','pana'=>'pana','pire'=>'pire','pock'=>'pock','pose'=>'pose','psio'=>'psio','qa-a'=>'qa-a','qc-2'=>'qc-2','qc-3'=>'qc-3','qc-5'=>'qc-5','qc-7'=>'qc-7','qc07'=>'qc07','qc12'=>'qc12','qc21'=>'qc21','qc32'=>'qc32','qc60'=>'qc60','qci-'=>'qci-','qwap'=>'qwap','qtek'=>'qtek','r380'=>'r380','r600'=>'r600','raks'=>'raks','rim9'=>'rim9','rove'=>'rove','s55/'=>'s55/','sage'=>'sage','sams'=>'sams','sc01'=>'sc01','sch-'=>'sch-','scp-'=>'scp-','sdk/'=>'sdk/','se47'=>'se47','sec-'=>'sec-','sec0'=>'sec0','sec1'=>'sec1','semc'=>'semc','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','sk-0'=>'sk-0','sl45'=>'sl45','slid'=>'slid','smb3'=>'smb3','smt5'=>'smt5','sp01'=>'sp01','sph-'=>'sph-','spv '=>'spv ','spv-'=>'spv-','sy01'=>'sy01','samm'=>'samm','sany'=>'sany','sava'=>'sava','scoo'=>'scoo','send'=>'send','siem'=>'siem','smar'=>'smar','smit'=>'smit','soft'=>'soft','sony'=>'sony','t-mo'=>'t-mo','t218'=>'t218','t250'=>'t250','t600'=>'t600','t610'=>'t610','t618'=>'t618','tcl-'=>'tcl-','tdg-'=>'tdg-','telm'=>'telm','tim-'=>'tim-','ts70'=>'ts70','tsm-'=>'tsm-','tsm3'=>'tsm3','tsm5'=>'tsm5','tx-9'=>'tx-9','tagt'=>'tagt','talk'=>'talk','teli'=>'teli','topl'=>'topl','hiba'=>'hiba','up.b'=>'up.b','upg1'=>'upg1','utst'=>'utst','v400'=>'v400','v750'=>'v750','veri'=>'veri','vk-v'=>'vk-v','vk40'=>'vk40','vk50'=>'vk50','vk52'=>'vk52','vk53'=>'vk53','vm40'=>'vm40','vx98'=>'vx98','virg'=>'virg','vite'=>'vite','voda'=>'voda','vulc'=>'vulc','w3c '=>'w3c ','w3c-'=>'w3c-','wapj'=>'wapj','wapp'=>'wapp','wapu'=>'wapu','wapm'=>'wapm','wig '=>'wig ','wapi'=>'wapi','wapr'=>'wapr','wapv'=>'wapv','wapy'=>'wapy','wapa'=>'wapa','waps'=>'waps','wapt'=>'wapt','winc'=>'winc','winw'=>'winw','wonu'=>'wonu','x700'=>'x700','xda2'=>'xda2','xdag'=>'xdag','yas-'=>'yas-','your'=>'your','zte-'=>'zte-','zeto'=>'zeto','acs-'=>'acs-','alav'=>'alav','alca'=>'alca','amoi'=>'amoi','aste'=>'aste','audi'=>'audi','avan'=>'avan','benq'=>'benq','bird'=>'bird','blac'=>'blac','blaz'=>'blaz','brew'=>'brew','brvw'=>'brvw','bumb'=>'bumb','ccwa'=>'ccwa','cell'=>'cell','cldc'=>'cldc','cmd-'=>'cmd-','dang'=>'dang','doco'=>'doco','eml2'=>'eml2','eric'=>'eric','fetc'=>'fetc','hipt'=>'hipt','http'=>'http','ibro'=>'ibro','idea'=>'idea','ikom'=>'ikom','inno'=>'inno','ipaq'=>'ipaq','jbro'=>'jbro','jemu'=>'jemu','java'=>'java','jigs'=>'jigs','kddi'=>'kddi','keji'=>'keji','kyoc'=>'kyoc','kyok'=>'kyok','leno'=>'leno','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-g'=>'lg-g','lge-'=>'lge-','libw'=>'libw','m-cr'=>'m-cr','maui'=>'maui','maxo'=>'maxo','midp'=>'midp','mits'=>'mits','mmef'=>'mmef','mobi'=>'mobi','mot-'=>'mot-','moto'=>'moto','mwbp'=>'mwbp','mywa'=>'mywa','nec-'=>'nec-','newt'=>'newt','nok6'=>'nok6','noki'=>'noki','o2im'=>'o2im','opwv'=>'opwv','palm'=>'palm','pana'=>'pana','pant'=>'pant','pdxg'=>'pdxg','phil'=>'phil','play'=>'play','pluc'=>'pluc','port'=>'port','prox'=>'prox','qtek'=>'qtek','qwap'=>'qwap','rozo'=>'rozo','sage'=>'sage','sama'=>'sama','sams'=>'sams','sany'=>'sany','sch-'=>'sch-','sec-'=>'sec-','send'=>'send','seri'=>'seri','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','siem'=>'siem','smal'=>'smal','smar'=>'smar','sony'=>'sony','sph-'=>'sph-','symb'=>'symb','t-mo'=>'t-mo','teli'=>'teli','tim-'=>'tim-','tosh'=>'tosh','treo'=>'treo','tsm-'=>'tsm-','upg1'=>'upg1','upsi'=>'upsi','vk-v'=>'vk-v','voda'=>'voda','vx52'=>'vx52','vx53'=>'vx53','vx60'=>'vx60','vx61'=>'vx61','vx70'=>'vx70','vx80'=>'vx80','vx81'=>'vx81','vx83'=>'vx83','vx85'=>'vx85','wap-'=>'wap-','wapa'=>'wapa','wapi'=>'wapi','wapp'=>'wapp','wapr'=>'wapr','webc'=>'webc','whit'=>'whit','winw'=>'winw','wmlb'=>'wmlb','xda-'=>'xda-',))); $mobile_browser = true; $status = 'Mobile matched on in_array'; break; default; $mobile_browser = false; $status = 'Desktop / full capability browser'; break; } if($redirect = ($mobile_browser==true) ? $mobileredirect : $desktopredirect){ header('Location: '.$redirect); exit; }else{ if($mobile_browser==''){ return $mobile_browser; }else{ return array($mobile_browser,$status); } } } ?>
\ No newline at end of file
-<?php\r
-\r
-/* Generic exception class\r
- */\r
-class OAuthException extends Exception {\r
- // pass\r
-}\r
-\r
-class OAuthConsumer {\r
- public $key;\r
- public $secret;\r
-\r
- function __construct($key, $secret) {\r
- $this->key = $key;\r
- $this->secret = $secret;\r
- }\r
-\r
- function __toString() {\r
- return "OAuthConsumer[key=$this->key,secret=$this->secret]";\r
- }\r
-}\r
-\r
-class OAuthToken {\r
- // access tokens and request tokens\r
- public $key;\r
- public $secret;\r
-\r
- /**\r
- * key = the token\r
- * secret = the token secret\r
- */\r
- function __construct($key, $secret) {\r
- $this->key = $key;\r
- $this->secret = $secret;\r
- }\r
-\r
- /**\r
- * generates the basic string serialization of a token that a server\r
- * would respond to request_token and access_token calls with\r
- */\r
- function to_string() {\r
- return "oauth_token=" .\r
- OAuthUtil::urlencode_rfc3986($this->key) .\r
- "&oauth_token_secret=" .\r
- OAuthUtil::urlencode_rfc3986($this->secret);\r
- }\r
-\r
- function __toString() {\r
- return $this->to_string();\r
- }\r
-}\r
-\r
-class OAuthSignatureMethod {\r
- public function check_signature(&$request, $consumer, $token, $signature) {\r
- $built = $this->build_signature($request, $consumer, $token);\r
- return $built == $signature;\r
- }\r
-}\r
-\r
-class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {\r
- function get_name() {\r
- return "HMAC-SHA1";\r
- }\r
-\r
- public function build_signature($request, $consumer, $token) {\r
- $base_string = $request->get_signature_base_string();\r
- $request->base_string = $base_string;\r
-\r
- $key_parts = array(\r
- $consumer->secret,\r
- ($token) ? $token->secret : ""\r
- );\r
-\r
- $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);\r
- $key = implode('&', $key_parts);\r
-\r
- return base64_encode(hash_hmac('sha1', $base_string, $key, true));\r
- }\r
-}\r
-\r
-class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {\r
- public function get_name() {\r
- return "PLAINTEXT";\r
- }\r
-\r
- public function build_signature($request, $consumer, $token) {\r
- $sig = array(\r
- OAuthUtil::urlencode_rfc3986($consumer->secret)\r
- );\r
-\r
- if ($token) {\r
- array_push($sig, OAuthUtil::urlencode_rfc3986($token->secret));\r
- } else {\r
- array_push($sig, '');\r
- }\r
-\r
- $raw = implode("&", $sig);\r
- // for debug purposes\r
- $request->base_string = $raw;\r
-\r
- return OAuthUtil::urlencode_rfc3986($raw);\r
- }\r
-}\r
-\r
-class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {\r
- public function get_name() {\r
- return "RSA-SHA1";\r
- }\r
-\r
- protected function fetch_public_cert(&$request) {\r
- // not implemented yet, ideas are:\r
- // (1) do a lookup in a table of trusted certs keyed off of consumer\r
- // (2) fetch via http using a url provided by the requester\r
- // (3) some sort of specific discovery code based on request\r
- //\r
- // either way should return a string representation of the certificate\r
- throw Exception("fetch_public_cert not implemented");\r
- }\r
-\r
- protected function fetch_private_cert(&$request) {\r
- // not implemented yet, ideas are:\r
- // (1) do a lookup in a table of trusted certs keyed off of consumer\r
- //\r
- // either way should return a string representation of the certificate\r
- throw Exception("fetch_private_cert not implemented");\r
- }\r
-\r
- public function build_signature(&$request, $consumer, $token) {\r
- $base_string = $request->get_signature_base_string();\r
- $request->base_string = $base_string;\r
-\r
- // Fetch the private key cert based on the request\r
- $cert = $this->fetch_private_cert($request);\r
-\r
- // Pull the private key ID from the certificate\r
- $privatekeyid = openssl_get_privatekey($cert);\r
-\r
- // Sign using the key\r
- $ok = openssl_sign($base_string, $signature, $privatekeyid);\r
-\r
- // Release the key resource\r
- openssl_free_key($privatekeyid);\r
-\r
- return base64_encode($signature);\r
- }\r
-\r
- public function check_signature(&$request, $consumer, $token, $signature) {\r
- $decoded_sig = base64_decode($signature);\r
-\r
- $base_string = $request->get_signature_base_string();\r
-\r
- // Fetch the public key cert based on the request\r
- $cert = $this->fetch_public_cert($request);\r
-\r
- // Pull the public key ID from the certificate\r
- $publickeyid = openssl_get_publickey($cert);\r
-\r
- // Check the computed signature against the one passed in the query\r
- $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);\r
-\r
- // Release the key resource\r
- openssl_free_key($publickeyid);\r
-\r
- return $ok == 1;\r
- }\r
-}\r
-\r
-class OAuthRequest {\r
- private $parameters;\r
- private $http_method;\r
- private $http_url;\r
- public $http_header;\r
- // for debug purposes\r
- public $base_string;\r
- public static $version = '1.0a';\r
- public static $POST_INPUT = 'php://input';\r
-\r
- function __construct($http_method, $http_url, $parameters = array(), $http_header= array()) {\r
- //@$parameters or $parameters = array();\r
- $this->parameters = $parameters;\r
- //@$http_header or $http_header = array();\r
- $this->http_header = $http_header;\r
- $this->http_method = $http_method;\r
- $this->http_url = $http_url;\r
- }\r
-\r
-\r
- /**\r
- * attempt to build up a request from what was passed to the server\r
- */\r
- public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {\r
- $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")\r
- ? 'http'\r
- : 'https';\r
- @$http_url or $http_url = $scheme .\r
- '://' . $_SERVER['HTTP_HOST'] .\r
- ':' .\r
- $_SERVER['SERVER_PORT'] .\r
- $_SERVER['REQUEST_URI'];\r
- @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];\r
-\r
- // We weren't handed any parameters, so let's find the ones relevant to\r
- // this request.\r
- // If you run XML-RPC or similar you should use this to provide your own\r
- // parsed parameter-list\r
- if (!$parameters) {\r
- // Find request headers\r
- $request_headers = OAuthUtil::get_headers();\r
-\r
- // Parse the query-string to find GET parameters\r
- $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);\r
-\r
- // It's a POST request of the proper content-type, so parse POST\r
- // parameters and add those overriding any duplicates from GET\r
- if ($http_method == "POST"\r
- && @strstr($request_headers["Content-Type"],\r
- "application/x-www-form-urlencoded")\r
- ) {\r
- $post_data = OAuthUtil::parse_parameters(\r
- file_get_contents(self::$POST_INPUT)\r
- );\r
- $parameters = array_merge($parameters, $post_data);\r
- }\r
-\r
- // We have a Authorization-header with OAuth data. Parse the header\r
- // and add those overriding any duplicates from GET or POST\r
- if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {\r
- $header_parameters = OAuthUtil::split_header(\r
- $request_headers['Authorization']\r
- );\r
- $parameters = array_merge($parameters, $header_parameters);\r
- }\r
-\r
- }\r
-\r
- return new OAuthRequest($http_method, $http_url, $parameters);\r
- }\r
-\r
- /**\r
- * pretty much a helper function to set up the request\r
- */\r
- public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {\r
- @$parameters or $parameters = array();\r
- $defaults = array("oauth_version" => OAuthRequest::$version,\r
- "oauth_nonce" => OAuthRequest::generate_nonce(),\r
- "oauth_timestamp" => OAuthRequest::generate_timestamp(),\r
- "oauth_consumer_key" => $consumer->key);\r
- if ($token)\r
- $defaults['oauth_token'] = $token->key;\r
-\r
- $parameters = array_merge($defaults, $parameters);\r
-\r
- return new OAuthRequest($http_method, $http_url, $parameters);\r
- }\r
-\r
- public function set_parameter($name, $value, $allow_duplicates = true) {\r
- if ($allow_duplicates && isset($this->parameters[$name])) {\r
- // We have already added parameter(s) with this name, so add to the list\r
- if (is_scalar($this->parameters[$name])) {\r
- // This is the first duplicate, so transform scalar (string)\r
- // into an array so we can add the duplicates\r
- $this->parameters[$name] = array($this->parameters[$name]);\r
- }\r
-\r
- $this->parameters[$name][] = $value;\r
- } else {\r
- $this->parameters[$name] = $value;\r
- }\r
- }\r
- \r
-\r
- public function set_http_header(&$multipart = NULL) {\r
- if (empty($this->parameters)) {\r
- $this->http_header[] = 'Content-Type:';\r
- $this->http_header[] = 'Content-Length:';\r
- } else {\r
- if($multipart) $this->http_header[] = $this->to_header(); //add OAuth header if we post multipart\r
- $this->http_header[] = 'Expect: ';\r
- }\r
- }\r
-\r
- public function get_parameter($name) {\r
- return isset($this->parameters[$name]) ? $this->parameters[$name] : null;\r
- }\r
-\r
- public function get_parameters() {\r
- return $this->parameters;\r
- }\r
-\r
- public function unset_parameter($name) {\r
- unset($this->parameters[$name]);\r
- }\r
-\r
- /**\r
- * The request parameters, sorted and concatenated into a normalized string.\r
- * @return string\r
- */\r
- public function get_signable_parameters() {\r
- // Grab all parameters\r
- $params = $this->parameters;\r
-\r
- // Remove oauth_signature if present\r
- // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")\r
- if (isset($params['oauth_signature'])) {\r
- unset($params['oauth_signature']);\r
- }\r
-\r
- return OAuthUtil::build_http_query($params);\r
- }\r
-\r
- /**\r
- * Returns the base string of this request\r
- *\r
- * The base string defined as the method, the url\r
- * and the parameters (normalized), each urlencoded\r
- * and the concated with &.\r
- */\r
- public function get_signature_base_string() {\r
- $parts = array(\r
- $this->get_normalized_http_method(),\r
- $this->get_normalized_http_url(),\r
- $this->get_signable_parameters()\r
- );\r
-\r
- $parts = OAuthUtil::urlencode_rfc3986($parts);\r
-\r
- return implode('&', $parts);\r
- }\r
-\r
- /**\r
- * just uppercases the http method\r
- */\r
- public function get_normalized_http_method() {\r
- return strtoupper($this->http_method);\r
- }\r
-\r
- /**\r
- * parses the url and rebuilds it to be\r
- * scheme://host/path\r
- */\r
- public function get_normalized_http_url() {\r
- $parts = parse_url($this->http_url);\r
-\r
- $port = @$parts['port'];\r
- $scheme = $parts['scheme'];\r
- $host = $parts['host'];\r
- $path = @$parts['path'];\r
-\r
- $port or $port = ($scheme == 'https') ? '443' : '80';\r
-\r
- if (($scheme == 'https' && $port != '443')\r
- || ($scheme == 'http' && $port != '80')) {\r
- $host = "$host:$port";\r
- }\r
- return "$scheme://$host$path";\r
- }\r
-\r
- /**\r
- * builds a url usable for a GET request\r
- */\r
- public function to_url() {\r
- $post_data = $this->to_postdata();\r
- $out = $this->get_normalized_http_url();\r
- if ($post_data) {\r
- $out .= '?'.$post_data;\r
- }\r
- return $out;\r
- }\r
-\r
- /**\r
- * builds the data one would send in a POST request\r
- */\r
- public function to_postdata() {\r
- return OAuthUtil::build_http_query($this->parameters);\r
- }\r
-\r
- /**\r
- * builds the Authorization: header\r
- */\r
- public function to_header($realm=NULL) {\r
- $out = 'Authorization: OAuth ';\r
- if ($realm) $out .= 'realm="'.$realm.'",';\r
- $total = array();\r
- foreach ($this->parameters as $k => $v) {\r
- if (substr($k, 0, 5) != "oauth") continue;\r
- if (is_array($v)) {\r
- throw new OAuthException('Arrays not supported in headers');\r
- }\r
- $out .= OAuthUtil::urlencode_rfc3986($k) .\r
- '="' .\r
- OAuthUtil::urlencode_rfc3986($v) .\r
- '",';\r
- }\r
- return substr($out,0,-1);\r
- }\r
-\r
- public function __toString() {\r
- return $this->to_url();\r
- }\r
-\r
-\r
- public function sign_request($signature_method, $consumer, $token) {\r
- $this->set_parameter(\r
- "oauth_signature_method",\r
- $signature_method->get_name(),\r
- false\r
- );\r
- $signature = $this->build_signature($signature_method, $consumer, $token);\r
- $this->set_parameter("oauth_signature", $signature, false);\r
- }\r
-\r
- public function build_signature($signature_method, $consumer, $token) {\r
- $signature = $signature_method->build_signature($this, $consumer, $token);\r
- return $signature;\r
- }\r
-\r
- /**\r
- * util function: current timestamp\r
- */\r
- private static function generate_timestamp() {\r
- return $_SERVER['REQUEST_TIME'];\r
- }\r
-\r
- /**\r
- * util function: current nonce\r
- */\r
- private static function generate_nonce() {\r
- $mt = microtime();\r
- $rand = mt_rand();\r
-\r
- return md5($mt . $rand); // md5s look nicer than numbers\r
- }\r
-}\r
-\r
-class OAuthUtil {\r
- public static function urlencode_rfc3986($input) {\r
- if (is_array($input)) {\r
- return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);\r
- } else if (is_scalar($input)) {\r
- return str_replace(\r
- '+',\r
- ' ',\r
- str_replace('%7E', '~', rawurlencode($input))\r
- );\r
- } else {\r
- return '';\r
- }\r
-}\r
-\r
-\r
- // This decode function isn't taking into consideration the above\r
- // modifications to the encoding process. However, this method doesn't\r
- // seem to be used anywhere so leaving it as is.\r
- public static function urldecode_rfc3986($string) {\r
- return urldecode($string);\r
- }\r
-\r
- // Utility function for turning the Authorization: header into\r
- // parameters, has to do some unescaping\r
- // Can filter out any non-oauth parameters if needed (default behaviour)\r
- public static function split_header($header, $only_allow_oauth_parameters = true) {\r
- $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';\r
- $offset = 0;\r
- $params = array();\r
- while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {\r
- $match = $matches[0];\r
- $header_name = $matches[2][0];\r
- $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];\r
- if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {\r
- $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);\r
- }\r
- $offset = $match[1] + strlen($match[0]);\r
- }\r
-\r
- if (isset($params['realm'])) {\r
- unset($params['realm']);\r
- }\r
-\r
- return $params;\r
- }\r
-\r
- // helper to try to sort out headers for people who aren't running apache\r
- public static function get_headers() {\r
- if (function_exists('apache_request_headers')) {\r
- // we need this to get the actual Authorization: header\r
- // because apache tends to tell us it doesn't exist\r
- return apache_request_headers();\r
- }\r
- // otherwise we don't have apache and are just going to have to hope\r
- // that $_SERVER actually contains what we need\r
- $out = array();\r
- foreach ($_SERVER as $key => $value) {\r
- if (substr($key, 0, 5) == "HTTP_") {\r
- // this is chaos, basically it is just there to capitalize the first\r
- // letter of every word that is not an initial HTTP and strip HTTP\r
- // code from przemek\r
- $key = str_replace(\r
- " ",\r
- "-",\r
- ucwords(strtolower(str_replace("_", " ", substr($key, 5))))\r
- );\r
- $out[$key] = $value;\r
- }\r
- }\r
- return $out;\r
- }\r
-\r
- // This function takes a input like a=b&a=c&d=e and returns the parsed\r
- // parameters like this\r
- // array('a' => array('b','c'), 'd' => 'e')\r
- public static function parse_parameters( $input ) {\r
- if (!isset($input) || !$input) return array();\r
-\r
- $pairs = explode('&', $input);\r
-\r
- $parsed_parameters = array();\r
- foreach ($pairs as $pair) {\r
- $split = explode('=', $pair, 2);\r
- $parameter = OAuthUtil::urldecode_rfc3986($split[0]);\r
- $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';\r
-\r
- if (isset($parsed_parameters[$parameter])) {\r
- // We have already recieved parameter(s) with this name, so add to the list\r
- // of parameters with this name\r
-\r
- if (is_scalar($parsed_parameters[$parameter])) {\r
- // This is the first duplicate, so transform scalar (string) into an array\r
- // so we can add the duplicates\r
- $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);\r
- }\r
-\r
- $parsed_parameters[$parameter][] = $value;\r
- } else {\r
- $parsed_parameters[$parameter] = $value;\r
- }\r
- }\r
- return $parsed_parameters;\r
- }\r
-\r
- public static function build_http_query($params,$multipart=NULL) {\r
- if (!$params) return '';\r
-\r
- // Urlencode both keys and values\r
- $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));\r
- $values = OAuthUtil::urlencode_rfc3986(array_values($params));\r
- $params = array_combine($keys, $values);\r
-\r
- // Parameters are sorted by name, using lexicographical byte value ordering.\r
- // Ref: Spec: 9.1.1 (1)\r
- uksort($params, 'strcmp');\r
-\r
- $pairs = array();\r
- foreach ($params as $parameter => $value) {\r
- if (is_array($value)) {\r
- // If two or more parameters share the same name, they are sorted by their value\r
- // Ref: Spec: 9.1.1 (1)\r
- natsort($value);\r
- foreach ($value as $duplicate_value) {\r
- $pairs[] = $parameter . '=' . $duplicate_value;\r
- }\r
- } else {\r
- $pairs[] = $parameter . '=' . $value;\r
- }\r
- }\r
- // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)\r
- // Each name-value pair is separated by an '&' character (ASCII code 38)\r
- return implode('&', $pairs);\r
- }\r
-}\r
-\r
-?>\r
+<?php
+
+/* Generic exception class
+ */
+class OAuthException extends Exception {
+ // pass
+}
+
+class OAuthConsumer {
+ public $key;
+ public $secret;
+
+ function __construct($key, $secret) {
+ $this->key = $key;
+ $this->secret = $secret;
+ }
+
+ function __toString() {
+ return "OAuthConsumer[key=$this->key,secret=$this->secret]";
+ }
+}
+
+class OAuthToken {
+ // access tokens and request tokens
+ public $key;
+ public $secret;
+
+ /**
+ * key = the token
+ * secret = the token secret
+ */
+ function __construct($key, $secret) {
+ $this->key = $key;
+ $this->secret = $secret;
+ }
+
+ /**
+ * generates the basic string serialization of a token that a server
+ * would respond to request_token and access_token calls with
+ */
+ function to_string() {
+ return "oauth_token=" .
+ OAuthUtil::urlencode_rfc3986($this->key) .
+ "&oauth_token_secret=" .
+ OAuthUtil::urlencode_rfc3986($this->secret);
+ }
+
+ function __toString() {
+ return $this->to_string();
+ }
+}
+
+class OAuthSignatureMethod {
+ public function check_signature(&$request, $consumer, $token, $signature) {
+ $built = $this->build_signature($request, $consumer, $token);
+ return $built == $signature;
+ }
+}
+
+class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
+ function get_name() {
+ return "HMAC-SHA1";
+ }
+
+ public function build_signature($request, $consumer, $token) {
+ $base_string = $request->get_signature_base_string();
+ $request->base_string = $base_string;
+
+ $key_parts = array(
+ $consumer->secret,
+ ($token) ? $token->secret : ""
+ );
+
+ $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
+ $key = implode('&', $key_parts);
+
+ return base64_encode(hash_hmac('sha1', $base_string, $key, true));
+ }
+}
+
+class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
+ public function get_name() {
+ return "PLAINTEXT";
+ }
+
+ public function build_signature($request, $consumer, $token) {
+ $sig = array(
+ OAuthUtil::urlencode_rfc3986($consumer->secret)
+ );
+
+ if ($token) {
+ array_push($sig, OAuthUtil::urlencode_rfc3986($token->secret));
+ } else {
+ array_push($sig, '');
+ }
+
+ $raw = implode("&", $sig);
+ // for debug purposes
+ $request->base_string = $raw;
+
+ return OAuthUtil::urlencode_rfc3986($raw);
+ }
+}
+
+class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
+ public function get_name() {
+ return "RSA-SHA1";
+ }
+
+ protected function fetch_public_cert(&$request) {
+ // not implemented yet, ideas are:
+ // (1) do a lookup in a table of trusted certs keyed off of consumer
+ // (2) fetch via http using a url provided by the requester
+ // (3) some sort of specific discovery code based on request
+ //
+ // either way should return a string representation of the certificate
+ throw Exception("fetch_public_cert not implemented");
+ }
+
+ protected function fetch_private_cert(&$request) {
+ // not implemented yet, ideas are:
+ // (1) do a lookup in a table of trusted certs keyed off of consumer
+ //
+ // either way should return a string representation of the certificate
+ throw Exception("fetch_private_cert not implemented");
+ }
+
+ public function build_signature(&$request, $consumer, $token) {
+ $base_string = $request->get_signature_base_string();
+ $request->base_string = $base_string;
+
+ // Fetch the private key cert based on the request
+ $cert = $this->fetch_private_cert($request);
+
+ // Pull the private key ID from the certificate
+ $privatekeyid = openssl_get_privatekey($cert);
+
+ // Sign using the key
+ $ok = openssl_sign($base_string, $signature, $privatekeyid);
+
+ // Release the key resource
+ openssl_free_key($privatekeyid);
+
+ return base64_encode($signature);
+ }
+
+ public function check_signature(&$request, $consumer, $token, $signature) {
+ $decoded_sig = base64_decode($signature);
+
+ $base_string = $request->get_signature_base_string();
+
+ // Fetch the public key cert based on the request
+ $cert = $this->fetch_public_cert($request);
+
+ // Pull the public key ID from the certificate
+ $publickeyid = openssl_get_publickey($cert);
+
+ // Check the computed signature against the one passed in the query
+ $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
+
+ // Release the key resource
+ openssl_free_key($publickeyid);
+
+ return $ok == 1;
+ }
+}
+
+class OAuthRequest {
+ private $parameters;
+ private $http_method;
+ private $http_url;
+ public $http_header;
+ // for debug purposes
+ public $base_string;
+ public static $version = '1.0a';
+ public static $POST_INPUT = 'php://input';
+
+ function __construct($http_method, $http_url, $parameters = array(), $http_header= array()) {
+ //@$parameters or $parameters = array();
+ $this->parameters = $parameters;
+ //@$http_header or $http_header = array();
+ $this->http_header = $http_header;
+ $this->http_method = $http_method;
+ $this->http_url = $http_url;
+ }
+
+
+ /**
+ * attempt to build up a request from what was passed to the server
+ */
+ public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
+ $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
+ ? 'http'
+ : 'https';
+ @$http_url or $http_url = $scheme .
+ '://' . $_SERVER['HTTP_HOST'] .
+ ':' .
+ $_SERVER['SERVER_PORT'] .
+ $_SERVER['REQUEST_URI'];
+ @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
+
+ // We weren't handed any parameters, so let's find the ones relevant to
+ // this request.
+ // If you run XML-RPC or similar you should use this to provide your own
+ // parsed parameter-list
+ if (!$parameters) {
+ // Find request headers
+ $request_headers = OAuthUtil::get_headers();
+
+ // Parse the query-string to find GET parameters
+ $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
+
+ // It's a POST request of the proper content-type, so parse POST
+ // parameters and add those overriding any duplicates from GET
+ if ($http_method == "POST"
+ && @strstr($request_headers["Content-Type"],
+ "application/x-www-form-urlencoded")
+ ) {
+ $post_data = OAuthUtil::parse_parameters(
+ file_get_contents(self::$POST_INPUT)
+ );
+ $parameters = array_merge($parameters, $post_data);
+ }
+
+ // We have a Authorization-header with OAuth data. Parse the header
+ // and add those overriding any duplicates from GET or POST
+ if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
+ $header_parameters = OAuthUtil::split_header(
+ $request_headers['Authorization']
+ );
+ $parameters = array_merge($parameters, $header_parameters);
+ }
+
+ }
+
+ return new OAuthRequest($http_method, $http_url, $parameters);
+ }
+
+ /**
+ * pretty much a helper function to set up the request
+ */
+ public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
+ @$parameters or $parameters = array();
+ $defaults = array("oauth_version" => OAuthRequest::$version,
+ "oauth_nonce" => OAuthRequest::generate_nonce(),
+ "oauth_timestamp" => OAuthRequest::generate_timestamp(),
+ "oauth_consumer_key" => $consumer->key);
+ if ($token)
+ $defaults['oauth_token'] = $token->key;
+
+ $parameters = array_merge($defaults, $parameters);
+
+ return new OAuthRequest($http_method, $http_url, $parameters);
+ }
+
+ public function set_parameter($name, $value, $allow_duplicates = true) {
+ if ($allow_duplicates && isset($this->parameters[$name])) {
+ // We have already added parameter(s) with this name, so add to the list
+ if (is_scalar($this->parameters[$name])) {
+ // This is the first duplicate, so transform scalar (string)
+ // into an array so we can add the duplicates
+ $this->parameters[$name] = array($this->parameters[$name]);
+ }
+
+ $this->parameters[$name][] = $value;
+ } else {
+ $this->parameters[$name] = $value;
+ }
+ }
+
+
+ public function set_http_header(&$multipart = NULL) {
+ if (empty($this->parameters)) {
+ $this->http_header[] = 'Content-Type:';
+ $this->http_header[] = 'Content-Length:';
+ } else {
+ if($multipart) $this->http_header[] = $this->to_header(); //add OAuth header if we post multipart
+ $this->http_header[] = 'Expect: ';
+ }
+ }
+
+ public function get_parameter($name) {
+ return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
+ }
+
+ public function get_parameters() {
+ return $this->parameters;
+ }
+
+ public function unset_parameter($name) {
+ unset($this->parameters[$name]);
+ }
+
+ /**
+ * The request parameters, sorted and concatenated into a normalized string.
+ * @return string
+ */
+ public function get_signable_parameters() {
+ // Grab all parameters
+ $params = $this->parameters;
+
+ // Remove oauth_signature if present
+ // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
+ if (isset($params['oauth_signature'])) {
+ unset($params['oauth_signature']);
+ }
+
+ return OAuthUtil::build_http_query($params);
+ }
+
+ /**
+ * Returns the base string of this request
+ *
+ * The base string defined as the method, the url
+ * and the parameters (normalized), each urlencoded
+ * and the concated with &.
+ */
+ public function get_signature_base_string() {
+ $parts = array(
+ $this->get_normalized_http_method(),
+ $this->get_normalized_http_url(),
+ $this->get_signable_parameters()
+ );
+
+ $parts = OAuthUtil::urlencode_rfc3986($parts);
+
+ return implode('&', $parts);
+ }
+
+ /**
+ * just uppercases the http method
+ */
+ public function get_normalized_http_method() {
+ return strtoupper($this->http_method);
+ }
+
+ /**
+ * parses the url and rebuilds it to be
+ * scheme://host/path
+ */
+ public function get_normalized_http_url() {
+ $parts = parse_url($this->http_url);
+
+ $port = @$parts['port'];
+ $scheme = $parts['scheme'];
+ $host = $parts['host'];
+ $path = @$parts['path'];
+
+ $port or $port = ($scheme == 'https') ? '443' : '80';
+
+ if (($scheme == 'https' && $port != '443')
+ || ($scheme == 'http' && $port != '80')) {
+ $host = "$host:$port";
+ }
+ return "$scheme://$host$path";
+ }
+
+ /**
+ * builds a url usable for a GET request
+ */
+ public function to_url() {
+ $post_data = $this->to_postdata();
+ $out = $this->get_normalized_http_url();
+ if ($post_data) {
+ $out .= '?'.$post_data;
+ }
+ return $out;
+ }
+
+ /**
+ * builds the data one would send in a POST request
+ */
+ public function to_postdata() {
+ return OAuthUtil::build_http_query($this->parameters);
+ }
+
+ /**
+ * builds the Authorization: header
+ */
+ public function to_header($realm=NULL) {
+ $out = 'Authorization: OAuth ';
+ if ($realm) $out .= 'realm="'.$realm.'",';
+ $total = array();
+ foreach ($this->parameters as $k => $v) {
+ if (substr($k, 0, 5) != "oauth") continue;
+ if (is_array($v)) {
+ throw new OAuthException('Arrays not supported in headers');
+ }
+ $out .= OAuthUtil::urlencode_rfc3986($k) .
+ '="' .
+ OAuthUtil::urlencode_rfc3986($v) .
+ '",';
+ }
+ return substr($out,0,-1);
+ }
+
+ public function __toString() {
+ return $this->to_url();
+ }
+
+
+ public function sign_request($signature_method, $consumer, $token) {
+ $this->set_parameter(
+ "oauth_signature_method",
+ $signature_method->get_name(),
+ false
+ );
+ $signature = $this->build_signature($signature_method, $consumer, $token);
+ $this->set_parameter("oauth_signature", $signature, false);
+ }
+
+ public function build_signature($signature_method, $consumer, $token) {
+ $signature = $signature_method->build_signature($this, $consumer, $token);
+ return $signature;
+ }
+
+ /**
+ * util function: current timestamp
+ */
+ private static function generate_timestamp() {
+ return $_SERVER['REQUEST_TIME'];
+ }
+
+ /**
+ * util function: current nonce
+ */
+ private static function generate_nonce() {
+ $mt = microtime();
+ $rand = mt_rand();
+
+ return md5($mt . $rand); // md5s look nicer than numbers
+ }
+}
+
+class OAuthUtil {
+ public static function urlencode_rfc3986($input) {
+ if (is_array($input)) {
+ return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
+ } else if (is_scalar($input)) {
+ return str_replace(
+ '+',
+ ' ',
+ str_replace('%7E', '~', rawurlencode($input))
+ );
+ } else {
+ return '';
+ }
+}
+
+
+ // This decode function isn't taking into consideration the above
+ // modifications to the encoding process. However, this method doesn't
+ // seem to be used anywhere so leaving it as is.
+ public static function urldecode_rfc3986($string) {
+ return urldecode($string);
+ }
+
+ // Utility function for turning the Authorization: header into
+ // parameters, has to do some unescaping
+ // Can filter out any non-oauth parameters if needed (default behaviour)
+ public static function split_header($header, $only_allow_oauth_parameters = true) {
+ $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
+ $offset = 0;
+ $params = array();
+ while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
+ $match = $matches[0];
+ $header_name = $matches[2][0];
+ $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
+ if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
+ $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
+ }
+ $offset = $match[1] + strlen($match[0]);
+ }
+
+ if (isset($params['realm'])) {
+ unset($params['realm']);
+ }
+
+ return $params;
+ }
+
+ // helper to try to sort out headers for people who aren't running apache
+ public static function get_headers() {
+ if (function_exists('apache_request_headers')) {
+ // we need this to get the actual Authorization: header
+ // because apache tends to tell us it doesn't exist
+ return apache_request_headers();
+ }
+ // otherwise we don't have apache and are just going to have to hope
+ // that $_SERVER actually contains what we need
+ $out = array();
+ foreach ($_SERVER as $key => $value) {
+ if (substr($key, 0, 5) == "HTTP_") {
+ // this is chaos, basically it is just there to capitalize the first
+ // letter of every word that is not an initial HTTP and strip HTTP
+ // code from przemek
+ $key = str_replace(
+ " ",
+ "-",
+ ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
+ );
+ $out[$key] = $value;
+ }
+ }
+ return $out;
+ }
+
+ // This function takes a input like a=b&a=c&d=e and returns the parsed
+ // parameters like this
+ // array('a' => array('b','c'), 'd' => 'e')
+ public static function parse_parameters( $input ) {
+ if (!isset($input) || !$input) return array();
+
+ $pairs = explode('&', $input);
+
+ $parsed_parameters = array();
+ foreach ($pairs as $pair) {
+ $split = explode('=', $pair, 2);
+ $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
+ $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
+
+ if (isset($parsed_parameters[$parameter])) {
+ // We have already recieved parameter(s) with this name, so add to the list
+ // of parameters with this name
+
+ if (is_scalar($parsed_parameters[$parameter])) {
+ // This is the first duplicate, so transform scalar (string) into an array
+ // so we can add the duplicates
+ $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
+ }
+
+ $parsed_parameters[$parameter][] = $value;
+ } else {
+ $parsed_parameters[$parameter] = $value;
+ }
+ }
+ return $parsed_parameters;
+ }
+
+ public static function build_http_query($params,$multipart=NULL) {
+ if (!$params) return '';
+
+ // Urlencode both keys and values
+ $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
+ $values = OAuthUtil::urlencode_rfc3986(array_values($params));
+ $params = array_combine($keys, $values);
+
+ // Parameters are sorted by name, using lexicographical byte value ordering.
+ // Ref: Spec: 9.1.1 (1)
+ uksort($params, 'strcmp');
+
+ $pairs = array();
+ foreach ($params as $parameter => $value) {
+ if (is_array($value)) {
+ // If two or more parameters share the same name, they are sorted by their value
+ // Ref: Spec: 9.1.1 (1)
+ natsort($value);
+ foreach ($value as $duplicate_value) {
+ $pairs[] = $parameter . '=' . $duplicate_value;
+ }
+ } else {
+ $pairs[] = $parameter . '=' . $value;
+ }
+ }
+ // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
+ // Each name-value pair is separated by an '&' character (ASCII code 38)
+ return implode('&', $pairs);
+ }
+}
+
+?>
<span class="status_body">
<span title="Retweets from people you follow appear in your timeline." class="big-retweet-icon"></span>
<span class="status_id">'.$status->id_str.'</span>
- <span class="status_word"><a class="user_name" href="user.php?id='.$status_owner->screen_name.'">'.$status_owner->screen_name.'</a> <span class="tweet"> '.$text.'</span></span>
+ <span class="status_word"><a class="user_name" href="user.php?id='.$status_owner->screen_name.'" id="'.$status_owner->screen_name.'">'.($_COOKIE['shownick']=='true' ? $status_owner->name : $status_owner->screen_name).'</a> <span class="tweet"> '.$text.'</span></span>
<span class="actions">
<a class="replie_btn" title="Reply" href="#">Reply</a>
<a class="rt_btn" title="Retweet" href="#">Retweet</a>';
<span class="status_body">
<span title="Retweets from people you follow appear in your timeline." class="big-retweet-icon"></span><span class="status_id">'.$status->id_str.'</span>
<span class="status_word">
- <a class="user_name" href="user.php?id='.$status_owner->screen_name.'">'.$status_owner->screen_name.'</a><span class="tweet"> '.$text.'</span></span>
+ <a class="user_name" href="user.php?id='.$status_owner->screen_name.'" id="'.$status_owner->screen_name.'">'.($_COOKIE['shownick']=='true' ? $status_owner->name : $status_owner->screen_name).'</a><span class="tweet"> '.$text.'</span></span>
<span class="actions">
<a class="replie_btn" title="Reply" href="#">Reply</a>
<a class="rt_btn" title="Retweet" href="#">Retweet</a>';
</span>
<span class="status_info">via '.$status->source.'
<span class="date"><a href="status.php?id='.$status->id_str.'" id="'.$date.'" target="_blank">'.date('Y-m-d H:i:s', $date).'</a></span>
+ retweeted by '.$status->retweet_count.
+ (($status->retweet_count>1)?' persons':' person').'
</span>
</span>';
$html .= $status->favorited ? '<i class="faved"></i>' : '';
function getRetweeters($id, $count = 20){
$t = getTwitter();
- $retweeters = $t->getRetweeters($id);
+ $retweets = $t->retweets($id, $count);
$html = '<span class="vcard">';
- foreach($retweeters as $retweeter){
- $user = $retweeter->user;
+ foreach($retweets as $retweet){
+ $user = $retweet->user;
$html .= '<a class="url" title="'.$user->name.'" rel="contact" href="../user.php?id='.$user->screen_name.'">
<img class="photo fn" width="24" height="24" src="'.getAvatar($user->profile_image_url).'" alt="'.$user->name.'" />
</a>';
</span>
<span class="status_body">
<span class="status_id">'.$status->id_str.'</span>
- <span class="status_word"><a class="user_name" href="user.php?id='.$user->screen_name.'">'.$user->screen_name.'</a> <span class="tweet"> '.$text.'</span></span>';
+ <span class="status_word"><a class="user_name" href="user.php?id='.$user->screen_name.'" id="'.$user->screen_name.'">'.($_COOKIE['shownick']=='true' ? $user->name : $user->screen_name).'</a> <span class="tweet"> '.$text.'</span></span>';
$output .= "<span class=\"actions\">
<a class=\"replie_btn\" title=\"Reply\" href=\"#\">Reply</a>
<a class=\"rt_btn\" title=\"Retweet\" href=\"#\">Retweet</a>
function format_message($message,$isSentPage=false) {
if ($isSentPage) {
$name = $message->recipient_screen_name;
+ $nick = $message->recipient->name;
$imgurl = getAvatar($message->recipient->profile_image_url);
$messenger = $message->recipient;
} else {
$name = $message->sender_screen_name;
+ $nick = $message->sender->name;
$imgurl = getAvatar($message->sender->profile_image_url);
$messenger = $message->sender;
}
</span>
<span class=\"status_body\">
<span class=\"status_id\">$message->id </span>
- <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$name\">$name</a> $text </span>
+ <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$name\" id=\"$name\">".($_COOKIE["shownick"]=='true' ? $nick : $name)."</a> $text </span>
<span class=\"actions\">
";
-<?php\r
- set_time_limit(15);\r
- if(!isset($_SESSION)){\r
- session_start();\r
- }\r
- include_once('mobile_device_detect.php');\r
- mobile_device_detect(true,true,true,true,true,true,'https://t.orzdream.com/',false);\r
- include_once('config.php');\r
- include_once('utility.php');\r
- include_once('twitteroauth.php');\r
- include_once('oauth_lib.php');\r
-\r
- function refreshProfile(){\r
- $t = getTwitter();\r
- $user = $t->veverify();\r
- $time = $_SERVER['REQUEST_TIME']+3600*24*365;\r
- setcookie('friends_count', $user->friends_count, $time, '/');\r
- setcookie('statuses_count', $user->statuses_count, $time, '/');\r
- setcookie('followers_count', $user->followers_count, $time, '/');\r
- setcookie('imgurl', getAvatar($user->profile_image_url), $time, '/');\r
- setcookie('name', $user->screen_name, $time, '/');\r
- setcookie('listed_count', GetListed($t), $time, '/');\r
- }\r
-\r
- function getDefCookie($name, $default="") {\r
- if (getCookie($name)) return getCookie($name);\r
- else return $default;\r
- }\r
- function format_time($time){\r
- date_default_timezone_set('UTC');\r
- return strtotime($time);\r
- }\r
- function formatText($text) {\r
- //如果开启了魔术引号\" \' 转回来\r
- if (get_magic_quotes_gpc()) {\r
- $text = stripslashes($text);\r
- }\r
-\r
- //添加url链接\r
- $urlReg = '/(((http|https|ftp):\/\/){1}([[:alnum:]\-\.])+(\.)(([[:alnum:]]){2,4})?([[:alnum:]\/+=%#&@\:\;_\.~\?\!\-\,]*))/i';\r
- $text = preg_replace($urlReg, '<a href="\1" target="_blank" rel="noreferrer">\1</a>', $text);\r
-\r
- //添加@链接\r
- $atReg = '/\B@{1}(([a-zA-Z0-9\_\.\-])+)/i';\r
- $text = preg_replace($atReg, '<a href="user.php?id=\1" target="_blank">\0</a>', $text);\r
-\r
- //添加 list 链接\r
- $listReg = '/(\<a[\w+=\:\%\#\&\.~\?\"\'\/\- ]+\>@{1}([a-zA-Z0-9_\.\-]+)<\/a\>([\/a-zA-Z0-9_\.\-]+))/i';\r
- $text = preg_replace($listReg, '<a href="list.php?id=\2\3" target="_blank">@\2\3</a>', $text);\r
-\r
- //添加标签链接\r
- $tagReg = "/\B(\#{1}([\w]*[\pN\pC\pL]+[\w]*))([\s]*)/u";\r
- $text = preg_replace($tagReg, '<a target="_blank" href="search.php?q=%23\2">#<span class="hashtag">\2</span></a>\3', $text);\r
-\r
- $text = formatTweetID($text);\r
-\r
- return $text;\r
- }\r
-\r
- function formatEntities(&$entities,$html){\r
- $user_mentions = $entities->user_mentions;\r
- $hashtags = $entities->hashtags;\r
- $urls = $entities->urls;\r
- if(count($user_mentions) > 0) {\r
- foreach($user_mentions as $user_mention) {\r
- $name = $user_mention->screen_name;\r
- $html = str_replace("@$name","<a href=\"user.php?id=$name\" target=\"_blank\">@$name</a>",$html);\r
- }\r
- }\r
- if(count($hashtags) > 0) {\r
- foreach($hashtags as $hashtag) {\r
- $text = $hashtag->text;\r
- $html = str_replace("#$text","<a target=\"_blank\" href=\"search.php?q=%23$text\">#<span class=\"hashtag\">$text</span></a>",$html);\r
- } \r
- }\r
- if(count($urls) > 0) {\r
- $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';\r
- foreach($urls as $url) {\r
- $exp = is_null($url->expanded_url) ? $url->url : $url->expanded_url;\r
- if(substr($url->url,0,4) != 'http') $url->url = 'http://'.$url->url;\r
- if(isset($url->display_url)) {\r
- $dis = $url->display_url;\r
- } else {\r
- $tmp = explode('://', $url->url);\r
- $dis = $tmp[1];\r
- }\r
- $html = str_replace($url->url,"<a href=\"$exp\" target=\"_blank\" rel=\"noreferrer\" class=\"tweet_url\">$dis</a>",$html);\r
- } \r
- }\r
- if(isset($entities->media)) {\r
- $medias = $entities->media;\r
- foreach($medias as $media) {\r
- $url = $media->media_url_https;\r
- if (getcookie('p_avatar') == 'true') {\r
- $url = 'img.php?imgurl='.$url;\r
- }\r
- $html = str_replace($media->url,"<a href=\"$url\" target=\"_blank\" rel=\"noreferrer\">$media->display_url</a>",$html);\r
- }\r
- }\r
- return $html;\r
- }\r
-\r
- function formatTweetID($text){\r
- $reg = '/(\<a[\w+=@\:\%\#\&\.~\?\"\'\/\-\! ]+\>[\S]+<\/a\>)/i';\r
- preg_match_all($reg, $text, $tmpMatches);\r
- if(count($tmpMatches) > 0){\r
- $text = preg_replace($reg, '$_holder_$', $text);\r
- }\r
- preg_match_all('/([\d]{10,})/', $text, $matches);\r
- if(count($matches) > 0){\r
- $matches = array_unique($matches[0]);\r
- foreach($matches as $match){\r
- $text = str_replace($match, '<a title="We think it\'s a tweet ID, isn\'t it?" href="status.php?id='.$match.'" target="_blank">'.$match.'</a>', $text);\r
- }\r
- $tmpReg = '/\$_holder_\$/i';\r
- foreach($tmpMatches[0] as $match){\r
- $text = preg_replace($tmpReg, $match, $text, 1);\r
- }\r
- }\r
- return $text;\r
- }\r
-\r
- function processCurl($url,$postdata=false,$header=false)\r
- {\r
- $ch = curl_init($url);\r
-\r
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\r
- curl_setopt($ch, CURLOPT_VERBOSE, 1);\r
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);\r
- curl_setopt($ch, CURLOPT_TIMEOUT,120);\r
- \r
- if($postdata !== false) {\r
- curl_setopt ($ch, CURLOPT_POST, true);\r
- curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);\r
- }\r
- \r
- if($header !== false) {\r
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);\r
- }\r
- \r
- $response = curl_exec($ch);\r
- $responseInfo=curl_getinfo($ch);\r
- curl_close($ch);\r
- if( intval( $responseInfo['http_code'] ) == 200 )\r
- return $response; \r
- else\r
- return false;\r
- }\r
-\r
- function objectifyXml( $data ){\r
-\r
- if( function_exists('simplexml_load_string') ) {\r
- $obj = simplexml_load_string( $data );\r
- }\r
- if (isset($obj->error) || !$obj) return false;\r
- else return $obj;\r
-\r
- return false;\r
- }\r
-\r
- function objectifyJson($data){\r
- if(function_exists("json_decode")){\r
- $obj = json_decode($data);\r
- }\r
- if(!isset($obj->error) || $obj){\r
- return $obj;\r
- }\r
- return false;\r
- }\r
-\r
-\r
- function imageUpload($image){\r
- $t = getTwitter();\r
- $signingurl = 'https://api.twitter.com/1/account/verify_credentials.json';\r
- $request = OAuthRequest::from_consumer_and_token($t->consumer, $t->token, 'GET', $signingurl, array());\r
- $request->sign_request($t->sha1_method, $t->consumer, $t->token);\r
- $r_header = $request->to_header("http://api.twitter.com/");\r
- \r
- $url = 'http://img.ly/api/2/upload.json';\r
- $postdata = array('media' => $image); \r
- $ch = curl_init($url); \r
- if($postdata !== false)\r
- {\r
- curl_setopt ($ch, CURLOPT_POST, true);\r
- curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);\r
- }\r
- curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Auth-Service-Provider: '.$signingurl,'X-Verify-Credentials-'.$r_header)); \r
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\r
- curl_setopt($ch, CURLOPT_USERAGENT, 'embr');\r
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);\r
- curl_setopt($ch, CURLOPT_TIMEOUT,120);\r
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5);\r
-\r
- $response = curl_exec($ch);\r
- $response_info=curl_getinfo($ch);\r
- curl_close($ch);\r
- \r
- if ($response_info['http_code'] == 200) {\r
- return objectifyJson($response);\r
- } else {\r
- return null;\r
- }\r
- }\r
- \r
- function getTwitter() {\r
- if(loginStatus()){\r
- $access_token = $_SESSION['access_token'] ? $_SESSION['access_token'] : null;\r
- $oauth_token = $access_token ? $access_token['oauth_token'] : $_COOKIE['oauth_token'];\r
- $oauth_token_secret = $access_token ? $access_token['oauth_token_secret'] : $_COOKIE['oauth_token_secret'];\r
- $oauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);\r
- return $oauth;\r
- }\r
- return null;\r
- }\r
-\r
- function loginStatus() {\r
- if(isset($_SESSION['login_status'])){\r
- return $_SESSION['login_status'] == 'verified' ? true : false;\r
- }elseif(getEncryptCookie("oauth_token") != "" && getEncryptCookie("oauth_token_secret") != "" && getEncryptCookie("user_id") != "" && getEncryptCookie("twitese_name") != ""){\r
- $access_token = array("oauth_token" => getEncryptCookie("oauth_token"), "oauth_token_secret" => getEncryptCookie("oauth_token_secret"), "user_id" => getEncryptCookie("user_id"), "screen_name" => getEncryptCookie("twitese_name"));\r
- $_SESSION['access_token'] = $access_token;\r
- $_SESSION['login_status'] = 'verified';\r
- refreshProfile();\r
- return true;\r
- }\r
- return false;\r
- }\r
-\r
- function GetListed($t, $cursor = false){\r
- $lists = $t->beAddedLists($t->username, $cursor);\r
- $listed = count($lists->lists);\r
- if($lists->next_cursor > 1){\r
- $listed += GetListed($t, $lists->next_cursor);\r
- }\r
- return $listed;\r
- }\r
-\r
- function getAvatar($profileImg){\r
- if (getcookie('p_avatar') == 'true') {\r
- return 'img.php?imgurl='.$profileImg;\r
- }\r
- return preg_replace('/https?:\/\/\w+([0-9])\.twimg\.com/i','https://s3.amazonaws.com/twitter_production',$profileImg);\r
- }\r
-\r
- // $target: can't be current user\r
- // $source: use the current user as the source user implicitly if not specified\r
- // 9 => no relationship\r
- // 1 => fo each other\r
- // 2 => $source fo $target\r
- // 3 => $target fo $source\r
- // 4 => $source blocking $target\r
- function getRelationship($target, $source = false){\r
- $relationship = getTwitter()->relationship($target, $source)->relationship;\r
- $target = $relationship->target;\r
- $source = $relationship->source;\r
- if($source->blocking == 1){\r
- return 4;\r
- }\r
- if($source->following == 1 && $target->following == 1){\r
- return 1;\r
- }\r
- if($source->following == 1 && $target->following != 1){\r
- return 2;\r
- }\r
- if($source->following != 1 && $target->following == 1){\r
- return 3;\r
- }\r
- return 9;\r
- }\r
- \r
- function urlshorten($url, $type='goo.gl'){\r
- switch($type){\r
- case 'goo.gl':\r
- $data = json_encode(array('longUrl' => $url));\r
- $api = 'https://www.googleapis.com/urlshortener/v1/url?key=AIzaSyDsX2BAo9Jc2yG3Pq1VbLQALqdrtDFvXkg';\r
- $header = array('Content-type: application/json');\r
- $result = objectifyJson(processCurl($api,$data,$header))->id;\r
- break;\r
- case 'zi.mu':\r
- $api = 'http://zi.mu/api.php?format=simple&action=shorturl&url=';\r
- $result = objectifyJson(processCurl($api.rawurlencode($url)));\r
- break;\r
- default:\r
- break;\r
- }\r
- return $result;\r
- }\r
-?>\r
+<?php
+ set_time_limit(15);
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ include_once('mobile_device_detect.php');
+ mobile_device_detect(true,true,true,true,true,true,'https://t.orzdream.com/',false);
+ include_once('config.php');
+ include_once('utility.php');
+ include_once('twitteroauth.php');
+ include_once('oauth_lib.php');
+
+ function refreshProfile(){
+ $t = getTwitter();
+ $user = $t->veverify();
+ $time = $_SERVER['REQUEST_TIME']+3600*24*365;
+ setcookie('friends_count', $user->friends_count, $time, '/');
+ setcookie('statuses_count', $user->statuses_count, $time, '/');
+ setcookie('followers_count', $user->followers_count, $time, '/');
+ setcookie('imgurl', getAvatar($user->profile_image_url), $time, '/');
+ setcookie('name', $user->screen_name, $time, '/');
+ setcookie('listed_count', $user->listed_count, $time, '/');
+ }
+
+ function getDefCookie($name, $default="") {
+ if (getCookie($name)) return getCookie($name);
+ else return $default;
+ }
+ function format_time($time){
+ date_default_timezone_set('UTC');
+ return strtotime($time);
+ }
+ function formatText($text) {
+ //如果开启了魔术引号\" \' 转回来
+ if (get_magic_quotes_gpc()) {
+ $text = stripslashes($text);
+ }
+
+ //添加url链接
+ $urlReg = '/(((http|https|ftp):\/\/){1}([[:alnum:]\-\.])+(\.)(([[:alnum:]]){2,4})?([[:alnum:]\/+=%#&@\:\;_\.~\?\!\-\,]*))/i';
+ $text = preg_replace($urlReg, '<a href="\1" target="_blank" rel="noreferrer">\1</a>', $text);
+
+ //添加@链接
+ $atReg = '/\B@{1}(([a-zA-Z0-9\_\.\-])+)/i';
+ $text = preg_replace($atReg, '<a href="user.php?id=\1" target="_blank">\0</a>', $text);
+
+ //添加 list 链接
+ $listReg = '/(\<a[\w+=\:\%\#\&\.~\?\"\'\/\- ]+\>@{1}([a-zA-Z0-9_\.\-]+)<\/a\>([\/a-zA-Z0-9_\.\-]+))/i';
+ $text = preg_replace($listReg, '<a href="list.php?id=\2\3" target="_blank">@\2\3</a>', $text);
+
+ //添加标签链接
+ $tagReg = "/\B(\#{1}([\w]*[\pN\pC\pL]+[\w]*))([\s]*)/u";
+ $text = preg_replace($tagReg, '<a target="_blank" href="search.php?q=%23\2">#<span class="hashtag">\2</span></a>\3', $text);
+
+ $text = formatTweetID($text);
+
+ return $text;
+ }
+
+ function formatEntities(&$entities,$html){
+ $user_mentions = $entities->user_mentions;
+ $hashtags = $entities->hashtags;
+ $urls = $entities->urls;
+ if(count($user_mentions) > 0) {
+ foreach($user_mentions as $user_mention) {
+ $name = $user_mention->screen_name;
+ $html = str_replace("@$name","<a href=\"user.php?id=$name\" target=\"_blank\">@$name</a>",$html);
+ }
+ }
+ if(count($hashtags) > 0) {
+ foreach($hashtags as $hashtag) {
+ $text = $hashtag->text;
+ $html = str_replace("#$text","<a target=\"_blank\" href=\"search.php?q=%23$text\">#<span class=\"hashtag\">$text</span></a>",$html);
+ }
+ }
+ if(count($urls) > 0) {
+ $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';
+ foreach($urls as $url) {
+ $exp = is_null($url->expanded_url) ? $url->url : $url->expanded_url;
+ if(substr($url->url,0,4) != 'http') $url->url = 'http://'.$url->url;
+ if(isset($url->display_url)) {
+ $dis = $url->display_url;
+ } else {
+ $tmp = explode('://', $url->url);
+ $dis = $tmp[1];
+ }
+ $html = str_replace($url->url,"<a href=\"$exp\" target=\"_blank\" rel=\"noreferrer\" class=\"tweet_url\">$dis</a>",$html);
+ }
+ }
+ if(isset($entities->media)) {
+ $medias = $entities->media;
+ foreach($medias as $media) {
+ $url = $media->media_url_https;
+ if (getcookie('p_avatar') == 'true') {
+ $url = 'img.php?imgurl='.$url;
+ }
+ $html = str_replace($media->url,"<a href=\"$url\" target=\"_blank\" rel=\"noreferrer\">$media->display_url</a>",$html);
+ }
+ }
+ return $html;
+ }
+
+ function formatTweetID($text){
+ $reg = '/(\<a[\w+=@\:\%\#\&\.~\?\"\'\/\-\! ]+\>[\S]+<\/a\>)/i';
+ preg_match_all($reg, $text, $tmpMatches);
+ if(count($tmpMatches) > 0){
+ $text = preg_replace($reg, '$_holder_$', $text);
+ }
+ preg_match_all('/([\d]{10,})/', $text, $matches);
+ if(count($matches) > 0){
+ $matches = array_unique($matches[0]);
+ foreach($matches as $match){
+ $text = str_replace($match, '<a title="We think it\'s a tweet ID, isn\'t it?" href="status.php?id='.$match.'" target="_blank">'.$match.'</a>', $text);
+ }
+ $tmpReg = '/\$_holder_\$/i';
+ foreach($tmpMatches[0] as $match){
+ $text = preg_replace($tmpReg, $match, $text, 1);
+ }
+ }
+ return $text;
+ }
+
+ function processCurl($url,$postdata=false,$header=false)
+ {
+ $ch = curl_init($url);
+
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_VERBOSE, 1);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+ curl_setopt($ch, CURLOPT_TIMEOUT,120);
+
+ if($postdata !== false) {
+ curl_setopt ($ch, CURLOPT_POST, true);
+ curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
+ }
+
+ if($header !== false) {
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
+ }
+
+ $response = curl_exec($ch);
+ $responseInfo=curl_getinfo($ch);
+ curl_close($ch);
+ if( intval( $responseInfo['http_code'] ) == 200 )
+ return $response;
+ else
+ return false;
+ }
+
+ function objectifyXml( $data ){
+
+ if( function_exists('simplexml_load_string') ) {
+ $obj = simplexml_load_string( $data );
+ }
+ if (isset($obj->error) || !$obj) return false;
+ else return $obj;
+
+ return false;
+ }
+
+ function objectifyJson($data){
+ if(function_exists("json_decode")){
+ $obj = json_decode($data);
+ }
+ if(!isset($obj->error) || $obj){
+ return $obj;
+ }
+ return false;
+ }
+
+
+ function imageUpload($image){
+ $t = getTwitter();
+ $signingurl = API_URL.'/account/verify_credentials.json';
+ $request = OAuthRequest::from_consumer_and_token($t->consumer, $t->token, 'GET', $signingurl, array());
+ $request->sign_request($t->sha1_method, $t->consumer, $t->token);
+ $r_header = $request->to_header("https://api.twitter.com/");
+
+ $url = 'http://img.ly/api/2/upload.json';
+ $postdata = array('media' => $image);
+ $ch = curl_init($url);
+ if($postdata !== false)
+ {
+ curl_setopt ($ch, CURLOPT_POST, true);
+ curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
+ }
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Auth-Service-Provider: '.$signingurl,'X-Verify-Credentials-'.$r_header));
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_USERAGENT, 'embr');
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+ curl_setopt($ch, CURLOPT_TIMEOUT,120);
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5);
+
+ $response = curl_exec($ch);
+ $response_info=curl_getinfo($ch);
+ curl_close($ch);
+
+ if ($response_info['http_code'] == 200) {
+ return objectifyJson($response);
+ } else {
+ return $response_info['http_code'];
+ }
+ }
+
+ function getTwitter() {
+ if(loginStatus()){
+ $access_token = $_SESSION['access_token'] ? $_SESSION['access_token'] : null;
+ $oauth_token = $access_token ? $access_token['oauth_token'] : $_COOKIE['oauth_token'];
+ $oauth_token_secret = $access_token ? $access_token['oauth_token_secret'] : $_COOKIE['oauth_token_secret'];
+ $oauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
+ return $oauth;
+ }
+ return null;
+ }
+
+ function loginStatus() {
+ if(isset($_SESSION['login_status'])){
+ return $_SESSION['login_status'] == 'verified' ? true : false;
+ }elseif(getEncryptCookie("oauth_token") != "" && getEncryptCookie("oauth_token_secret") != "" && getEncryptCookie("user_id") != "" && getEncryptCookie("twitese_name") != ""){
+ $access_token = array("oauth_token" => getEncryptCookie("oauth_token"), "oauth_token_secret" => getEncryptCookie("oauth_token_secret"), "user_id" => getEncryptCookie("user_id"), "screen_name" => getEncryptCookie("twitese_name"));
+ $_SESSION['access_token'] = $access_token;
+ $_SESSION['login_status'] = 'verified';
+ refreshProfile();
+ return true;
+ }
+ return false;
+ }
+
+ function getAvatar($profileImg){
+ if (getcookie('p_avatar') == 'true') {
+ return 'img.php?imgurl='.$profileImg;
+ }
+ return preg_replace('/https?:\/\/\w+([0-9])\.twimg\.com/i','https://s3.amazonaws.com/twitter_production',$profileImg);
+ }
+
+ // $target: can't be current user
+ // $source: use the current user as the source user implicitly if not specified
+ // 9 => no relationship
+ // 1 => fo each other
+ // 2 => $source fo $target
+ // 3 => $target fo $source
+ // 4 => $source blocking $target
+ function getRelationship($target, $source = false){
+ $relationship = getTwitter()->relationship($target, $source)->relationship;
+ $target = $relationship->target;
+ $source = $relationship->source;
+ if($source->blocking != null){
+ return 4;
+ }
+ if($source->following == true && $target->following == true){
+ return 1;
+ }
+ if($source->following == true && $target->following == false){
+ return 2;
+ }
+ if($source->following == false && $target->following == true){
+ return 3;
+ }
+ return 9;
+ }
+
+ function urlshorten($url, $type='goo.gl'){
+ switch($type){
+ case 'goo.gl':
+ $data = json_encode(array('longUrl' => $url));
+ $api = 'https://www.googleapis.com/urlshortener/v1/url?key=AIzaSyDsX2BAo9Jc2yG3Pq1VbLQALqdrtDFvXkg';
+ $header = array('Content-type: application/json');
+ $result = objectifyJson(processCurl($api,$data,$header))->id;
+ break;
+ case 'zi.mu':
+ $api = 'http://zi.mu/api.php?format=simple&action=shorturl&url=';
+ $result = objectifyJson(processCurl($api.rawurlencode($url)));
+ break;
+ default:
+ break;
+ }
+ return $result;
+ }
+
+ function expandRedirect($shorturl, &$hops) {
+ if (count($hops) >= 10) {
+ return false;
+ }
+ $head = array_change_key_case(get_headers($shorturl, TRUE), CASE_LOWER);
+ if (!isset($head['location']) || empty($head['location'])) {
+ return $shorturl;
+ }
+ $prevhop = $shorturl;
+ foreach((array)$head['location'] as $redir) {
+ if (substr($redir, 0, 1)=='/' || preg_match('/[\.\/]'.preg_quote(parse_url($prevhop, PHP_URL_HOST)).'$/', parse_url($redir, PHP_URL_HOST))) {
+ return $prevhop;
+ }
+ $hops[] = $prevhop;
+ $prevhop = $redir;
+ }
+ return expandRedirect($redir, $hops);
+ }
+?>
+++ /dev/null
-<?php
-if (get_magic_quotes_gpc()) {
-
- $_REQUEST = array_map('stripslashes', $_REQUEST);
- $_GET = array_map('stripslashes', $_GET);
- $_POST = array_map('stripslashes', $_POST);
- $_COOKIE = array_map('stripslashes', $_COOKIE);
-
-}
-class twitter{
- var $username='';
- var $password='';
- var $user_agent='API';
- var $type='json';
-
- var $headers=array('Expect:', 'X-Twitter-Client: ','X-Twitter-Client-Version: ','X-Twitter-Client-URL: ');
- var $responseInfo=array();
- var $suppress_response_code = false;
- var $debug = false;
- public $timeout = 5;
- public $connecttimeout = 5;
-
- function twitter($username = '', $password = '', $type = 'json')
- {
- if ($username != '' && $password != '') {
- $this->username = $username;
- $this->password = $password;
- $this->type = $type;
- }
- }
-
- function veverify()
- {
- $request = API_URL . '/account/verify_credentials.' . $this->type;
- return $this->objectify( $this->process($request, false, 0) );
- }
-
- /**** Get user theme ****/
- function getTheme()
- {
- $twit = $this->veverify();
- $theme = array( 'background-color' => $twit->profile_background_color, 'background-image-url' => $twit->profile_background_image_url, 'background-tile' => $twit->profile_background_tile == true ? 'repeat' : 'no-repeat', 'link-color' => $twit->profile_link_color, 'sidebar-border-color' => $twit->profile_sidebar_border_color, 'sidebar-fill-color' => $twit->profile_sidebar_fill_color, 'text-color' => $twit->profile_text_color);
- return $theme;
- }
-
-
- /**** Status Methods ****/
-
- function showStatus( $id )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/statuses/show/'.$id . '.' . $this->type;
- return $this->objectify( $this->process($request) );
- }
-
- function update( $status, $replying_to = false )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $args = array();
- if( $status )
- $args['status'] = $status;
- if( $replying_to )
- $args['in_reply_to_status_id'] = $replying_to;
- $args['source'] = 'API';
-
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . '/statuses/update.' . $this->type . $qs;
-
- return $this->objectify( $this->process($request, true) );
- }
-
- function deleteStatus( $id ) {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/statuses/destroy/' . $id . '.' . $this->type;
- return $this->objectify( $this->process( $request, true ) );
- }
-
-
- /**** Timeline Methods ****/
-
- function publicTimeline( $sinceid = false )
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- $qs='';
- if( $sinceid !== false )
- $qs = '?since_id=' . intval($sinceid);
- $request = API_URL . '/statuses/public_timeline.' . $this->type . $qs;
-
- return $this->objectify( $this->process($request) );
- }
-
- function userTimeline($page=false,$id=false,$count=false,$since_id=false)
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- $args = array();
- if( $id )
- $args['id'] = $id;
- if( $count )
- $args['count'] = (int) $count;
- if( $since_id )
- $args['since_id'] = (int) $since_id;
- if( $page )
- $args['page'] = (int) $page;
-
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- if( $id === false )
- $request = API_URL . '/statuses/user_timeline.' . $this->type . $qs;
- else
- $request = API_URL . '/statuses/user_timeline/' . rawurlencode($id) . '.' . $this->type . $qs;
- $response = $this->process($request);
- if($response == false){
- return 'protected';
- }
- return $this->objectify($response);
-
- }
-
- function friendsTimeline( $page = false, $since_id = false, $count = false )
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- $args = array();
- if( $count )
- $args['count'] = $count;
- if( $since_id )
- $args['since_id'] = $since_id;
- if( $page )
- $args['page'] = (int) $page;
-
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . '/statuses/friends_timeline.' . $this->type . $qs;
- return $this->objectify( $this->process($request) );
-
- }
-
- function replies( $page = false, $since_id = false )
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- $args = array();
- if( $page )
- $args['page'] = (int) $page;
- if( $since_id )
- $args['since_id'] = $since_id;
-
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . '/statuses/mentions.' . $this->type . $qs;
-
- return $this->objectify( $this->process($request) );
-
- }
-
-
- /**** Direct Message Methods ****/
-
- function directMessages( $page = false, $since_id = false, $count = null )
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- $qs='?';
- $qsparams = array();
- if( $since_id )
- $qsparams['since_id'] = $since_id;
- if( $page )
- $qsparams['page'] = (int) $page;
-
- $request = API_URL . '/direct_messages.' . $this->type . '?' . $this->arrToStr($qsparams);
-
- return $this->objectify( $this->process($request) );
- }
-
- function sentDirectMessage( $page = false, $since = false, $since_id = false )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $qs = '?';
- $qsparams = array();
- if( $since !== false )
- $qsparams['since'] = rawurlencode($since);
- if( $since_id )
- $qsparams['since_id'] = (int) $since_id;
- if( $page )
- $qsparams['page'] = (int) $page;
-
- $request = API_URL . '/direct_messages/sent.' . $this->type . '?' . $this->arrToStr($qsparams);
- return $this->objectify( $this->process($request) );
- }
-
- function sendDirectMessage( $user, $text )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/direct_messages/new.' . $this->type;
- $postargs = 'user=' . rawurlencode($user) . '&text=' . rawurlencode($text);
-
- return $this->objectify( $this->process($request, $postargs) );
- }
-
- function deleteDirectMessage( $id )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/direct_messages/destroy/' . $id . '.' . $this->type;
- return $this->objectify( $this->process( $request, true ) );
- }
-
-
- /**** User Methods ****/
-
- function showUser( $id = false , $email = false, $user_id = false, $screen_name=false )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- if (!$id)
- $id = $this->username;
- if( $user_id ) :
- $qs = '?user_id=' . $user_id;
- elseif ( $screen_name ) :
- $qs = '?screen_name=' . (string) $screen_name;
- elseif ( $email ) :
- $qs = '?email=' . (string) $email;
- else :
- $qs = $id;
-
-endif;
-
-$request = API_URL . '/users/show/' . $qs . '.' . $this->type;
-
-return $this->objectify( $this->process($request) );
- }
-
- function friends( $id = false, $page = false , $count = 30 )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $args = array();
- if( $id )
- $args['id'] = $id;
- if( $count )
- $args['count'] = (int) $count;
- $args['cursor'] = $page ? $page : -1; // ¸ü»»ÁËÅжϱí´ïʽ
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . ($id ? "/statuses/friends/$id.$this->type" : "/statuses/friends.$this->type");
- $request .= $qs;
- return $this->objectify( $this->process($request) );
- }
-
- function relationship($target, $source = false){
- if($target == $this->username){
- return -1;
- }
- $args = array();
- $args['target_screen_name'] = $target;
- if($source){
- $args['source_screen_name'] = $source;
- }
- $request = API_TWITTER."/1/friendships/show.$this->type".$this->_glue($args);
- return $this->objectify($this->process($request));
- }
-
- function followers( $id = false, $page = false , $count = 30 )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $args = array();
- if( $id )
- $args['id'] = $id;
- if( $count )
- $args['count'] = (int) $count;
- $args['cursor'] = $page ? $page : -1; // ¸ü»»ÁËÅжϱí´ïʽ
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . ($id ? "/statuses/followers/$id.$this->type" : "/statuses/followers.$this->type");
- $request .= $qs;
-
- return $this->objectify( $this->process($request) );
- }
-
- /****** Favorites ******/
-
- function getFavorites( $page=false )
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- if( $page != false )
- $qs = '?page=' . $page;
-
- $request = API_URL . '/favorites.' . $this->type . $qs;
- return $this->objectify( $this->process($request) );
- }
-
- function makeFavorite( $id )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/favorites/create/' . $id . '.' . $this->type;
- return $this->objectify( $this->process($request, $args) );
- }
-
- function removeFavorite( $id )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/favorites/destroy/' . $id . '.' . $this->type;
- return $this->objectify( $this->process($request, true) );
- }
-
-
- /**** Friendship Methods ****/
-
- function isFriend( $user_a, $user_b )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $args = array();
- $args['user_a'] = $user_a;
- $args['user_b'] = $user_b;
- $qs = $this->_glue( $args );
-
- $request = API_URL . '/friendships/exists.' . $this->type . $qs;
- return $this->objectify( $this->process($request) );
- }
-
- function followUser( $id, $notifications = false )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/friendships/create/' . $id . '.' . $this->type;
- if( $notifications )
- $request .= '?follow=true';
-
- return $this->objectify( $this->process($request, true) );
- }
-
- function destroyUser( $id )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/friendships/destroy/' . $id . '.' . $this->type;
- return $this->objectify( $this->process($request, true) );
- }
-
- /****** Block Methods ******/
- function blockingList($page = false){
- $url = API_URL."/blocks/blocking.$this->type";
- if($page){
- $url .= "?page=$page";
- }
- return $this->objectify($this->process($url));
- }
-
- function blockingIDs(){
- $url = API_URL."blocks/blocking/ids.$this->type";
- return $this->objectify($this->process($url));
- }
-
- function blockUser($id)
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
- $request = API_URL . '/blocks/create/' . $id . '.' . $this->type;
- $args = array();
- $arps['post_method'] = 1;
- $result = $this->curl_process($request, $args);
- if($result->error == 'Not found'){
- return false;
- }else{
- return $result;
- }
- }
-
- function unblockUser($id)
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
- $request = API_URL . '/blocks/destroy/' . $id . '.' . $this->type;
- $args = array();
- $arps['post_method'] = 1;
- $result = $this->curl_process($request, $args);
- if($result->error == 'Not found'){
- return false;
- }else{
- return $result;
- }
- }
-
- function isBlocked($id)
- {
- $request = API_URL . '/blocks/exists/' . $id . '.' . $this->type;
- $result = $this->curl_process($request);
- if($result->error == 'Not found'){
- return "false";
- }else{
- return $result;
- }
- }
-
- /****** Trends ******/
- function trends(){
- $url = "http://search.twitter.com/trends.$this->type";
- return $this->curl_process($url);
- }
-
- /* ---------- Spam ---------- */
- function reportSpam($screen_name){
- $url = API_TWITTER."/1/report_spam.$this->type";
- $args = array();
- $args['screen_name'] = $screen_name;
- return $this->curl_process($url, $args);
- }
-
- /****** Social Graph ******/
-
- function socialGraphFollowing( $id = false)
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/friends/ids';
- if( $id )
- $request .= '/' . (int) $id . '.' . $this->type;
-
- return $this->objectify( $this->process($request) );
- }
-
- function socialGraphFollowedBy( $id = false )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/followers/ids';
- if( $id )
- $request .= '/' . (int) $id . '.' . $this->type;
-
- return $this->objectify( $this->process($request) );
- }
-
-
- /****** Account Methods ******/
-
- function updateDevice( $device )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- if( !in_array( $device, array('im','sms','none') ) )
- return false;
-
- $qs = '?device=' . $device;
- $request = API_URL . '/account/update_delivery_device.' . $this->type . $qs;
- return $this->objectify( $this->process( $request ) );
- }
-
- function updateAvatar( $file )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- // Adding @ ensures the POST will be raw multipart data encoded. This MUST be a file, not a URL. Handle it outside of the class.
- $postdata = array( 'image' => "@$file");
- $request = API_URL . '/account/update_profile_image.' . $this->type;
- return $this->objectify( $this->process( $request, $postdata ) );
- }
-
- function updateBackground( $file )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- // Adding @ ensures the POST will be raw multipart data encoded. This MUST be a file, not a URL. Handle it outside of the class.
- $postdata = array( 'image' => "@$file");
- $request = API_URL . '/account/update_profile_background_image.' . $this->type;
- return $this->objectify( $this->process( $request, $postdata ) );
- }
-
- function updateProfile( $fields = array() )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $postdata = array();
- foreach( $fields as $pk => $pv ) :
- switch( $pk )
- {
- case 'name' :
- $postdata[$pk] = (string) substr( $pv, 0, 20 );
- break;
- case 'email' :
- if( preg_match( '/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $pv ) )
- $postdata[$pk] = (string) $pv;
- break;
- case 'url' :
- $postdata[$pk] = (string) substr( $pv, 0, 100 );
- break;
- case 'location' :
- $postdata[$pk] = (string) substr( $pv, 0, 30 );
- break;
- case 'description' :
- $postdata[$pk] = (string) substr( $pv, 0, 160 );
- break;
- default :
- break;
- }
-endforeach;
-
-$request = API_URL . '/account/update_profile.' . $this->type;
-return $this->objectify( $this->process( $request, $postdata ) );
- }
-
- function updateColors( $colors = array() )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $postdata = array();
- foreach( $colors as $ck => $cv ) :
- if( preg_match('/^(?:(?:[a-f\d]{3}){1,2})$/i', $hex) ) :
- $postdata[$ck] = (string) $cv;
-endif;
-endforeach;
-
-$request = API_URL . '/account/update_profile_colors.' . $this->type;
-return $this->objectify( $this->process( $request, $postdata ) );
- }
-
-
- /**** Search Method ****/
-
- function search( $q = false, $page = false, $rpp = false)
- {
- if( !$q )
- return false;
- $qs = '?q='.urlencode($q);
- if( $page )
- $qs .= '&page='.$page;
- if($rpp){
- $qs .= '&rpp='.$rpp;
- }
- $searchApiUrl = strpos(API_URL, "twitter.com") > 0 ? "http://search.twitter.com" : API_URL;
- $request = $searchApiUrl . '/search.' . $this->type . $qs;
-
- return $this->objectify( $this->process($request) );
- }
-
- /**** List Method ****/
-
- function createdLists( $username = '', $cursor = false )
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- $args = array();
- if( $cursor )
- $args['cursor'] = $cursor;
-
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . '/' . $username . '/lists.' . $this->type . $qs;
-
- return $this->objectify( $this->process($request) );
-
- }
-
- function followedLists( $username = '', $cursor = false )
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- $args = array();
- if( $cursor )
- $args['cursor'] = $cursor;
-
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . '/' . $username . '/lists/subscriptions.' . $this->type . $qs;
-
- return $this->objectify( $this->process($request) );
-
- }
-
- function beAddedLists( $username = '', $cursor = false )
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- $args = array();
- if( $cursor )
- $args['cursor'] = $cursor;
-
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . '/' . $username . '/lists/memberships.' . $this->type . $qs;
-
- return $this->objectify( $this->process($request) );
-
- }
-
- //id¸ñʽ£ºusername/listname Àý:bang590/temp ÏÂͬ
- function listStatus( $id, $page = false, $since_id = false )
- {
- if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
- return false;
-
- if (!$id) {
- return false;
- }
-
- $arr = explode('/', $id);
- if (count($arr) != 2) return false;
- $username = $arr[0];
- $listname = $arr[1];
-
- $args = array();
- if( $page )
- $args['page'] = (int) $page;
- if( $since_id )
- $args['since_id'] = $since_id;
-
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . "/$username/lists/$listname/statuses." . $this->type . $qs;
-
- return $this->objectify( $this->process($request) );
-
- }
-
- function listInfo( $id ) {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- if (!$id) {
- return false;
- }
-
- $arr = explode('/', $id);
- if (count($arr) != 2) return false;
- $username = $arr[0];
- $listname = $arr[1];
-
- $request = API_URL . "/$username/lists/$listname." . $this->type;
- return $this->objectify( $this->process($request) );
- }
-
- function isFollowedList( $id )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $arr = explode('/', $id);
- if (count($arr) != 2) return false;
- $username = $arr[0];
- $listname = $arr[1];
-
- $request = API_URL . "/$username/$listname/subscribers/$this->username." . $this->type;
- return $this->objectify( $this->process($request) );
- }
-
-
- function listMembers( $id, $cursor = false )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $arr = explode('/', $id);
- if (count($arr) != 2) return false;
- $username = $arr[0];
- $listname = $arr[1];
-
- $args = array();
- if( $cursor )
- $args['cursor'] = $cursor;
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . "/1/$username/$listname/members." . $this->type . $qs;
- return $this->objectify( $this->process($request) );
- }
-
- function listFollowers( $id, $cursor = false )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $arr = explode('/', $id);
- if (count($arr) != 2) return false;
- $username = $arr[0];
- $listname = $arr[1];
-
- $args = array();
- if( $cursor )
- $args['cursor'] = $cursor;
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . "/1/$username/$listname/subscribers." . $this->type . $qs;
- return $this->objectify( $this->process($request) );
- }
-
- function followList( $id )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $arr = explode('/', $id);
- if (count($arr) != 2) return false;
- $username = $arr[0];
- $listname = $arr[1];
-
- $request = API_URL . "/1/$username/$listname/subscribers." . $this->type;
- return $this->objectify( $this->process($request, true) );
- }
-
- function unfollowList( $id )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $arr = explode('/', $id);
- if (count($arr) != 2) return false;
- $username = $arr[0];
- $listname = $arr[1];
-
- $request = API_URL . "/1/$username/$listname/subscribers." . $this->type;
- return $this->objectify( $this->process($request, "DELETE") );
- }
-
- function createList( $name, $description, $isProtect)
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $mode = $isProtect ? "private" : "public";
- $args = array();
- if( $name )
- $args['name'] = $name;
- if( $description )
- $args['description'] = $description;
- if( $isProtect )
- $args['mode'] = $mode;
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . "/$this->username/lists." . $this->type . $qs;
-
- return $this->objectify( $this->process($request, true) );
- }
-
- function editList( $prename, $name, $description, $isProtect)
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $mode = $isProtect ? "private" : "public";
- $args = array();
- if( $name )
- $args['name'] = $name;
- if( $description )
- $args['description'] = $description;
- if( $isProtect )
- $args['mode'] = $mode;
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . "/$this->username/lists/$prename." . $this->type . $qs;
-
- return $this->objectify( $this->process($request, true) );
- }
-
- function deleteList( $id)
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $arr = explode('/', $id);
- if (count($arr) != 2) return false;
- $username = $arr[0];
- $listname = $arr[1];
-
- $request = API_URL . "/$username/lists/$listname." . $this->type;
-
- return $this->objectify( $this->process($request, "DELETE") );
- }
-
-
- function deleteListMember( $id, $memberid )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $arr = explode('/', $id);
- if (count($arr) != 2) return false;
- $username = $arr[0];
- $listname = $arr[1];
-
- $args = array();
- if( $memberid )
- $args['id'] = $memberid;
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . "/$username/$listname/members." . $this->type . $qs;
-
- return $this->objectify( $this->process($request, "DELETE") );
- }
-
- function addListMember( $listid, $memberid )
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $args = array();
- if( $memberid )
- $args['id'] = $memberid;
- $qs = '';
- if( !empty( $args ) )
- $qs = $this->_glue( $args );
-
- $request = API_URL . "/$this->username/$listid/members." . $this->type . $qs;
- return $this->objectify( $this->process($request, true) );
- }
-
- /* ---------- Retweet ---------- */
- function getRetweeters($id, $count = false){
- $url = "http://api.twitter.com/1/statuses/retweets/$id.$this->type";
- if($count != false){
- $url .= "?count=$count";
- }
- return $this->objectify($this->process($url, $args));
- }
-
- function retweet($id){
- $url = "http://api.twitter.com/1/statuses/retweet/$id.$this->type";
- $args = array();
- $args['post_method'] = true;
- return $this->curl_process($url, $args);
- }
-
- function retweets($id, $count = false){
- $url = "http://api.twitter.com/1/statuses/retweets/id.$this->type";
- if($count){
- $url .= "?count=".($count > 100 ? 100 : $count);
- }
- return $this->curl_process($url);
- }
-
- function retweeted_by_me($page = false, $count = 20, $since_id = false, $max_id = false){
- $url = "http://api.twitter.com/1/statuses/retweeted_by_me.$this->type";
- $args = array();
- if($since_id){
- $args['since_id'] = $since_id;
- }
- if($max_id){
- $args['max_id'] = $max_id;
- }
- if($count){
- $args['count'] = $count;
- }
- if($page){
- $args['page'] = $page;
- }
- $url .= $this->_glue($args);
- return $this->curl_process($url);
- }
-
- function retweeted_to_me($page = false, $count = false, $since_id = false, $max_id = false){
- $url = "http://api.twitter.com/1/statuses/retweeted_to_me.$this->type";
- $args = array();
- if($since_id){
- $args['since_id'] = $since_id;
- }
- if($max_id){
- $args['max_id'] = $max_id;
- }
- if($count){
- $args['count'] = $count;
- }
- if($page){
- $args['page'] = $page;
- }
- $url .= $this->_glue($args);
- return $this->curl_process($url);
- }
-
- function retweets_of_me($page = false, $count = false, $since_id = false, $max_id = false){
- $url = "http://api.twitter.com/1/statuses/retweets_of_me.$this->type";
- $args = array();
- if($since_id){
- $args['since_id'] = $since_id;
- }
- if($max_id){
- $args['max_id'] = $max_id;
- }
- if($count){
- $args['count'] = $count;
- }
- if($page){
- $args['page'] = $page;
- }
- $url .= $this->_glue($args);
- return $this->curl_process($url);
- }
-
- /**** Twitese Method ****/
-
- function rank( $page = false, $count = false )
- {
- $args = array();
- if( $page )
- $args['page'] = $page;
- if( $count )
- $args['count'] = $count;
- $qs = $this->_glue( $args );
-
- $request = TWITESE_API_URL . '/rank.' . $this->type . $qs;
-
- return $this->objectify( $this->process($request) );
- }
-
- function browse( $page = false, $count = false )
- {
- $args = array();
- if( $page )
- $args['page'] = $page;
- if( $count )
- $args['count'] = $count;
- $qs = $this->_glue( $args );
-
- $request = TWITESE_API_URL . '/browse.' . $this->type . $qs;
-
- return $this->objectify( $this->process($request) );
- }
- /**** API Rate Limit ****/
- function ratelimit()
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
- $request = API_URL . '/account/rate_limit_status.' . $this->type;
- return $this->objectify( $this->process($request) );
- }
-
- function ratelimit_status()
- {
- return $this->ratelimit();
- }
-
- /**** Upload Photo ****/
- /****
- function twitgooUpload( $image ) {
- $postdata = array( 'media' => "@$image", 'username' => $this->username, 'password' => $this->password);
- $request = 'http://twitgoo.com/api/upload';
- $this->type = 'xml';
- return $this->objectify( $this->process( $request, $postdata ) );
- }
- ****/
- function imglyUpload( $image ) {
- $postdata = array( 'media' => "@$image", 'username' => $this->username, 'password' => $this->password);
- $request = 'http://img.ly/api/upload';
- $this->type = 'xml';
- $this->ssl_mode = 1;
- return $this->objectify( $this->process( $request, $postdata ) );
- }
-
- /****** Tests ******/
-
- function twitterAvailable()
- {
- if( !in_array( $this->type, array( 'xml','json' ) ) )
- return false;
-
- $request = API_URL . '/help/test.' . $this->type;
- if( $this->objectify( $this->process($request) ) == 'ok' )
- return true;
-
- return false;
- }
-
-
- /**** request method ****/
- function process($url,$postargs=false,$ssl_mode=0)
- {
- if ($this->debug) {
- echo $url;
- }
- $url = ( $this->suppress_response_code ) ? $url . '&suppress_response_code=true' : $url;
- $ch = curl_init($url);
- curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));
-
- if($postargs !== false)
- {
- curl_setopt ($ch, CURLOPT_POST, true);
- curl_setopt ($ch, CURLOPT_POSTFIELDS, $postargs);
- if ($postargs === "DELETE") {
- curl_setopt ($ch, CURLOPT_POSTFIELDS, "_method=DELETE");
- }
- }
-
-
- if($this->username !== false && $this->password !== false)
- curl_setopt($ch, CURLOPT_USERPWD, $this->username.':'.$this->password );
-
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- // curl_setopt($ch, CURLOPT_VERBOSE, 1);
- curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $ssl_mode);
-
- $response = curl_exec($ch);
-
- $this->responseInfo=curl_getinfo($ch);
- curl_close($ch);
- if(intval($this->responseInfo['http_code'] ) == 200)
- return $response;
- else
- return false;
- }
-
- function curl_process($url, $postargs = false)
- {
- $url = ( $this->suppress_response_code ) ? $url . '&suppress_response_code=true' : $url;
- $ch = curl_init($url);
- curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));
-
- if($postargs !== false)
- {
- if(isset($postargs['post_method'])){
- curl_setopt ($ch, CURLOPT_POST, true);
- }else{
- curl_setopt ($ch, CURLOPT_POST, true);
- curl_setopt ($ch, CURLOPT_POSTFIELDS, $postargs);
- if ($postargs === "DELETE") {
- curl_setopt ($ch, CURLOPT_POSTFIELDS, "_method=DELETE");
- }
- }
- }
-
- if($this->username !== false && $this->password !== false)
- curl_setopt($ch, CURLOPT_USERPWD, $this->username.':'.$this->password );
-
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
- curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
-
- $response = curl_exec($ch);
-
- $this->responseInfo = curl_getinfo($ch);
- curl_close($ch);
-
- if($response === false){
- return false;
- }
- if($this->type == 'xml'){
- return @simplexml_load_string($response);
- }else if($this->type == 'json'){
- return @json_decode($response);
- }
- }
-
- // Ôö¼Ó $api_type ²ÎÊý
- function objectify( $data )
- {
- if($date === false){
- return;
- }
- if( $this->type == 'json' ) {
- $result = @json_decode( $data );
- if ($this->debug) {
- echo '<pre>';
- print_r($result);
- echo '</pre>';
- }
- if (isset($result->error)) {
- if (substr_count($result->request, 'user_timeline') && $result->error == 'Not authorized') {
- return 'protected';
- }
- return false;
- }
- else return $result;
- }else if( $this->type == 'xml' ){
- if( function_exists('simplexml_load_string') ) {
- $obj = @simplexml_load_string( $data );
- }
- if ($this->debug) {
- echo '<pre>';
- print_r($obj);
- echo '</pre>';
- }
- if (isset($obj->error) || !$obj) return false;
- else return $obj;
- }
- else
- return false;
- }
-
- function arrToStr($postargs) {
- $post_str = '';
- foreach ($postargs as $key=>$value) {
- $post_str .= $key . "=" . $value . "&";
- }
- $post_str = substr($post_str, 0,-1);
- return $post_str;
- }
-
- function _glue( $array )
- {
- $query_string = '';
- foreach( $array as $key => $val ) :
- $query_string .= $key . '=' . rawurlencode( $val ) . '&';
-endforeach;
-
-return '?' . substr( $query_string, 0, strlen( $query_string )-1 );
- }
-}
-?>
-<?php\r
-/*\r
- * Abraham Williams (abraham@abrah.am) http://abrah.am\r
- *\r
- * Basic lib to work with Twitter's OAuth beta. This is untested and should not\r
- * be used in production code. Twitter's beta could change at anytime.\r
- *\r
- * Code based on:\r
- * Fire Eagle code - http://github.com/myelin/fireeagle-php-lib\r
- * twitterlibphp - http://github.com/jdp/twitterlibphp\r
- */\r
-\r
-//require_once('config.php');\r
-//require_once('oauth_lib.php');\r
-\r
-/**\r
- * Twitter OAuth class\r
- */\r
-class TwitterOAuth {\r
- /* Contains the last HTTP status code returned */\r
- public $http_code;\r
- /* Contains the last API call */\r
- public $last_api_call;\r
- /* Set up the API root URL */\r
- //public $host = "https://api.twitter.com/1/";\r
- public $host = API_URL;\r
- /* Set timeout default */\r
- public $timeout = 5;\r
- /* Set connect timeout */\r
- public $connecttimeout = 30;\r
- /* Verify SSL Cert */\r
- public $ssl_verifypeer = FALSE;\r
- /* Response type */\r
- public $type = 'json';\r
- /* Decode return json data */\r
- public $decode_json = TRUE;\r
-\r
- public $source = 'embr';\r
-\r
- // user info\r
- public $username;\r
- public $screen_name;\r
- public $user_id;\r
- \r
- //for debug use\r
- public $curl_info;\r
- public $http_header;\r
-\r
- /**\r
- * Set API URLS\r
- */\r
- function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; }\r
- function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }\r
- function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; }\r
- function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }\r
-\r
- /**\r
- * Debug helpers\r
- */\r
- function lastStatusCode() { return $this->http_status; }\r
- function lastAPICall() { return $this->last_api_call; }\r
-\r
- /**\r
- * construct TwitterOAuth object\r
- */\r
- function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {\r
- $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();\r
- $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);\r
- if (!empty($oauth_token) && !empty($oauth_token_secret)) {\r
- $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);\r
- $this->screen_name = $_SESSION['access_token']['screen_name'];\r
- $this->username = $_SESSION['access_token']['screen_name'];\r
- $this->user_id = $_SESSION['access_token']['user_id'];\r
- } else {\r
- $this->token = NULL;\r
- }\r
- }\r
-\r
-\r
- /**\r
- * Get a request_token from Twitter\r
- *\r
- * @returns a key/value array containing oauth_token and oauth_token_secret\r
- */\r
- function getRequestToken($oauth_callback = NULL) {\r
- $parameters = array();\r
- if (!empty($oauth_callback)) {\r
- $parameters['oauth_callback'] = $oauth_callback;\r
- } \r
- $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);\r
- $token = OAuthUtil::parse_parameters($request);\r
- $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);\r
- return $token;\r
- }\r
-\r
- /**\r
- * Get the authorize URL\r
- *\r
- * @returns a string\r
- */\r
- function getAuthorizeURL($token) {\r
- if (is_array($token)) {\r
- $token = $token['oauth_token'];\r
- }\r
- return $this->authorizeURL() . "?oauth_token={$token}";\r
- }\r
-\r
- /**\r
- * Exchange the request token and secret for an access token and\r
- * secret, to sign API calls.\r
- *\r
- * @returns array("oauth_token" => the access token,\r
- * "oauth_token_secret" => the access secret)\r
- */\r
- function getAccessToken($oauth_verifier = FALSE) {\r
- $parameters = array();\r
- if (!empty($oauth_verifier)) {\r
- $parameters['oauth_verifier'] = $oauth_verifier;\r
- }\r
- $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);\r
- $token = OAuthUtil::parse_parameters($request);\r
- $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);\r
- return $token;\r
- }\r
-\r
- /**\r
- * GET wrappwer for oAuthRequest.\r
- */\r
- function get($url, $parameters = array()) {\r
- $response = $this->oAuthRequest($url, 'GET', $parameters);\r
- if($response == false){\r
- return false;\r
- }\r
- if ($this->type == 'json' && $this->decode_json) {\r
- return json_decode($response);\r
- }elseif($this->type == 'xml' && function_exists('simplexml_load_string')){\r
- return simplexml_load_string($response);\r
- }\r
- return $response;\r
- }\r
-\r
- /**\r
- * POST wreapper for oAuthRequest.\r
- */\r
- function post($url, $parameters = array(), $multipart = NULL) {\r
- $response = $this->oAuthRequest($url, 'POST', $parameters, $multipart);\r
- if($response === false){\r
- return false;\r
- }\r
- if ($this->type === 'json' && $this->decode_json) {\r
- return json_decode($response);\r
- }elseif($this->type == 'xml' && function_exists('simplexml_load_string')){\r
- return simplexml_load_string($response);\r
- }\r
- return $response;\r
- }\r
-\r
- /**\r
- * DELTE wrapper for oAuthReqeust.\r
- */\r
- function delete($url, $parameters = array()) {\r
- $response = $this->oAuthRequest($url, 'DELETE', $parameters);\r
- if($response === false){\r
- return false;\r
- }\r
- if ($this->type === 'json' && $this->decode_json) {\r
- return json_decode($response);\r
- }elseif($this->type == 'xml' && function_exists('simplexml_load_string')){\r
- return simplexml_load_string($response);\r
- }\r
- return $response;\r
- }\r
-\r
- /**\r
- * Format and sign an OAuth / API request, then make an HTTP request\r
- */\r
- function oAuthRequest($url, $method, $parameters, $multipart=NULL) {\r
- if ($url[0] == '/') { //non-twitter.com api shall offer the entire url.\r
- $url = "{$this->host}{$url}.{$this->type}";\r
- }\r
- $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);\r
- $request->sign_request($this->sha1_method, $this->consumer, $this->token);\r
- $request->set_http_header($multipart);\r
- \r
- $ci = curl_init();\r
- /* Curl settings */\r
- curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);\r
- curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);\r
- curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);\r
- curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);\r
-\r
- switch ($method) {\r
- case 'GET':\r
- curl_setopt($ci, CURLOPT_URL, $request->to_url());\r
- curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));\r
- break;\r
- case 'POST':\r
- $postfields = $multipart ? $multipart : $request->to_postdata();\r
- curl_setopt($ci, CURLOPT_URL, $request->get_normalized_http_url());\r
- curl_setopt($ci, CURLOPT_HTTPHEADER, $request->http_header);\r
- curl_setopt($ci, CURLOPT_POST, TRUE);\r
- if (!empty($postfields)) {\r
- curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);\r
- }\r
- break;\r
- case 'DELETE':\r
- $postfields = $request->to_postdata($multipart);\r
- $url = $request->get_normalized_http_url();\r
- curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');\r
- curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));\r
- if (!empty($postfields)) {\r
- $url = "{$url}?{$postfields}";\r
- curl_setopt($ci, CURLOPT_URL, $url);\r
- }\r
- }\r
-\r
- $response = curl_exec($ci);\r
- $this->http_header = $request->http_header;\r
- $this->curl_info = curl_getinfo($ci);\r
- $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);\r
- $this->last_api_call = curl_getinfo($ci, CURLINFO_EFFECTIVE_URL);\r
- \r
- curl_close ($ci);\r
- \r
- return $response;\r
- }\r
- \r
-\r
- /* ---------- API METHODS ---------- */\r
- /* */\r
- /* ---------- Block ---------- */\r
- function blockingIDs(){\r
- $url = '/blocks/blocking/ids';\r
- return $this->get($url);\r
- }\r
-\r
- function blockingList($id, $cursor=-1, $skip_status = 1){\r
- $url = '/blocks/list';\r
- $args = array();\r
- if($id)\r
- $args['user_id'] = $id;\r
- if($cursor)\r
- $args['cursor'] = $cursor;\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function blockUser($id){\r
- $url = "/blocks/create/$id";\r
- return $this->post($url);\r
- }\r
-\r
- function isBlocked($id){\r
- $url = "/blocks/exists/$id";\r
- return $this->get($url);\r
- }\r
-\r
- function unblockUser($id){\r
- $url = "/blocks/destroy/$id";\r
- return $this->delete($url);\r
- }\r
-\r
- /* ---------- Messages ---------- */\r
- function deleteDirectMessage($id){\r
- $url = "/direct_messages/destroy/$id";\r
- return $this->delete($url);\r
- }\r
-\r
- function directMessages($page = false, $since_id = false, $count = null, $include_entities = true){\r
- $url = '/direct_messages';\r
- $args = array();\r
- if( $since_id )\r
- $args['since_id'] = $since_id;\r
- if( $page )\r
- $args['page'] = $page;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function sendDirectMessage($user, $text){\r
- $url = '/direct_messages/new';\r
- $args = array();\r
- $args['user'] = $user;\r
- if($text)\r
- $args['text'] = $text;\r
- return $this->post($url, $args);\r
- }\r
-\r
- function sentDirectMessage($page = false, $since = false, $since_id = false){\r
- $url = '/direct_messages/sent';\r
- $args = array();\r
- if($since)\r
- $args['since'] = $since;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($page)\r
- $args['page'] = $page;\r
- return $this->get($url, $args);\r
- }\r
-\r
- /* ---------- List ---------- */\r
- function addListMember($listid, $memberid){\r
- $url = "/lists/members/create_all";\r
- $args = array();\r
- if($listid) \r
- $args['slug'] = $listid;\r
- if($memberid)\r
- $args['user_id'] = $memberid;\r
- \r
- return $this->post($url, $args);\r
- }\r
-\r
- function beAddedLists($owner_screen_name = '', $cursor = false){\r
- $url = "/lists/memberships";\r
- $args = array();\r
- if($owner_screen_name)\r
- $args['owner_screen_name'] = $owner_screen_name;\r
- if($cursor){\r
- $args['cursor'] = $cursor;\r
- }\r
- return $this->get($url, $args);\r
- }\r
-\r
- function createList($name, $description, $isPortect){\r
- $url = "/lists/create";\r
- $args = array();\r
- if($name)\r
- $args['name'] = $name;\r
- if($description)\r
- $args['description'] = $description;\r
- if($isProtect)\r
- $args['mode'] = 'private';\r
- \r
- return $this->post($url, $args);\r
- }\r
-\r
- function createdLists($username = '', $cursor = false){\r
- $url = "/lists/ownerships";\r
- $args = array();\r
- if($cursor)\r
- $args['cursor'] = $cursor;\r
- \r
- return $this->get($url, $args);\r
- }\r
-\r
- function deleteList($id){\r
- $url = "/lists/destroy";\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- return $this->post($url, $args);\r
- }\r
-\r
- function deleteListMember($id, $memberid){\r
- $arr = explode("/", $id);\r
- $url = "/lists/members/destroy_all";\r
- $args = array();\r
- $args['slug'] = $arr[1];\r
- if($memberid)\r
- $args['id'] = $memberid;\r
- \r
- return $this->post($url, $args);\r
- }\r
-\r
- function editList($prename, $name, $description, $isProtect){\r
- $url = "/lists/update";\r
- $args = array();\r
- if($prename)\r
- $args['slug'] = $prename;\r
- if($name)\r
- $args['name'] = $name;\r
- if($description)\r
- $args['description'] = $description;\r
- if($isProtect)\r
- $args['mode'] = "private";\r
- return $this->post($url, $args);\r
- }\r
-\r
- function followedLists($username = '', $cursor = false){\r
- $url = "/lists/subscriptions";\r
- $args = array();\r
- if($username) \r
- $args['user_id'] = $username;\r
- if($cursor)\r
- $args['cursor'] = $cursor;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function followList($id){\r
- $url = "/lists/subscribers/create";\r
- $arr = explode("/", $id);\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- return $this->post($url, $args);\r
- }\r
-\r
- function isFollowedList($id){\r
- $url = "/lists/subscribers/show";\r
- $arr = explode('/', $id);\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- $args['user_id'] = $this->username;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function listFollowers($id, $cursor = false, $skip_status = 1){\r
- $url = "/lists/subscribers";\r
- $arr = explode('/', $id);\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- if($cursor){\r
- $args['cursor'] = $cursor;\r
- }\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function listInfo($id){\r
- $arr = explode('/', $id);\r
- $url = "/lists/show";\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- return $this->get($url, $args);\r
- }\r
-\r
- function listMembers($id, $cursor = false, $skip_status = 1){\r
- $arr = explode("/", $id);\r
- $url = "/lists/members";\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- if($cursor){\r
- $args['cursor'] = $cursor;\r
- }\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
-\r
- }\r
-\r
- function listStatus($id, $page = false, $since_id = false,$include_rts = true, $include_entities = true){\r
- $arr = explode('/', $id);\r
- $url = '/lists/statuses';\r
- $args = array();\r
- $args['slug'] = $arr[1];\r
- $args['owner_screen_name'] = $arr[0];\r
- if($page){\r
- $args['page'] = $page;\r
- }\r
- if($since_id){\r
- $args['since_id'] = $since_id;\r
- }\r
- if($include_rts)\r
- $args['include_rts'] = $include_rts;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function unfollowList($id){\r
- $arr = explode("/", $id);\r
- $url = "/lists/subscribers/destroy";\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- return $this->post($url, $args);\r
- }\r
-\r
- /* ---------- Friendship ---------- */\r
- function destroyUser($id){\r
- $url = "/friendships/destroy/$id";\r
- return $this->delete($url);\r
- }\r
-\r
- function followers($id = false, $page = false, $skip_status = true){\r
- $url = 'followers/list';\r
- if( $id )\r
- $args['user_id'] = $id;\r
- $args['cursor'] = $page ? $page : -1;\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function followUser($id, $notifications = false){\r
- $url = "/friendships/create/$id";\r
- $args = array();\r
- if($notifications)\r
- $args['follow'] = true;\r
- return $this->post($url, $args);\r
- }\r
-\r
- function friends($id = false, $page = false, $skip_status = true){\r
- $url = '/friends/list';\r
- $args = array();\r
- if( $id )\r
- $args['user_id'] = $id;\r
- $args['cursor'] = $page ? $page : -1;\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function isFriend($user_a, $user_b){\r
- $url = '/friendships/exists';\r
- $args = array();\r
- $args['user_a'] = $user_a;\r
- $args['user_b'] = $user_b;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function friendship($source_screen_name,$target_screen_name){\r
- $url = '/friendships/show';\r
- $args = array();\r
- $args['source_screen_name'] = $source_screen_name;\r
- $args['target_screen_name'] = $target_screen_name;\r
- return $this->get($url, $args);\r
- }\r
- \r
- function relationship($target, $source = false){\r
- $url = '/friendships/show';\r
- $args = array();\r
- $args['target_screen_name'] = $target;\r
- if($source){\r
- $args['source_screen_name'] = $source;\r
- }\r
- return $this->get($url, $args);\r
- }\r
-\r
- function showUser($id = false, $email = false, $user_id = false, $screen_name = false,$include_entities = true){\r
- $url = '/users/show';\r
- $args = array();\r
- if($id)\r
- $args['id'] = $id;\r
- elseif($screen_name)\r
- $args['id'] = $screen_name;\r
- else\r
- $args['id'] = $this->user_id;\r
-\r
- return $this->get($url, $args);\r
- }\r
-\r
- /* ---------- Ratelimit ---------- */\r
- function ratelimit(){\r
- $url = '/account/rate_limit_status';\r
- return $this->get($url,array(),false);\r
- }\r
-\r
- /* ---------- Retweet ---------- */\r
- function getRetweeters($id, $count = false){\r
- $url = "/statuses/retweets/$id";\r
- if($count != false) {\r
- $url .= "?count=$count";\r
- }\r
- return $this->get($url);\r
- }\r
-\r
- function retweet($id){\r
- $url = "/statuses/retweet/$id";\r
- return $this->post($url);\r
- }\r
-\r
- function retweets($id, $count = 20,$include_entities = true){\r
- if($count > 100){\r
- $count = 100;\r
- }\r
- $url = "/statuses/retweets/$id";\r
- $args = array();\r
- $args['count'] = unt;\r
- if($include_ities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url,$args);\r
- }\r
-\r
- function retweets_of_me($page = false, $count = false, $since_id = false, $max_id = false,$include_entities = true){\r
- $url = '/statuses/retweets_of_me';\r
- $args = array();\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($max_id)\r
- $args['max_id'] = $max_id;\r
- if($count)\r
- $args['count'] = $count;\r
- if($page)\r
- $args['page'] = $page;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- /* ---------- Search ---------- */\r
- function search($q = false, $max_id = false, $include_entities = true){\r
- $url = "/search/tweets";\r
- if(!$q) {\r
- return false;\r
- } else {\r
- $args = array();\r
- $args['q'] = $q;\r
- }\r
- if($max_id)\r
- $args['max_id'] = $max_id;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- /* ---------- Spam ---------- */\r
- function reportSpam($screen_name){\r
- $url = '/report_spam';\r
- $args = array();\r
- $args['screen_name'] = $screen_name;\r
- return $this->post($url, $args);\r
- }\r
-\r
- /* ---------- Timeline ---------- */\r
- function deleteStatus($id){\r
- $url = "/statuses/destroy/$id";\r
- return $this->delete($url);\r
- }\r
-\r
- function homeTimeline($page = false, $since_id = false, $count = false, $include_entities = true) {\r
- $url = '/statuses/home_timeline';\r
- $args = array();\r
- if($page)\r
- $args['page'] = $page;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($count)\r
- $args['count'] = $count;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
- \r
- function friendsTimeline($page = false, $since_id = false, $count = false,$include_entities = true){\r
- $url = '/statuses/friends_timeline';\r
- $args = array();\r
- if($page)\r
- $args['page'] = $page;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($count)\r
- $args['count'] = $count;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function getFavorites($page = false,$userid=false,$include_entities = true){\r
- $url = '/favorites/list';\r
- $args = array();\r
- if($userid)\r
- $args['user_id'] = $userid;\r
- if($page)\r
- $args['page'] = $page;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function makeFavorite($id){\r
- $url = "/favorites/create/$id";\r
- return $this->post($url);\r
- }\r
-\r
- function publicTimeline($sinceid = false,$include_entities = true){\r
- $url = '/statuses/public_timeline';\r
- $args = array();\r
- if($sinceid){\r
- $args['since_id'] = $sinceid;\r
- }\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function removeFavorite($id){\r
- $url = "/favorites/destroy/$id";\r
- return $this->post($url);\r
- }\r
-\r
- function replies($page = false, $since_id = false,$include_entities = true){\r
- $url = '/statuses/mentions_timeline';\r
- $args = array();\r
- if($page)\r
- $args['page'] = (int) $page;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function showStatus($id,$include_entities = true){\r
- $url = "/statuses/show/";\r
- $args = array();\r
- if($id)\r
- $args['id'] = $id;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url,$args);\r
- }\r
-\r
- function update($status, $replying_to = false,$include_entities = true){\r
- try{\r
- $url = '/statuses/update';\r
- $args = array();\r
- $args['status'] = $status;\r
- if($replying_to)\r
- $args['in_reply_to_status_id'] = $replying_to;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->post($url, $args);\r
- }catch(Exception $ex){\r
- echo $ex->getLine." : ".$ex->getMessage();\r
- }\r
- }\r
-\r
- function userTimeline($page = false, $id = false, $count = false, $since_id = false, $include_rts = true, $include_entities = true){\r
- $url = '/statuses/user_timeline';\r
- $args = array();\r
- if($page)\r
- $args['page'] = $page;\r
- if($id)\r
- $args['id'] = $id;\r
- if($count)\r
- $args['count'] = $count;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($include_rts)\r
- $args['include_rts'] = $include_rts;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- $response = $this->get($url, $args);\r
- return $response;\r
- }\r
-\r
- function trends_closest($lat = false, $long=false) {\r
- $url = "/trends/closest";\r
- $args = array();\r
- if ($lat)\r
- $args['lat'] = $lat;\r
- if ($long)\r
- $args['long'] = $long;\r
- return $this->get($url, $args);\r
- }\r
- \r
- function trends_place($id = 1) {\r
- $url = "/trends/place";\r
- $args = array();\r
- if ($id)\r
- $args['id'] = $id;\r
- return $this->get($url, $args);\r
- }\r
- /* ---------- Misc. ---------- */\r
- function twitterAvailable(){\r
- $url = "/help/test";\r
- if($this->get($url) == 'ok'){\r
- return true;\r
- }\r
- return false;\r
- }\r
-\r
- function veverify($skip_status = false){\r
- $url = '/account/verify_credentials';\r
- $args = array('skip_status' => $skip_status);\r
- return $this->get($url,$args);\r
- }\r
- \r
- function updateProfile($fields = array(), $skip_status = true){\r
- $url = '/account/update_profile';\r
- $args = array();\r
- foreach( $fields as $pk => $pv ){\r
- switch( $pk ){\r
- case 'name' :\r
- $args[$pk] = (string) substr( $pv, 0, 20 );\r
- break;\r
- case 'url' :\r
- $args[$pk] = (string) substr( $pv, 0, 100 );\r
- break;\r
- case 'location' :\r
- $args[$pk] = (string) substr( $pv, 0, 30 );\r
- break;\r
- case 'description' :\r
- $args[$pk] = (string) substr( $pv, 0, 160 );\r
- break;\r
- default :\r
- break;\r
- }\r
- $args['skip_status'] = $skip_status;\r
- }\r
- return $this->post($url, $args);\r
- }\r
- \r
- /* media */\r
- function updateProfileImage($image, $skip_status=true) {\r
- $url = '/account/update_profile_image';\r
- $mul = array();\r
- if($image){\r
- $mul['image']=$image;\r
- }\r
- if($skip_status) {\r
- $args['skip_status']=$skip_status;\r
- }\r
- return $this->post($url, $args, $mul);\r
- }\r
- \r
- function updateProfileBackground($image, $skip_status=true) {\r
- $url = '/account/update_profile_background_image';\r
- $mul = array();\r
- if($image){\r
- $mul['image']=$image;\r
- $mul['skip_status']=$skip_status;\r
- }\r
- return $this->post($url, NULL, $mul);\r
- }\r
- \r
- function updateMedia($status,$image,$replying_to = false) {\r
- $url = 'https://upload.twitter.com/1/statuses/update_with_media'.$this->type;\r
- $args = array();\r
- if($status) $args['status'] = $status;\r
- if($replying_to) $args['in_reply_to_status_id'] = $replying_to;\r
- $mul = array();\r
- if($image) $mul['media'][] = $image;\r
- return $this->post($url,$args,$mul);\r
- }\r
-}\r
-\r
+<?php
+/*
+ * Abraham Williams (abraham@abrah.am) http://abrah.am
+ *
+ * Basic lib to work with Twitter's OAuth beta. This is untested and should not
+ * be used in production code. Twitter's beta could change at anytime.
+ *
+ * Code based on:
+ * Fire Eagle code - http://github.com/myelin/fireeagle-php-lib
+ * twitterlibphp - http://github.com/jdp/twitterlibphp
+ */
+
+//require_once('config.php');
+//require_once('oauth_lib.php');
+
+/**
+ * Twitter OAuth class
+ */
+class TwitterOAuth {
+ /* Contains the last HTTP status code returned */
+ public $http_code;
+ /* Contains the last API call */
+ public $last_api_call;
+ /* Set up the API root URL */
+ public $host = API_URL;
+ /* Set timeout default */
+ public $timeout = 5;
+ /* Set connect timeout */
+ public $connecttimeout = 30;
+ /* Verify SSL Cert */
+ public $ssl_verifypeer = FALSE;
+
+ public $source = 'embr';
+
+ // user info
+ public $username;
+ public $screen_name;
+ public $user_id;
+
+ //for debug use
+ public $curl_info;
+ public $http_header;
+
+ /**
+ * Set API URLS
+ */
+ function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; }
+ function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }
+ function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; }
+ function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }
+
+ /**
+ * Debug helpers
+ */
+ function lastStatusCode() { return $this->http_status; }
+ function lastAPICall() { return $this->last_api_call; }
+
+ /**
+ * construct TwitterOAuth object
+ */
+ function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
+ $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
+ $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
+ if (!empty($oauth_token) && !empty($oauth_token_secret)) {
+ $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
+ $this->screen_name = $_SESSION['access_token']['screen_name'];
+ $this->username = $_SESSION['access_token']['screen_name'];
+ $this->user_id = $_SESSION['access_token']['user_id'];
+ } else {
+ $this->token = NULL;
+ }
+ }
+
+
+ /**
+ * Get a request_token from Twitter
+ *
+ * @returns a key/value array containing oauth_token and oauth_token_secret
+ */
+ function getRequestToken($oauth_callback = NULL) {
+ $parameters = array();
+ if (!empty($oauth_callback)) {
+ $parameters['oauth_callback'] = $oauth_callback;
+ }
+ $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
+ $token = OAuthUtil::parse_parameters($request);
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
+ return $token;
+ }
+
+ /**
+ * Get the authorize URL
+ *
+ * @returns a string
+ */
+ function getAuthorizeURL($token) {
+ if (is_array($token)) {
+ $token = $token['oauth_token'];
+ }
+ return $this->authorizeURL() . "?oauth_token={$token}";
+ }
+
+ /**
+ * Exchange the request token and secret for an access token and
+ * secret, to sign API calls.
+ *
+ * @returns array("oauth_token" => the access token,
+ * "oauth_token_secret" => the access secret)
+ */
+ function getAccessToken($oauth_verifier = FALSE) {
+ $parameters = array();
+ if (!empty($oauth_verifier)) {
+ $parameters['oauth_verifier'] = $oauth_verifier;
+ }
+ $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
+ $token = OAuthUtil::parse_parameters($request);
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
+ return $token;
+ }
+
+ /**
+ * GET wrappwer for oAuthRequest.
+ */
+ function get($url, $parameters = array()) {
+ $response = $this->oAuthRequest($url, 'GET', $parameters);
+ if($response == false){
+ return false;
+ }
+ return json_decode($response);
+ }
+
+ /**
+ * POST wreapper for oAuthRequest.
+ */
+ function post($url, $parameters = array(), $multipart = NULL) {
+ $response = $this->oAuthRequest($url, 'POST', $parameters, $multipart);
+ if($response === false){
+ return false;
+ }
+ return json_decode($response);
+ }
+
+ /**
+ * Format and sign an OAuth / API request, then make an HTTP request
+ */
+ function oAuthRequest($url, $method, $parameters, $multipart=NULL) {
+ if ($url[0] == '/') { //non-twitter.com api shall offer the entire url.
+ $url = "{$this->host}{$url}.json";
+ }
+ $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
+ $request->sign_request($this->sha1_method, $this->consumer, $this->token);
+ $request->set_http_header($multipart);
+
+ $ci = curl_init();
+ /* Curl settings */
+ curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
+ curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
+ curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
+ curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
+
+ switch ($method) {
+ case 'GET':
+ curl_setopt($ci, CURLOPT_URL, $request->to_url());
+ curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
+ break;
+ case 'POST':
+ $postfields = $multipart ? $multipart : $request->to_postdata();
+ curl_setopt($ci, CURLOPT_URL, $request->get_normalized_http_url());
+ curl_setopt($ci, CURLOPT_HTTPHEADER, $request->http_header);
+ curl_setopt($ci, CURLOPT_POST, TRUE);
+ if (!empty($postfields)) {
+ curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
+ }
+ }
+
+ $response = curl_exec($ci);
+ $this->http_header = $request->http_header;
+ $this->curl_info = curl_getinfo($ci);
+ $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
+ $this->last_api_call = curl_getinfo($ci, CURLINFO_EFFECTIVE_URL);
+
+ curl_close ($ci);
+
+ return $response;
+ }
+
+
+ /* ---------- API METHODS ---------- */
+ /* */
+ /* ---------- Block ---------- */
+ function blockingList($id, $cursor=-1, $skip_status = true){
+ $url = '/blocks/list';
+ $args = array();
+ if($id)
+ $args['screen_name'] = $id;
+ if($cursor)
+ $args['cursor'] = $cursor;
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+ }
+
+ function blockUser($id){
+ $url = "/blocks/create";
+ $args = array();
+ $args['screen_name'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function unblockUser($id){
+ $url = "/blocks/destroy";
+ $args = array();
+ $args['screen_name'] = $id;
+ return $this->post($url, $args);
+ }
+
+ /* ---------- Messages ---------- */
+ function deleteDirectMessage($id){
+ $url = "/direct_messages/destroy";
+ $args = array();
+ $args['id'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function directMessages($since_id = false, $max_id = false, $count = false, $include_entities = true){
+ $url = '/direct_messages';
+ $args = array();
+ if( $since_id )
+ $args['since_id'] = $since_id;
+ if( $max_id )
+ $args['max_id'] = $max_id;
+ if( $count )
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function sentDirectMessages($since_id = false, $max_id = false, $count = false, $include_entities = true){
+ $url = '/direct_messages/sent';
+ $args = array();
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if( $max_id )
+ $args['max_id'] = $max_id;
+ if( $count )
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ /* ---------- List ---------- */
+ function addListMember($listid, $id, $memberid){
+ $url = "/lists/members/create_all";
+ $args = array();
+ if($listid)
+ $args['slug'] = $listid;
+ if($id)
+ $args['owner_screen_name'] = $id;
+ if($memberid){
+ $args['screen_name'] = $memberid;
+ }
+ return $this->post($url, $args);
+ }
+
+ function beAddedLists($username = '', $cursor = false){
+ $url = "/lists/memberships";
+ $args = array();
+ if($username)
+ $args['screen_name'] = $username;
+ if($cursor){
+ $args['cursor'] = $cursor;
+ }
+ return $this->get($url, $args);
+ }
+
+ function createList($name, $description, $isPortect){
+ $url = "/lists/create";
+ $args = array();
+ if($name)
+ $args['name'] = $name;
+ if($description)
+ $args['description'] = $description;
+ if($isProtect)
+ $args['mode'] = 'private';
+
+ return $this->post($url, $args);
+ }
+
+ function myLists($username = false, $user_id = false, $count = false){
+ $url = "/lists/ownerships";
+ $args = array();
+ if($username){
+ $args['screen_name'] = $username;
+ } else {
+ $args['screen_name'] = $this->username;
+ }
+
+ return $this->get($url, $args);
+ }
+
+ function deleteList($slug){
+ $url = "/lists/destroy";
+ $args = array();
+ $args['slug'] = $slug;
+ $args['owner_screen_name'] = $this->username;
+ return $this->post($url, $args);
+ }
+
+ function deleteListMember($slug, $owner, $memberid){
+ $url = "/lists/members/destroy_all";
+ $args = array();
+ $args['slug'] = $slug;
+ $args['owner_screen_name'] = $owner;
+ $args['user_id'] = $memberid;
+
+ return $this->post($url, $args);
+ }
+
+ function editList($prename, $name, $description, $isProtect){
+ $url = "/lists/update";
+ $args = array();
+ if($prename)
+ $args['slug'] = $prename;
+ if($name)
+ $args['name'] = $name;
+ if($description)
+ $args['description'] = $description;
+ if($isProtect)
+ $args['mode'] = "private";
+ return $this->post($url, $args);
+ }
+
+ function followedLists($username = '', $cursor = false){
+ $url = "/lists/subscriptions";
+ $args = array();
+ if($username)
+ $args['screen_name'] = $username;
+ if($cursor)
+ $args['cursor'] = $cursor;
+ return $this->get($url, $args);
+ }
+
+ function followList($id){
+ $url = "/lists/subscribers/create";
+ $arr = explode("/", $id);
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ return $this->post($url, $args);
+ }
+
+ function isFollowedList($id){
+ $url = "/lists/subscribers/show";
+ $arr = explode('/', $id);
+ $args = array();
+ $args['owner_screen_name'] = $arr[0];
+ $args['slug'] = $arr[1];
+ $args['screen_name'] = $this->username;
+ return isset($this->get($url, $args)->screen_name);
+ }
+
+ function listFollowers($id, $cursor = false, $skip_status = true){
+ $url = "/lists/subscribers";
+ $arr = explode('/', $id);
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ if($cursor){
+ $args['cursor'] = $cursor;
+ }
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+ }
+
+ function listInfo($id){
+ $arr = explode('/', $id);
+ $url = "/lists/show";
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ return $this->get($url, $args);
+ }
+
+ function listMembers($id, $cursor = false, $skip_status = true){
+ $url = "/lists/members";
+ $arr = explode("/", $id);
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ if($cursor){
+ $args['cursor'] = $cursor;
+ }
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+
+ }
+
+ function listStatus($id, $since_id = false, $max_id = false, $include_rts = true, $include_entities = true){
+ $arr = explode('/', $id);
+ $url = "/lists/statuses";
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($include_rts)
+ $args['include_rts'] = $include_rts;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function unfollowList($id){
+ $url = "/lists/subscribers/destroy";
+ $arr = explode("/", $id);
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ return $this->post($url, $args);
+ }
+
+ /* ---------- Friendship ---------- */
+ function destroyUser($id){
+ $url = "/friendships/destroy";
+ $args = array();
+ $args['screen_name'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function followers($id = false, $cursor = -1, $skip_status = true){ // GET statuses/friends is removed, try GET followers/list instead
+ $url = '/followers/list';
+ $args = array();
+ if( $id )
+ $args['screen_name'] = $id;
+ if($cursor)
+ $args['cursor'] = $cursor;
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+ }
+
+ function followUser($id, $notifications = false){
+ $url = "/friendships/create";
+ $args = array();
+ $args['screen_name'] = $id;
+ if($notifications)
+ $args['follow'] = true;
+ return $this->post($url, $args);
+ }
+
+ function friends($id = false, $cursor = -1, $skip_status = true){ // GET statuses/friends is removed, try GET friends/list instead
+ $url = '/friends/list';
+ $args = array();
+ if( $id )
+ $args['screen_name'] = $id;
+ if($cursor)
+ $args['cursor'] = $cursor;
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+ }
+
+ function relationship($target_screen_name, $source_screen_name = false){
+ $url = '/friendships/show';
+ $args = array();
+ $args['target_screen_name'] = $target_screen_name;
+ $args['source_screen_name'] = $source_screen_name ? $source_screen_name : $this->username;
+ return $this->get($url, $args);
+ }
+
+ function showUser($screen_name = false, $user_id = false, $include_entities = true){
+ $url = '/users/show';
+ $args = array();
+ if($screen_name)
+ $args['screen_name'] = $screen_name;
+ else
+ $args['user_id'] = $user_id ? $user_id : $this->user_id;
+ return $this->get($url, $args);
+ }
+
+ /* ---------- Ratelimit ---------- */
+ /* this API changed a lot due to the
+ * update of twitter's limit policy,
+ * get only status limits here by
+ * default */
+ function ratelimit($resources = "statuses"){
+ $url = '/application/rate_limit_status';
+ $args = array();
+ $args['resources'] = $resources;
+ return $this->get($url, $args);
+ }
+
+ /* ---------- Retweet ---------- */
+ function retweet($id){
+ $url = "/statuses/retweet/$id";
+ return $this->post($url);
+ }
+
+ function retweets($id, $count = 20){
+ if($count > 100){
+ $count = 100;
+ }
+ $url = "/statuses/retweets/$id";
+ $args = array();
+ $args['count'] = $count;
+ return $this->get($url,$args);
+ }
+
+ function retweets_of_me($count = false, $since_id = false, $max_id = false, $include_entities = true){
+ $url = '/statuses/retweets_of_me';
+ $args = array();
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($count)
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ /* ---------- Search ---------- */
+ function savedSearches(){
+ $url = '/saved_searches/list';
+ return $this->get($url);
+ }
+
+ function deleteSavedSearch($ssid){
+ $url = "/saved_searches/destroy/{$ssid}";
+ return $this->post($url);
+ }
+
+ function saveSearch($query){
+ $url = "/saved_searches/create";
+ $args = array();
+ $args['query'] = $query;
+ return $this->post($url, $args);
+ }
+
+ function search($q = false, $since_id = false, $max_id = false, $include_entities = true){
+ $url = '/search/tweets';
+ if(!$q) {
+ return false;
+ } else {
+ $args = array();
+ $args['q'] = $q;
+ }
+ if($since_id){
+ $args['since_id'] = $since_id;
+ }
+ if($max_id){
+ $args['max_id'] = $max_id;
+ }
+ if($include_entities){
+ $args['include_entities'] = $include_entities;
+ }
+ return $this->get($url, $args);
+ }
+
+ /* ---------- Spam ---------- */
+ function reportSpam($screen_name){
+ $url = '/users/report_spam';
+ $args = array();
+ $args['screen_name'] = $screen_name;
+ return $this->post($url, $args);
+ }
+
+ /* ---------- Timeline ---------- */
+ function deleteStatus($id){
+ $url = "/statuses/destroy/$id";
+ return $this->post($url);
+ }
+
+ function homeTimeline($since_id = false, $max_id = false, $count = false, $include_entities = true) {
+ $url = '/statuses/home_timeline';
+ $args = array();
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($count)
+ $args['count'] = $count;
+ else
+ $args['count'] = 30;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function getFavorites($userid = false, $sinceid = false, $maxid = false, $count = false, $include_entities = true){
+ $url = '/favorites/list';
+ $args = array();
+ if($userid)
+ $args['screen_name'] = $userid;
+ if($sinceid)
+ $args['since_id'] = $sinceid;
+ if($maxid)
+ $args['max_id'] = $maxid;
+ if($count)
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function makeFavorite($id){
+ $url = "/favorites/create";
+ $args = array();
+ if($id)
+ $args['id'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function removeFavorite($id){
+ $url = "/favorites/destroy";
+ $args = array();
+ if($id)
+ $args['id'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function replies($since_id = false, $max_id = false, $count = false, $include_entities = true){
+ $url = '/statuses/mentions_timeline';
+ $args = array();
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($count)
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function showStatus($id,$include_entities = true){
+ $url = "/statuses/show";
+ $args = array();
+ if($id)
+ $args['id'] = $id;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url,$args);
+ }
+
+ function update($status, $replying_to = false,$include_entities = true){
+ try{
+ $url = '/statuses/update';
+ $args = array();
+ $args['status'] = $status;
+ if($replying_to)
+ $args['in_reply_to_status_id'] = $replying_to;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->post($url, $args);
+ }catch(Exception $ex){
+ echo $ex->getLine." : ".$ex->getMessage();
+ }
+ }
+
+ function userTimeline($id = false, $since_id = false, $max_id = false, $count = false, $include_rts = true, $include_entities = true){
+ $url = '/statuses/user_timeline';
+ $args = array();
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($id)
+ $args['screen_name'] = $id;
+ if($count)
+ $args['count'] = $count;
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($include_rts)
+ $args['include_rts'] = $include_rts;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ $response = $this->get($url, $args);
+ return $response;
+ }
+
+ function trends_closest($lat = false, $long=false) {
+ $url = "/trends/closest";
+ $args = array();
+ if ($lat)
+ $args['lat'] = $lat;
+ if ($long)
+ $args['long'] = $long;
+ return $this->get($url, $args);
+ }
+
+ function trends_place($id = 1) {
+ $url = "/trends/place";
+ $args = array();
+ if ($id)
+ $args['id'] = $id;
+ return $this->get($url, $args);
+ }
+ /* ---------- Misc. ---------- */
+ function veverify($skip_status = false){
+ $url = '/account/verify_credentials';
+ $args = array('skip_status' => $skip_status);
+ return $this->get($url,$args);
+ }
+
+ function updateProfile($fields = array(), $skip_status = true){
+ $url = '/account/update_profile';
+ $args = array();
+ foreach( $fields as $pk => $pv ){
+ switch( $pk ){
+ case 'name' :
+ $args[$pk] = (string) substr( $pv, 0, 20 );
+ break;
+ case 'url' :
+ $args[$pk] = (string) substr( $pv, 0, 100 );
+ break;
+ case 'location' :
+ $args[$pk] = (string) substr( $pv, 0, 30 );
+ break;
+ case 'description' :
+ $args[$pk] = (string) substr( $pv, 0, 160 );
+ break;
+ default :
+ break;
+ }
+ $args['skip_status'] = $skip_status;
+ }
+ return $this->post($url, $args);
+ }
+
+ /* media */
+ function updateProfileImage($image, $skip_status = true) {
+ $url = '/account/update_profile_image';
+ $args = array();
+ if($image){
+ $args['image']=$image;
+ $args['skip_status']=$skip_status;
+ }
+ return $this->post($url, $args);
+ }
+
+ function updateProfileBackground($image, $tile = false, $skip_status = true) {
+ $url = '/account/update_profile_background_image';
+ $args = array();
+ if($image){
+ $args['image']=$image;
+ }
+ if($tile){
+ $args['tile']=($tile === 'true');
+ }
+ $args['skip_status']=$skip_status;
+ return $this->post($url, $args);
+ }
+
+ function updateMedia($status,$image,$replying_to = false) {
+ $url = 'statuses/update_with_media';
+ $args = array();
+ if($status) $args['status'] = $status;
+ if($replying_to) $args['in_reply_to_status_id'] = $replying_to;
+ $mul = array();
+ if($image) $mul['media'][] = $image;
+ return $this->post($url,$args,$mul);
+ }
+}
+
-<?php\r
- function setEncryptCookie($key, $value, $time = 0, $path = '/') {\r
- if (trim(SECURE_KEY) == '') {\r
- setcookie($key, $value, $time, $path);\r
- } else {\r
- setcookie($key, encrypt($value), $time, $path);\r
- }\r
- }\r
-\r
- function getEncryptCookie($key) {\r
- if ( isset($_COOKIE[$key]) ) {\r
- if (trim(SECURE_KEY) == '') {\r
- return $_COOKIE[$key];\r
- } else {\r
- return decrypt($_COOKIE[$key]);\r
- }\r
- } else { \r
- return null;\r
- }\r
- }\r
-\r
- function getCookie($key) {\r
- if ( isset($_COOKIE[$key]) ) \r
- return $_COOKIE[$key];\r
- else \r
- return null;\r
- }\r
-\r
- function delCookie($key) {\r
- setcookie($key, '', $_SERVER['REQUEST_TIME']-300, '/');\r
- }\r
-\r
- function encrypt($plain_text) {\r
- if ( !function_exists('mcrypt_module_open') ) {\r
- return EDencrypt($plain_text, SECURE_KEY);\r
- }\r
- $td = mcrypt_module_open('blowfish', '', 'cfb', '');\r
- $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);\r
- mcrypt_generic_init($td, SECURE_KEY, $iv);\r
- $crypt_text = mcrypt_generic($td, $plain_text);\r
- mcrypt_generic_deinit($td);\r
- return base64_encode($iv.$crypt_text);\r
- }\r
-\r
- function decrypt($crypt_text) {\r
- if ( !function_exists('mcrypt_module_open') ) {\r
- return EDdecrypt($plain_text, SECURE_KEY);\r
- }\r
- $crypt_text = base64_decode($crypt_text);\r
- $td = mcrypt_module_open('blowfish', '', 'cfb', '');\r
- $ivsize = mcrypt_enc_get_iv_size($td);\r
- $iv = substr($crypt_text, 0, $ivsize);\r
- $crypt_text = substr($crypt_text, $ivsize);\r
- mcrypt_generic_init($td, SECURE_KEY, $iv);\r
- $plain_text = mdecrypt_generic($td, $crypt_text);\r
- mcrypt_generic_deinit($td);\r
-\r
- return $plain_text;\r
- }\r
-\r
- if ( !function_exists('mb_strlen') ) {\r
- function mb_strlen($text, $encode) {\r
- if (strtolower($encode) == 'utf-8') {\r
- return preg_match_all('%(?:\r
- [\x09\x0A\x0D\x20-\x7E] # ASCII\r
- | [\xC2-\xDF][\x80-\xBF]# non-overlong 2-byte\r
- | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs\r
- | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte\r
- | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates\r
- | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3\r
- | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15\r
- | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16\r
- )%xs',$text,$out);\r
- }else{\r
- return strlen($text);\r
- }\r
- }\r
- }\r
- \r
- function keyED($txt,$encrypt_key) {\r
-\r
- $encrypt_key = md5($encrypt_key);\r
- $ctr=0;\r
- $tmp = "";\r
-\r
- for ($i=0;$i<strlen($txt);$i++) {\r
- if ($ctr==strlen($encrypt_key)) $ctr=0;\r
- $tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);\r
- $ctr++;\r
- }\r
-\r
- return $tmp;\r
- }\r
-\r
- function EDencrypt($txt,$key) {\r
-\r
- srand((double)microtime()*1000000);\r
- $encrypt_key = md5(rand(0,32000));\r
- $ctr=0;\r
- $tmp = "";\r
-\r
- for ($i=0;$i<strlen($txt);$i++) {\r
- if ($ctr==strlen($encrypt_key)) $ctr=0;\r
- $tmp.= substr($encrypt_key,$ctr,1) . (substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));\r
- $ctr++;\r
- }\r
-\r
- return keyED($tmp,$key);\r
- }\r
-\r
- function EDdecrypt($txt,$key) {\r
-\r
- $txt = keyED($txt,$key);\r
- $tmp = "";\r
-\r
- for ($i=0;$i<strlen($txt);$i++) {\r
- $md5 = substr($txt,$i,1);\r
- $i++;\r
- $tmp.= (substr($txt,$i,1) ^ $md5);\r
- }\r
-\r
- return $tmp;\r
-\r
- }\r
-?>\r
+<?php
+ function setEncryptCookie($key, $value, $time = 0, $path = '/') {
+ if (trim(SECURE_KEY) == '') {
+ setcookie($key, $value, $time, $path);
+ } else {
+ setcookie($key, encrypt($value), $time, $path);
+ }
+ }
+
+ function getEncryptCookie($key) {
+ if ( isset($_COOKIE[$key]) ) {
+ if (trim(SECURE_KEY) == '') {
+ return $_COOKIE[$key];
+ } else {
+ return decrypt($_COOKIE[$key]);
+ }
+ } else {
+ return null;
+ }
+ }
+
+ function getCookie($key) {
+ if ( isset($_COOKIE[$key]) )
+ return $_COOKIE[$key];
+ else
+ return null;
+ }
+
+ function delCookie($key) {
+ setcookie($key, '', $_SERVER['REQUEST_TIME']-300, '/');
+ }
+
+ function encrypt($plain_text) {
+ if ( !function_exists('mcrypt_module_open') ) {
+ return EDencrypt($plain_text, SECURE_KEY);
+ }
+ $td = mcrypt_module_open('blowfish', '', 'cfb', '');
+ $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
+ mcrypt_generic_init($td, SECURE_KEY, $iv);
+ $crypt_text = mcrypt_generic($td, $plain_text);
+ mcrypt_generic_deinit($td);
+ return base64_encode($iv.$crypt_text);
+ }
+
+ function decrypt($crypt_text) {
+ if ( !function_exists('mcrypt_module_open') ) {
+ return EDdecrypt($crypt_text, SECURE_KEY);
+ }
+ $crypt_text = base64_decode($crypt_text);
+ $td = mcrypt_module_open('blowfish', '', 'cfb', '');
+ $ivsize = mcrypt_enc_get_iv_size($td);
+ $iv = substr($crypt_text, 0, $ivsize);
+ $crypt_text = substr($crypt_text, $ivsize);
+ mcrypt_generic_init($td, SECURE_KEY, $iv);
+ $plain_text = mdecrypt_generic($td, $crypt_text);
+ mcrypt_generic_deinit($td);
+
+ return $plain_text;
+ }
+
+ if ( !function_exists('mb_strlen') ) {
+ function mb_strlen($text, $encode) {
+ if (strtolower($encode) == 'utf-8') {
+ return preg_match_all('%(?:
+ [\x09\x0A\x0D\x20-\x7E] # ASCII
+ | [\xC2-\xDF][\x80-\xBF]# non-overlong 2-byte
+ | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
+ | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
+ | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
+ | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
+ | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
+ | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
+ )%xs',$text,$out);
+ }else{
+ return strlen($text);
+ }
+ }
+ }
+
+ function keyED($txt,$encrypt_key) {
+
+ $encrypt_key = md5($encrypt_key);
+ $ctr=0;
+ $tmp = "";
+
+ for ($i=0;$i<strlen($txt);$i++) {
+ if ($ctr==strlen($encrypt_key)) $ctr=0;
+ $tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
+ $ctr++;
+ }
+
+ return $tmp;
+ }
+
+ function EDencrypt($txt,$key) {
+
+ srand((double)microtime()*1000000);
+ $encrypt_key = md5(rand(0,32000));
+ $ctr=0;
+ $tmp = "";
+
+ for ($i=0;$i<strlen($txt);$i++) {
+ if ($ctr==strlen($encrypt_key)) $ctr=0;
+ $tmp.= substr($encrypt_key,$ctr,1) . (substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
+ $ctr++;
+ }
+
+ return keyED($tmp,$key);
+ }
+
+ function EDdecrypt($txt,$key) {
+
+ $txt = keyED($txt,$key);
+ $tmp = "";
+
+ for ($i=0;$i<strlen($txt);$i++) {
+ $md5 = substr($txt,$i,1);
+ $i++;
+ $tmp.= (substr($txt,$i,1) ^ $md5);
+ }
+
+ return $tmp;
+
+ }
+?>
-<?php \r
- include ('lib/twitese.php');\r
- $title = "@{$_GET['id']}";\r
- include ('inc/header.php');\r
- if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/list.js"></script>\r
-\r
-<div id="statuses">\r
- <?php \r
- $p = 1;\r
- if (isset($_GET['p'])) {\r
- $p = (int) $_GET['p'];\r
- if ($p <= 0) $p = 1;\r
- }\r
- \r
- $id = isset($_GET['id'])? $_GET['id'] : false;\r
- $t = getTwitter();\r
- $statuses = $t->listStatus($id, $p);\r
- $listInfo = $t->listInfo($id);\r
- if ($statuses === false) {\r
- header('location: error.php');exit();\r
- } \r
- \r
- $isFollower = false;\r
- //$isFollower = $t->isFollowedList($id);\r
- $empty = count($statuses) == 0? true: false;\r
- if ($empty) {\r
- echo "<div id=\"empty\">No Tweet To Display</div>";\r
- } else {\r
- ?>\r
- \r
- \r
- <div id="info_head">\r
- <a href="https://twitter.com/<?php echo $userid ?>"><img id="info_headimg" src="<?php echo getAvatar($listInfo->user->profile_image_url); ?>" /></a>\r
- <div id="info_name"><?php echo $id?></div>\r
- <div id="info_relation">\r
- <?php if ($isFollower) {?>\r
- <a id="list_block_btn" class="info_btn_hover" href="#">Unfollow</a>\r
- <?php } else { ?>\r
- <a id="list_follow_btn" class="info_btn" href="#">Follow</a>\r
- <?php } ?>\r
- <a id="list_send_btn" class="info_btn" href="#">Tweet</a>\r
- <a class="info_btn" href="list_followers.php?id=<?php echo $id?>">Followers (<?php echo $listInfo->subscriber_count?>)</a>\r
- <a class="info_btn" href="list_members.php?id=<?php echo $id?>">Members (<?php echo $listInfo->member_count?>)</a>\r
- </div>\r
- </div>\r
- <div class="clear"></div>\r
- \r
- <?php \r
- \r
- $output = '<ol class="timeline" id="allTimeline">';\r
- include('lib/timeline_format.php');\r
- foreach ($statuses as $status) {\r
- if (isset($status->retweeted_status)) {\r
- $output .= format_retweet($status);\r
- } else { \r
- $output .= format_timeline($status,$t->username);\r
- }\r
- }\r
- \r
- $output .= "</ol><div id=\"pagination\">";\r
- \r
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"list.php?id=$id&p=" . ($p-1) . "\">Back</a>";\r
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"list.php?id=$id&p=" . ($p+1) . "\">Next</a>";\r
- \r
- $output .= "</div>";\r
- \r
- echo $output;\r
- }\r
-\r
- ?>\r
-</div>\r
-\r
-<?php \r
- include ('inc/sidebar.php');\r
- include ('inc/footer.php');\r
-?>\r
+<?php
+ include ('lib/twitese.php');
+ $title = "@{$_GET['id']}";
+ include ('inc/header.php');
+ if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/list.js"></script>
+
+<div id="statuses">
+ <?php
+ $id = isset($_GET['id'])? $_GET['id'] : false;
+ $since_id = isset($_GET['since_id'])? $_GET['since_id'] : false;
+ $max_id = isset($_GET['max_id'])? $_GET['max_id'] : false;
+ $t = getTwitter();
+ $statuses = $t->listStatus($id, $since_id, $max_id);
+ $listInfo = $t->listInfo($id);
+ if ($statuses === false) {
+ header('location: error.php');exit();
+ }
+
+ $isFollower = $t->isFollowedList($id);
+ ?>
+
+ <div id="info_head">
+ <a href="user.php?id=<?php echo $listInfo->user->screen_name ?>"><img id="info_headimg" src="<?php echo getAvatar($listInfo->user->profile_image_url); ?>" /></a>
+ <div id="info_name"><?php echo $id?></div>
+ <div id="info_relation">
+ <?php if ($isFollower) {?>
+ <a id="list_block_btn" class="info_btn_hover" href="#">Unfollow</a>
+ <?php } else { ?>
+ <a id="list_follow_btn" class="info_btn" href="#">Follow</a>
+ <?php } ?>
+ <a id="list_send_btn" class="info_btn" href="#">Tweet</a>
+ <a class="info_btn" href="list_followers.php?id=<?php echo $id?>">Followers (<?php echo $listInfo->subscriber_count?>)</a>
+ <a class="info_btn" href="list_members.php?id=<?php echo $id?>">Members (<?php echo $listInfo->member_count?>)</a>
+ </div>
+ </div>
+ <div class="clear"></div>
+
+ <?php
+ $empty = count($statuses) == 0? true: false;
+ if ($empty) {
+ echo "<div id=\"empty\">No Tweet To Display</div>";
+ } else {
+ $output = '<ol class="timeline" id="allTimeline">';
+ include('lib/timeline_format.php');
+ $firstid = false;
+ $lastid = false;
+ foreach ($statuses as $status) {
+ if (!$firstid) $firstid = $status->id_str;
+ $lastid = $status->id_str;
+ if (isset($status->retweeted_status)) {
+ $output .= format_retweet($status);
+ } else {
+ $output .= format_timeline($status,$t->username);
+ }
+ }
+ $lastid = bcsub($lastid, "1");
+
+ $output .= "</ol><div id=\"pagination\">";
+
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"list.php?id={$id}&since_id={$firstid}\">Back</a>";
+ $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"list.php?id={$id}&max_id={$lastid}\">Next</a>";
+
+ $output .= "</div>";
+
+ echo $output;
+ }
+
+ ?>
+</div>
+
+<?php
+ include ('inc/sidebar.php');
+ include ('inc/footer.php');
+?>
-<?php \r
- include ('lib/twitese.php');\r
- $title = "@{$_GET['id']} - Followers";\r
- include ('inc/header.php');\r
- \r
- $type = 'list_followers';\r
- include ('inc/userlist.php');\r
- \r
- include ('inc/sidebar.php');\r
- include ('inc/footer.php');\r
-?>\r
+<?php
+ include ('lib/twitese.php');
+ $title = "@{$_GET['id']} - Followers";
+ include ('inc/header.php');
+
+ $type = 'list_followers';
+ include ('inc/userlist.php');
+
+ include ('inc/sidebar.php');
+ include ('inc/footer.php');
+?>
-<?php\r
-include ('lib/twitese.php');\r
-$title = "@{$_GET['id']} - Following";\r
-include ('inc/header.php');\r
-?>\r
-<script src="js/list_members.js"></script>\r
-<?php\r
-$type = 'list_members';\r
-include ('inc/userlist.php');\r
-include ('inc/sidebar.php');\r
-include ('inc/footer.php');\r
-?>\r
+<?php
+include ('lib/twitese.php');
+$title = "@{$_GET['id']} - Following";
+include ('inc/header.php');
+?>
+<script src="js/list_members.js"></script>
+<?php
+$type = 'list_members';
+include ('inc/userlist.php');
+include ('inc/sidebar.php');
+include ('inc/footer.php');
+?>
-<?php \r
- include ('lib/twitese.php');\r
- $title = "Lists";\r
- include ('inc/header.php');\r
- \r
- if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/lists.js"></script>\r
-\r
-<div id="statuses">\r
- <?php \r
- $t = getTwitter();\r
- if ( isset($_POST['list_name']) ) {\r
- if ($_POST['is_edit'] == 0) {\r
- if (trim($_POST['list_name']) == '') {\r
- echo "<div id=\"otherTip\">Fail to create list, the name CANNOT be empty</div>";\r
- } else {\r
- $isProtect = isset($_POST['list_protect']) ? true : false;\r
- $result = $t->createList($_POST['list_name'], $_POST['list_description'], $isProtect);\r
- if ($result) {\r
- echo "<div id=\"otherTip\">Success</div>";\r
- } else {\r
- echo "<div id=\"otherTip\">Failed, please retry</div>";\r
- }\r
- }\r
- } else {\r
- if (trim($_POST['list_name']) == '') {\r
- echo "<div id=\"otherTip\">Fail to create list, the name CANNOT be empty</div>";\r
- } else {\r
- $isProtect = isset($_POST['list_protect']) ? true : false;\r
- $result = $t->editList($_POST['pre_list_name'], $_POST['list_name'], $_POST['list_description'], $isProtect);\r
- if ($result) {\r
- echo "<div id=\"otherTip\">Success</div>";\r
- } else {\r
- echo "<div id=\"otherTip\">Failed, please retry</div>";\r
- }\r
- }\r
- }\r
- }\r
- \r
- if ( isset($_POST['list_members']) ) {\r
- if (trim($_POST['list_members']) == '') {\r
- echo "<div id=\"otherTip\">Fail to add members, the member list is empty!</div>";\r
- } else {\r
- $listId = $_POST['member_list_name'];\r
- $result = $t->addListMember($listId, $_POST['list_members']);\r
- if (isset($result->error)) {\r
- echo "<div id=\"otherTip\">Failed, please retry!</div>";\r
- } else {\r
- echo "<div id=\"otherTip\">Success!</div>";\r
- }\r
- }\r
- }\r
- ?>\r
- <?php \r
- $isSelf = true;\r
- if (isset($_GET['id'])) {\r
- $id = $_GET['id'];\r
- $isSelf = false;\r
- } else {\r
- $id = $t->username;\r
- }\r
- $type = isset($_GET['t'])? $_GET['t'] : 1;\r
- $c = isset($_GET['c'])? $_GET['c'] : -1;\r
- switch ($type) {\r
- case 0:\r
- $lists = $t->followedLists($id, $c);\r
- break;\r
- case 1:\r
- $lists = $t->createdLists($id, $c);\r
- break;\r
- case 2:\r
- $lists = $t->beAddedLists($id, $c);\r
- break;\r
- default:\r
- $lists = false;\r
- }\r
- $nextlist = $lists->next_cursor;\r
- $prelist = $lists->previous_cursor;\r
- $lists = $lists->lists; \r
- if ($lists === false) {\r
- header('location: error.php');exit();\r
- } \r
- \r
- \r
- ?>\r
- <div id="subnav">\r
- <?php if ($isSelf) { ?>\r
- <?php if ($type == 0) {?>\r
- <span class="subnavNormal">Lists you follow</span><span class="subnavLink"><a href="lists.php?t=1">Lists you created</a></span><span class="subnavLink"><a href="lists.php?t=2">Lists following you</a></span>\r
- <?php } else if ($type == 1) {?>\r
- <span class="subnavLink"><a href="lists.php?t=0">Lists you follow</a></span><span class="subnavNormal">Lists you created</span><span class="subnavLink"><a href="lists.php?t=2">Lists following you</a></span>\r
- <?php } else {?>\r
- <span class="subnavLink"><a href="lists.php?t=0">Lists you follow</a></span><span class="subnavLink"><a href="lists.php?t=1">Lists you created</a></span><span class="subnavNormal">Lists following you</span>\r
- <?php } ?>\r
- <?php } else {?>\r
- <?php if ($type == 0) {?>\r
- <span class="subnavNormal">Following Lists</span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=1">Created Lists</a></span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=2">Lists Following</a></span>\r
- <?php } else if ($type == 1) {?>\r
- <span class="subnavLink"><a href="lists.php?t=0&id=<?php echo $id?>">Following Lists</a></span><span class="subnavNormal">Created Lists</span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=2">Lists Following</a></span>\r
- <?php } else {?>\r
- <span class="subnavLink"><a href="lists.php?t=0&id=<?php echo $id?>">Following Lists</a></span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=1">Created Lists</a></span><span class="subnavNormal">Lists Following</span>\r
- <?php } ?>\r
- <?php } ?>\r
- </div>\r
- \r
- <?php \r
- \r
- $empty = count($lists) == 0? true: false;\r
- if ($empty) {\r
- echo "<div id=\"empty\">No Tweet To Display</div>";\r
- } else {\r
- $output = '<ol class="rank_list">'; \r
- foreach ($lists as $list) {\r
- \r
- $listurl = substr($list->uri,1);\r
- $user = $list->user;\r
- $listname = explode('/',$list->full_name);\r
- $mode = $list->mode == 'private' ? "Private" : "";\r
- \r
- $output .= "\r
- <li>\r
- <span class=\"rank_img\"><img src=\"".getAvatar($user->profile_image_url)."\" /></span>\r
- <div class=\"rank_content\">\r
- <span class=\"rank_num\"><span class=\"rank_name\"><a href=\"list.php?id=$listurl\"><em>$listname[0]/</em>$listname[1]</a></span></span>\r
- <span class=\"rank_count\">Followers:$list->subscriber_count Members:$list->member_count $mode</span> \r
- ";\r
- if ($list->description != '') $output .= "<span class=\"rank_description\">Description: $list->description</span>";\r
- if ($type == 0) $output .= "<span id=\"list_action\"><a id=\"btn\" href=\"javascript:void()\" class=\"unfollow_list\">Unfollow</a></span>";\r
- if ($type == 1 && $isSelf) $output .= "<span id=\"list_action\"><a id=\"btn\" href=\"javascript:void()\" class=\"edit_list\">Edit</a> <a id=\"btn\" href=\"javascript:void()\" class=\"delete_list\">Delete</a> <a id=\"btn\" href=\"javascript:void()\" class=\"add_member\">Add Members</a></span>";\r
- $output .= "\r
- </div>\r
- </li>\r
- ";\r
- }\r
- \r
- $output .= "</ol>";\r
- \r
- echo $output;\r
- }\r
- \r
- ?>\r
- \r
- <?php if ($isSelf && $type == 1) {?>\r
- <a href="javascript:void()" class="more round" id="list_create_btn" style="margin: 20px auto;">Create a new list</a>\r
- <form method="POST" action="./lists.php?t=1" id="list_form">\r
- <input type="hidden" name="pre_list_name" value="" id="pre_list_name" />\r
- <input type="hidden" name="is_edit" value="0" id="is_edit" />\r
- <span><label for="list_name">List name</label><input type="text" name="list_name" id="list_name" /></span>\r
- <span><label for="list_description">Description</label><textarea type="text" name="list_description" id="list_description"></textarea></span>\r
- <span><label for="list_protect">Private</label><input type="checkbox" name="list_protect" id="list_protect" />\r
- <a style="background: transparent url(img/sprite-icons.png) no-repeat scroll -272px -16px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; text-decoration: none; height: 10px; float: right; position: relative; width: 9px; left: 3px; top: -160px;" title="Close" onclick="$('#list_form').slideToggle(300)" href="#"></a>\r
- <input type="submit" class="btn" id="list_submit" value="Creat" />\r
- \r
- </span>\r
- <span></span>\r
- </form>\r
- \r
- \r
- <?php }?>\r
- \r
- <div id="pagination">\r
- <?php \r
- if ($type == 0 || $type == 2) {\r
- if ($isSelf) {\r
- if ($prelist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"lists.php?t=$type&c=$prelist\">Back</a>";\r
- if ($nextlist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"lists.php?t=$type&c=$nextlist\">Next</a>";\r
- } else {\r
- if ($prelist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"lists.php?id=$id&t=$type&c=$prelist\">Back</a>";\r
- if ($nextlist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"lists.php?id=$id&t=$type&c=$nextlist\">Next</a>";\r
- }\r
- }\r
- ?>\r
- </div>\r
-</div>\r
-\r
-<?php \r
- include ('inc/sidebar.php');\r
- include ('inc/footer.php');\r
-?>\r
+<?php
+ include ('lib/twitese.php');
+ $title = "Lists";
+ include ('inc/header.php');
+
+ if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/lists.js"></script>
+
+<div id="statuses">
+ <?php
+ $t = getTwitter();
+
+ $isSelf = true;
+ if (isset($_GET['id'])) {
+ $id = $_GET['id'];
+ $isSelf = false;
+ } else {
+ $id = $t->username;
+ }
+ $type = isset($_GET['t'])? $_GET['t'] : 1;
+ $c = isset($_GET['c'])? $_GET['c'] : -1; // cursor
+ switch ($type) {
+ case 0:
+ $lists = $t->followedLists($id, $c);
+ break;
+ case 1:
+ $lists = $t->myLists($id);
+ break;
+ case 2:
+ $lists = $t->beAddedLists($id, $c);
+ break;
+ default:
+ $lists = false;
+ }
+ $nextlist = $lists->next_cursor;
+ $prelist = $lists->previous_cursor;
+ $lists = $lists->lists;
+ if ($lists === false) {
+ header('location: error.php');exit();
+ }
+
+
+ ?>
+ <div id="subnav">
+ <?php if ($isSelf) {
+ if ($type == 0) {?>
+ <span class="subnavNormal">Lists you follow</span><span class="subnavLink"><a href="lists.php?t=1">Lists you created</a></span><span class="subnavLink"><a href="lists.php?t=2">Lists following you</a></span>
+ <?php } else if ($type == 1) {?>
+ <span class="subnavLink"><a href="lists.php?t=0">Lists you follow</a></span><span class="subnavNormal">Lists you created</span><span class="subnavLink"><a href="lists.php?t=2">Lists following you</a></span>
+ <?php } else {?>
+ <span class="subnavLink"><a href="lists.php?t=0">Lists you follow</a></span><span class="subnavLink"><a href="lists.php?t=1">All your lists</a></span><span class="subnavNormal">Lists following you</span>
+ <?php }
+ } else {
+ if ($type == 0) {?>
+ <span class="subnavNormal">Following Lists</span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=1">All Lists</a></span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=2">Lists Following @<?php echo $id?></a></span>
+ <?php } else if ($type == 1) {?>
+ <span class="subnavLink"><a href="lists.php?t=0&id=<?php echo $id?>">Following Lists</a></span><span class="subnavNormal">All Lists</span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=2">Lists Following @<?php echo $id?></a></span>
+ <?php } else {?>
+ <span class="subnavLink"><a href="lists.php?t=0&id=<?php echo $id?>">Following Lists</a></span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=1">All Lists</a></span><span class="subnavNormal">Lists Following @<?php echo $id?></span>
+ <?php }
+ } ?>
+ </div>
+
+ <?php
+
+ $empty = count($lists) == 0? true: false;
+ if ($empty) {
+ echo "<div id=\"empty\">No Tweet To Display</div>";
+ } else {
+ $output = '<ol class="rank_list">';
+ foreach ($lists as $list) {
+
+ $listurl = substr($list->uri,1);
+ $user = $list->user;
+ $listname = explode('/',$list->full_name);
+ $mode = $list->mode == 'private' ? "Private" : "Public";
+
+ $output .= "
+ <li>
+ <span class=\"rank_img\"><img src=\"".getAvatar($user->profile_image_url)."\" /></span>
+ <div class=\"rank_content\" id=\"list{$list->id_str}\">
+ <span class=\"rank_num\"><span class=\"rank_name\"><a href=\"list.php?id=$listurl\"><em>$listname[0]/</em>$listname[1]</a></span></span>
+ <span class=\"rank_count\">Followers: {$list->subscriber_count} Members: {$list->member_count} $mode</span>
+ ";
+ if ($list->description != '') $output .= "<span class=\"rank_description\">Description: $list->description</span>";
+ if ($type == 0) $output .= "<span id=\"list_action\"><a id=\"btn\" href=\"javascript:void()\" class=\"unfollow_list\">Unfollow</a></span>";
+ if ($type == 1 && $isSelf) $output .= "<span id=\"list_action\"><a id=\"btn\" href=\"javascript:void()\" class=\"edit_list\">Edit</a> <a id=\"btn\" href=\"javascript:void()\" class=\"delete_list\">Delete</a> <a id=\"btn\" href=\"javascript:void()\" class=\"add_member\">Add Members</a></span>";
+ $output .= "
+ </div>
+ </li>
+ ";
+ }
+
+ $output .= "</ol>";
+
+ echo $output;
+ }
+
+ ?>
+
+ <?php if ($isSelf && $type == 1) {?>
+ <a href="#" class="more round" id="list_create_btn" style="margin: 20px auto;">Create a new list</a>
+ <form method="POST" action="./lists.php?t=1" id="list_form">
+ <input type="hidden" name="list_spanid" value="" id="list_spanid" />
+ <input type="hidden" name="pre_list_name" value="" id="pre_list_name" />
+ <input type="hidden" name="is_edit" value="0" id="is_edit" />
+ <span><label for="list_name">List name</label><input type="text" name="list_name" id="list_name" /></span>
+ <span><label for="list_description">Description</label><textarea type="text" name="list_description" id="list_description"></textarea></span>
+ <span><label for="list_protect">Private</label><input type="checkbox" name="list_protect" id="list_protect" />
+ <a style="background: transparent url(img/sprite-icons.png) no-repeat scroll -272px -16px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; text-decoration: none; height: 10px; float: right; position: relative; width: 9px; left: 3px; top: -160px;" title="Close" onclick="$('#list_form').slideToggle(300)" href="#"></a>
+ <input type="submit" class="btn" id="list_submit" value="" />
+
+ </span>
+ <span></span>
+ </form>
+
+
+ <?php }?>
+
+ <div id="pagination">
+ <?php
+ if ($type == 0 || $type == 2) {
+ if ($isSelf) {
+ if ($prelist != 0) echo "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"lists.php?t=$type&c=$prelist\">Back</a>";
+ if ($nextlist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"lists.php?t=$type&c=$nextlist\">Next</a>";
+ } else {
+ if ($prelist != 0) echo "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"lists.php?id=$id&t=$type&c=$prelist\">Back</a>";
+ if ($nextlist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"lists.php?id=$id&t=$type&c=$nextlist\">Next</a>";
+ }
+ }
+ ?>
+ </div>
+</div>
+
+<?php
+ include ('inc/sidebar.php');
+ include ('inc/footer.php');
+?>
}
</script>
</head>
-
-<?php if(BASIC_AUTH) require ('basic_auth.php'); ?>
+
<body class="form-container">
<div class="clear rounded_5px" id="container">
<div id="header">
</fieldset>
</form>
<div style="background: none repeat scroll 0% 0% transparent;" id="footer">
-<p>© 2013 Contributors <?php if(isset($_COOKIE['twitese_name'])) echo 'and '.$_COOKIE['twitese_name'];?> · <a href="http://code.google.com/p/embr/" target="_blank" title="Embr Open Source">Open Source</a></p>
+<p>© 2013 Contributors <?php if(isset($_COOKIE['twitese_name'])) echo 'and '.$_COOKIE['twitese_name'];?> · <a href="https://github.com/AstroProfundis/embrr" target="_blank" title="Embrr Open Source">Open Source</a></p>
</div>
</div>
</body>
+++ /dev/null
-<?php \r
- include ('lib/twitese.php');\r
- $title = "Sign In";\r
- include ('inc/header.php');\r
- \r
-?>\r
-\r
-<div id="login_area">\r
- <div id="error">\r
-\r
-<?php\r
- if ( isset($_POST['username']) && isset($_POST['password']) ) {\r
- $remember = isset($_POST['remember']) ? true : false;\r
- $result = verify($_POST['username'], $_POST['password'], $remember);\r
- if ($result) {\r
- header('location: all.php');\r
- } else {\r
- echo "<p>Login failed. Please check your username and password.</p>";\r
- }\r
- } else {\r
- echo "<p>Illegal request. Please go back.</p>";\r
- }\r
-?>\r
-\r
- </div>\r
-</div> \r
-\r
-<?php \r
- include ('inc/footer.php');\r
-?>\r
-<?php \r
- if(!isset($_SESSION)){\r
- session_start();\r
- }\r
- $time = $_SERVER['REQUEST_TIME']-300;\r
- setcookie('oauth_token',"",$time);\r
- setcookie('oauth_token_secret',"",$time);\r
- setcookie('user_id',"",$time);\r
- setcookie('twitese_name',"",$time);\r
- setcookie('friends_count',"",$time);\r
- setcookie('statuses_count',"",$time);\r
- setcookie('followers_count',"",$time);\r
- setcookie('imgurl',"",$time);\r
- setcookie('name',"",$time);\r
- setcookie('listed_count',"",$time);\r
- setcookie('recover',"",$time);\r
- setcookie('homeInterval',"",$time);\r
- setcookie('updatesInterval',"",$time);\r
- setcookie('proxify',"",$time); \r
- setcookie('Bgimage',"",$time);\r
- setcookie('BgColor',"",$time);\r
- setcookie('Bgrepeat',"",$time);\r
- setcookie('Tip_Title',"",$time);\r
- setcookie('Tip_Content',"",$time);\r
- setcookie('Tip_More',"",$time);\r
- session_destroy();\r
- header('location: login.php');\r
-?>\r
+<?php
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ $time = $_SERVER['REQUEST_TIME']-300;
+ setcookie('oauth_token',"",$time);
+ setcookie('oauth_token_secret',"",$time);
+ setcookie('user_id',"",$time);
+ setcookie('twitese_name',"",$time);
+ setcookie('friends_count',"",$time);
+ setcookie('statuses_count',"",$time);
+ setcookie('followers_count',"",$time);
+ setcookie('imgurl',"",$time);
+ setcookie('name',"",$time);
+ setcookie('listed_count',"",$time);
+ setcookie('recover',"",$time);
+ setcookie('homeInterval',"",$time);
+ setcookie('updatesInterval',"",$time);
+ setcookie('proxify',"",$time);
+ setcookie('Bgimage',"",$time);
+ setcookie('BgColor',"",$time);
+ setcookie('Bgrepeat',"",$time);
+ setcookie('Tip_Title',"",$time);
+ setcookie('Tip_Content',"",$time);
+ setcookie('Tip_More',"",$time);
+ session_destroy();
+ header('location: login.php');
+?>
<?php
$t = getTwitter();
- $p = 1;
- if (isset($_GET['p'])) {
- $p = (int) $_GET['p'];
- if ($p <= 0) $p = 1;
- }
+ $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+ $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
if ($isSentPage) {
- $messages = $t->sentDirectMessage($p);
+ $messages = $t->sentDirectMessages($since_id, $max_id);
} else {
- $messages = $t->directMessages($p);
+ $messages = $t->directMessages($since_id, $max_id);
}
if ($messages === false) {
header('location: error.php');exit();
- }
- $empty = count($messages) == 0? true: false;
- if ($empty) {
- echo "<div id=\"empty\">No tweets to display.</div>";
+ }
+
+ $count_t = count($messages);
+ if ($count_t > 1) {
+ $empty = 0; // 0 for not empty
+ } else if ($count_t < 1) {
+ $empty = 1; // 1 for no tweet to display
+ } else {
+ $empty = $t->http_code == 429 ? 2 : 0;
+ }
+
+ if ($empty == 1) {
+ echo "<div id=\"empty\">No message to display.</div>";
+ } else if ($empty == 2) {
+ echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
} else {
include ('lib/timeline_format.php');
$output = '<ol class="timeline" id="allMessage">';
$output .= "</ol><div id=\"pagination\">";
-
+ $firstmsg = $messages[0]->id_str;
+ $lastmsg = bcsub($messages[count($messages)-1]->id_str, "1");
if ($isSentPage) {
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"message.php?t=sent&p=" . ($p-1) . "\">Back</a>";
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"message.php?t=sent&p=" . ($p+1) . "\">Next</a>";
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"message.php?t=sent&since_id=" . $firstmsg . "\">Back</a>";
+ $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"message.php?t=sent&max_id=" . $lastmsg . "\">Next</a>";
} else {
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"message.php?p=" . ($p-1) . "\">Back</a>";
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"message.php?p=" . ($p+1) . "\">Next</a>";
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"message.php?since_id=" . $firstmsg ."\">Back</a>";
+ $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"message.php?max_id=" . $lastmsg ."\">Next</a>";
}
$output .= "</div>";
+++ /dev/null
-<?php\r
- include ('lib/twitese.php');\r
- $title = "Nexus";\r
- include ('inc/header.php'); \r
- if (!loginStatus()) header('location: login.php'); \r
-?>\r
-<style type="text/css">\r
-#analyze {\r
-display: block; \r
-float: left; \r
-width: 200px; \r
-margin-left: 145px; \r
-margin-top: 20px; \r
-height: 40px;\r
-background-color:#FFFFFF;\r
-background-image:url("../img/more.gif");\r
-background-position:left top;\r
-background-repeat:repeat-x;\r
-border-color:#DDDDDD #AAAAAA #AAAAAA #DDDDDD;\r
-border-style:solid;\r
-border-width:1px;\r
-color:#666666;\r
-display:block;\r
-font-family:Tahoma,Arial,sans-serif;\r
-font-size:14px;\r
-font-weight:700;\r
-letter-spacing:1px;\r
-line-height:1.5em;\r
-margin-bottom:6px;\r
-outline-style:none;\r
-outline-width:medium;\r
-text-align:center;\r
-text-shadow:1px 1px 1px #FFFFFF;\r
-}\r
-#analyze:hover {\r
-background-position:left -78px;\r
-border:1px solid #BBBBBB;\r
-text-decoration:none;\r
-}\r
-#analyze:active {\r
-background-position:left -38px;\r
-color:#666666;\r
-}\r
-#analyze.loading {\r
-background-color:transparent;\r
-background-image:url("../img/ajax.gif");\r
-background-position:50% 50%;\r
-background-repeat:no-repeat;\r
-border:medium none;\r
-cursor:default !important;\r
-}\r
-#analyze::-moz-focus-inner {\r
-border:0 none;}\r
-#users {\r
-box-shadow:0 2px 10px #333333; \r
--webkit-box-shadow: 0 2px 10px #333333;\r
--moz-box-shadow: 0 2px 10px #333333;\r
-background:url("../img/bg-front.gif") repeat-x scroll 0 bottom transparent;\r
-display:block;\r
-float:left;\r
-margin-bottom:10px;\r
-margin-left:25px;\r
-margin-top:25px;\r
-padding:15px 15px 20px 0;\r
-width:480px;\r
-}\r
-#users h2 {\r
-background:url("../img/nexus_logo.png") no-repeat scroll 0 0 transparent;\r
-color:#666666;\r
-height:44px;\r
-margin:0 0 0 15px;\r
-text-indent:-9999em;\r
-width:117px;\r
-}\r
-#descr {display: block; float: left; clear: both; text-shadow: 1px 1px rgb(238, 238, 238); margin: 10px 0 15px 15px; color: rgb(51, 51, 51);font-size:12px}\r
-.at_sym_1 {display: block; float: left; vertical-align: middle; clear: both; margin-top: 7px; font-size: 14px; margin-left: 55px; color: rgb(51, 51, 51);}\r
-.at_sym_2 {display: block; float: left; margin-left: 15px; vertical-align: middle; font-size: 14px; margin-top: 7px; color: rgb(51, 51, 51);}\r
-.and_sym {display: block; float: left; margin-left: 15px; vertical-align: middle; font-weight: bold; font-size: 14px; margin-top: 7px; color: rgb(102, 102, 102);}\r
-.user_input {\r
-border:1px solid #A7A6AA;\r
-color:#666666;\r
-display:block;\r
-float:left;\r
-font-family:tahoma;\r
-font-size:14px;\r
-font-weight:bold;\r
-letter-spacing:1px;\r
-margin-left:5px;\r
-margin-top:3px;\r
-padding:5px;\r
-vertical-align:top;\r
-width:130px;\r
-}\r
-#result {\r
-display:block;\r
-float:left;\r
-width:460px;\r
-height:200px;\r
-margin-left:20px;\r
-margin-top:10px;\r
-}\r
-.intro {\r
-background:url("../img/nexus_intro.png") no-repeat scroll 0 0 transparent;\r
-}\r
-.sect {\r
-box-shadow:0px 0px 5px #c2c2c2; \r
--webkit-box-shadow: 0px 0px 5px #c2c2c2;\r
--moz-box-shadow: 0px 0px 5px #c2c2c2;\r
-display: block; \r
-float: left; \r
-height: 0px; \r
-margin-left: 15px; \r
-color: #EEEEEE; \r
-width: 464px; \r
-margin-top: 10px;\r
-}\r
-#result h3 {\r
-color:red;\r
-display:block;\r
-font-size:20px;\r
-margin-top:90px;\r
-margin-left:0 !important;\r
-text-align:center;\r
-}\r
-</style>\r
-<script type="text/javascript" src="js/nexus.js"></script>\r
-<div id="statuses" class="column round-left">\r
-<div class="round" id="users">\r
-<h2>\r
-<span>Nexus</span>\r
-</h2>\r
-<hr class="sect" />\r
-<p id="result" class="intro"></p>\r
-<p id="descr">Rabr Nexus is a tool helps you analyze relationships between you or the others.</p>\r
-<label class="at_sym_1">@</label>\r
-<input type="text" id="user_1" name="user_1" class="user_input" onfocus="this.select()" onmouseover="this.focus()" value="<?php if (isset($_GET['target'])) echo $_GET['target'] ?>" />\r
-<label class="and_sym">and</label>\r
-<label class="at_sym_2">@</label>\r
-<input type="text" id="user_2" name="user_2" class="user_input" onfocus="this.select()" onmouseover="this.focus()" value="<?php if (isset($_GET['source'])) echo $_GET['source'] ?>"/>\r
-<input type="submit" id="analyze" class="round" value="Analyze" />\r
-</div>\r
-</div>\r
-\r
-<?php \r
- include ('inc/sidebar.php');\r
-?>\r
-\r
-<?php \r
- include ('inc/footer.php');\r
-?>\r
-<?php\r
- /* Start session and load lib */\r
- if(!isset($_SESSION)){\r
- session_start();\r
- }\r
- include_once('lib/twitese.php');\r
- foreach ($AUTH_ID as &$id) {\r
- $id = strtoupper($id);\r
- }\r
- if (isset($_REQUEST['oauth_token'])) {\r
- if($_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {\r
- $_SESSION['oauth_status'] = 'oldtoken';\r
- session_destroy();\r
- header('Location: login.php?oauth=old');exit();\r
- }else{\r
- /* Create TwitteroAuth object with app key/secret and token key/secret from default phase */\r
- $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);\r
-\r
- /* Request access tokens from twitter */\r
- $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);\r
-\r
- /* Save the access tokens. Normally these would be saved in a database for future use. */\r
- $_SESSION['access_token'] = $access_token;\r
-\r
- /* Remove no longer needed request tokens */\r
- unset($_SESSION['oauth_token']);\r
- unset($_SESSION['oauth_token_secret']);\r
-\r
- /* If HTTP response is 200 continue otherwise send to connect page to retry */\r
- if (200 == $connection->http_code) {\r
- /* The user has been verified and the access tokens can be saved for future use */\r
- $_SESSION['login_status'] = 'verified';\r
- $t = getTwitter();\r
- $user = $t->veverify();\r
- \r
- if ( ID_AUTH && (!in_array(strtoupper($t->screen_name),$AUTH_ID)) ){\r
- session_destroy();\r
- header("Location: login.php?oauth=denied");exit;\r
- }\r
- /* And set new cookies */\r
- $time = $_SERVER['REQUEST_TIME']+3600*24*365;\r
- setEncryptCookie('oauth_token', $access_token['oauth_token'], $time, '/');\r
- setEncryptCookie('oauth_token_secret', $access_token['oauth_token_secret'], $time, '/');\r
- setEncryptCookie('user_id', $access_token['user_id'], $time, '/');\r
- setEncryptCookie('twitese_name', $t->screen_name, $time, '/');\r
- refreshProfile();\r
- \r
- if(!isset($_COOKIE['showpic'])){\r
- setcookie('showpic', 'true', $time, '/');\r
- }\r
- if(!isset($_COOKIE['mediaPre'])){\r
- setcookie('mediaPre', 'true', $time, '/');\r
- }\r
- if(!isset($_COOKIE['loginPage'])) {\r
- header('Location: index.php');exit();\r
- } else {\r
- $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';\r
- $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';\r
- $login_page = $scheme . '://' . $_SERVER['HTTP_HOST'] . $port . $_COOKIE['loginPage'];\r
- header('Location: '. $login_page);exit();\r
- }\r
- \r
- } else {\r
- session_destroy();\r
- header('Location: login.php?oauth=error');exit();\r
- }\r
- }\r
- }else{\r
- /* Create TwitterOAuth object and get request token */\r
- $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);\r
- \r
- /* Get callback URL */\r
- $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';\r
- $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';\r
- $oauth_callback = $scheme . '://' . $_SERVER['HTTP_HOST'] . $port . $_SERVER['REQUEST_URI'];\r
- \r
- /* Get request token */\r
- $request_token = $connection->getRequestToken($oauth_callback);\r
-\r
- /* Save request token to session */\r
- $_SESSION['oauth_token'] = $token = $request_token['oauth_token'];\r
- $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];\r
-\r
- /* If last connection fails don't display authorization link */\r
- switch ($connection->http_code) {\r
- case 200:\r
- \r
- $time = $_SERVER['REQUEST_TIME']+3600*24*365;\r
- $url = $connection->getAuthorizeURL($token);\r
- if ( isset($_POST['proxify']) ) { \r
- $raw= processCurl($url);\r
- $new = str_replace('https://api.twitter.com/oauth/authorize', 'authorize.php',$raw); \r
- $new = str_replace('html { display:none; }','.error,a.sign-up,input[name="deny"]{display:none !important;}',$new);\r
- $new = preg_replace('/https?:\/\/\w+([0-9])\.twimg\.com/i','https://s3.amazonaws.com/twitter_production',$new);\r
- echo $new;\r
- } //OAuth Proxy End\r
- else {\r
- header('Location: ' . $url); \r
- }\r
- break;\r
- default:\r
- header('Location: error.php?t=1');exit();\r
- break;\r
- }\r
- }\r
-?>
\ No newline at end of file
+<?php
+ /* Start session and load lib */
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ include_once('lib/twitese.php');
+ foreach ($AUTH_ID as &$id) {
+ $id = strtoupper($id);
+ }
+ if (isset($_REQUEST['oauth_token'])) {
+ if($_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {
+ $_SESSION['oauth_status'] = 'oldtoken';
+ session_destroy();
+ header('Location: login.php?oauth=old');exit();
+ }else{
+ /* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
+ $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
+
+ /* Request access tokens from twitter */
+ $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
+
+ /* Save the access tokens. Normally these would be saved in a database for future use. */
+ $_SESSION['access_token'] = $access_token;
+
+ /* Remove no longer needed request tokens */
+ unset($_SESSION['oauth_token']);
+ unset($_SESSION['oauth_token_secret']);
+
+ /* If HTTP response is 200 continue otherwise send to connect page to retry */
+ if (200 == $connection->http_code) {
+ /* The user has been verified and the access tokens can be saved for future use */
+ $_SESSION['login_status'] = 'verified';
+ $t = getTwitter();
+ $user = $t->veverify();
+
+ if ( ID_AUTH && (!in_array(strtoupper($t->screen_name),$AUTH_ID)) ){
+ session_destroy();
+ header("Location: login.php?oauth=denied");exit;
+ }
+ /* And set new cookies */
+ $time = $_SERVER['REQUEST_TIME']+3600*24*365;
+ setEncryptCookie('oauth_token', $access_token['oauth_token'], $time, '/');
+ setEncryptCookie('oauth_token_secret', $access_token['oauth_token_secret'], $time, '/');
+ setEncryptCookie('user_id', $access_token['user_id'], $time, '/');
+ setEncryptCookie('twitese_name', $t->screen_name, $time, '/');
+ refreshProfile();
+
+ if(!isset($_COOKIE['showpic'])){
+ setcookie('showpic', 'true', $time, '/');
+ }
+ if(!isset($_COOKIE['shownick'])){
+ setcookie('shownick', 'false', $time, '/');
+ }
+ if(!isset($_COOKIE['mediaPre'])){
+ setcookie('mediaPre', 'true', $time, '/');
+ }
+ if(!isset($_COOKIE['loginPage'])) {
+ header('Location: index.php');exit();
+ } else {
+ $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';
+ $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
+ $login_page = $scheme . '://' . $_SERVER['HTTP_HOST'] . $port . $_COOKIE['loginPage'];
+ header('Location: '. $login_page);exit();
+ }
+
+ } else {
+ session_destroy();
+ header('Location: login.php?oauth=error');exit();
+ }
+ }
+ }else{
+ /* Create TwitterOAuth object and get request token */
+ $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
+
+ /* Get callback URL */
+ $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';
+ $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
+ $oauth_callback = $scheme . '://' . $_SERVER['HTTP_HOST'] . $port . $_SERVER['REQUEST_URI'];
+
+ /* Get request token */
+ $request_token = $connection->getRequestToken($oauth_callback);
+
+ /* Save request token to session */
+ $_SESSION['oauth_token'] = $token = $request_token['oauth_token'];
+ $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
+
+ /* If last connection fails don't display authorization link */
+ switch ($connection->http_code) {
+ case 200:
+
+ $time = $_SERVER['REQUEST_TIME']+3600*24*365;
+ $url = $connection->getAuthorizeURL($token);
+ if ( isset($_POST['proxify']) ) {
+ $raw= processCurl($url);
+ $new = str_replace('https://api.twitter.com/oauth/authorize', 'authorize.php',$raw);
+ $new = str_replace('html { display:none; }','.error,a.sign-up,input[name="deny"]{display:none !important;}',$new);
+ $new = preg_replace('/https?:\/\/\w+([0-9])\.twimg\.com/i','https://s3.amazonaws.com/twitter_production',$new);
+ echo $new;
+ } //OAuth Proxy End
+ else {
+ header('Location: ' . $url);
+ }
+ break;
+ default:
+ header('Location: error.php?t=1');exit();
+ break;
+ }
+ }
+?>
-<?php\r
- include ('lib/twitese.php');\r
- $title = "Profile";\r
- include ('inc/header.php');\r
- \r
- if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/btns.js"></script>\r
-\r
-<div id="statuses" class="column round-left">\r
-\r
- <?php include('inc/sentForm.php');\r
- $t = getTwitter();\r
- $p = 1;\r
- if (isset($_GET['p'])) {\r
- $p = (int) $_GET['p'];\r
- if ($p <= 0) $p = 1;\r
- }\r
- \r
- $statuses = $t->userTimeline($p);\r
- if ($statuses === false) {\r
- header('location: error.php');exit();\r
- } \r
- $empty = count($statuses) == 0? true: false;\r
- if ($empty) {\r
- echo "<div id=\"empty\">No tweet to display.</div>";\r
- } else {\r
- include_once('lib/timeline_format.php');\r
- $output = '<ol class="timeline" id="allTimeline">';\r
-\r
- foreach ($statuses as $status) {\r
- if (isset($status->retweeted_status)) {\r
- $output .= format_retweet($status,true);\r
- } else { \r
- $output .= format_timeline($status,$t->username);\r
- }\r
- }\r
-\r
- $output .= "</ol><div id=\"pagination\">";\r
-\r
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"profile.php?p=" . ($p-1) . "\">Back</a>";\r
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"profile.php?p=" . ($p+1) . "\">Next</a>";\r
-\r
- $output .= "</div>";\r
-\r
- echo $output;\r
- }\r
-\r
-\r
-\r
-?>\r
-</div>\r
-\r
-<?php \r
- include ('inc/sidebar.php');\r
- include ('inc/footer.php');\r
-?>\r
+<?php
+ include ('lib/twitese.php');
+ $title = "Profile";
+ include ('inc/header.php');
+
+ if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/btns.js"></script>
+
+<div id="statuses" class="column round-left">
+
+ <?php include('inc/sentForm.php');
+ $t = getTwitter();
+ $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+ $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
+
+ $statuses = $t->userTimeline(false, $since_id, $max_id);
+ if ($statuses === false) {
+ header('location: error.php');exit();
+ }
+ $empty = count($statuses) == 0? true: false;
+ if ($empty) {
+ echo "<div id=\"empty\">No tweet to display.</div>";
+ } else if ($t->http_code == 429) {
+ echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+ } else {
+ include_once('lib/timeline_format.php');
+ $output = '<ol class="timeline" id="allTimeline">';
+
+ $firstid = false;
+ $lastid = false;
+ foreach ($statuses as $status) {
+ if (isset($status->retweeted_status)) {
+ $output .= format_retweet($status,true);
+ } else {
+ $output .= format_timeline($status,$t->username);
+ }
+ if(!$firstid)
+ $firstid = $status->id_str;
+ $lastid = $status->id_str;
+ }
+ $lastid = bcsub($lastid, "1");
+
+ $output .= "</ol><div id=\"pagination\">";
+
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"profile.php?since_id={$firstid}\">Back</a>";
+ $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"profile.php?max_id={$lastid}\">Next</a>";
+
+ $output .= "</div>";
+
+ echo $output;
+ }
+
+
+
+?>
+</div>
+
+<?php
+ include ('inc/sidebar.php');
+ include ('inc/footer.php');
+?>
+++ /dev/null
-<?php\r
- include ('lib/twitese.php');\r
- $title = "Ranking";\r
- include ('inc/header.php');\r
- \r
- if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script type="text/javascript" src="js/profile.js"></script>\r
-\r
-<div id="statuses" class="column round-left">\r
-\r
- <h2>Rankings</h2>\r
- <div class="clear"></div>\r
- \r
- <?php \r
- $t = getTwitter();\r
- $p = 1;\r
- if (isset($_GET['p'])) {\r
- $p = (int) $_GET['p'];\r
- if ($p <= 0) $p = 1;\r
- }\r
- $num = 20*($p-1);\r
- \r
- $users = $t->rank($p);\r
- if ($users === false) {\r
- header('location: error.php');\r
- } \r
- $empty = count($users) == 0? true: false;\r
- if ($empty) {\r
- echo "<div id=\"empty\">No tweet to display.</div>";\r
- } else {\r
- $output = '<ol class="rank_list">';\r
- \r
- foreach ($users as $user) {\r
- $num++; \r
- $output .= "\r
- <li>\r
- <span class=\"rank_img\"><a href=\"user.php?id=$user->screen_name\"><img src=\"$user->profile_img_url\" /></a></span>\r
- <div class=\"rank_content\">\r
- <span class=\"rank_num\">No. $num <span class=\"rank_name\"><a href=\"user.php?id=$user->screen_name\">$user->name</a></span><span class=\"rank_screenname\"> ($user->screen_name)</span></span>\r
- <span class=\"rank_count\">Followers:$user->followers_count Friends:$user->friends_count Tweets:$user->statuses_count</span>\r
- <span class=\"rank_description\">Bio:$user->description</span>\r
- </div>\r
- </li>\r
- ";\r
- }\r
- \r
- $output .= "</ol><div id=\"pagination\">";\r
- \r
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"rank.php?p=" . ($p-1) . "\">Back</a>";\r
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"rank.php?p=" . ($p+1) . "\">Next</a>";\r
- \r
- $output .= "</div>";\r
- \r
- echo $output;\r
- }\r
- \r
- ?>\r
-</div>\r
-\r
-<?php \r
- include ('inc/sidebar.php');\r
-?>\r
-\r
-<?php \r
- include ('inc/footer.php');\r
-?>\r
-<?php\r
- include ('lib/twitese.php');\r
- $title = "Replies";\r
- include ('inc/header.php');\r
- if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/btns.js"></script>\r
-\r
-<div id="statuses" class="column round-left">\r
-<?php \r
- include('inc/sentForm.php');\r
- include('lib/timeline_format.php');\r
- $t = getTwitter();\r
- $p = 1;\r
- if (isset($_GET['p'])) {\r
- $p = (int) $_GET['p'];\r
- if ($p <= 0) $p = 1;\r
- }\r
- \r
- $statuses = $t->replies($p);\r
- if ($statuses === false) {\r
- header('location: error.php');exit();\r
- } \r
- $empty = count($statuses) == 0? true: false;\r
- if ($empty) {\r
- echo "<div id=\"empty\">No tweet to display.</div>";\r
- } else {\r
- $output = '<ol class="timeline" id="allTimeline">';\r
- \r
- foreach ($statuses as $status) {\r
- $output .= format_timeline($status,$t->username);\r
- }\r
- \r
- $output .= "</ol><div id=\"pagination\">";\r
- \r
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"replies.php?p=" . ($p-1) . "\">Back</a>";\r
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"replies.php?p=" . ($p+1) . "\">Next</a>";\r
- \r
- $output .= "</div>";\r
- \r
- echo $output;\r
- }\r
- ?>\r
-</div>\r
-\r
-<?php \r
- include ('inc/sidebar.php');\r
- include ('inc/footer.php');\r
-?>\r
+<?php
+ include ('lib/twitese.php');
+ $title = "Replies";
+ include ('inc/header.php');
+ if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/btns.js"></script>
+
+<div id="statuses" class="column round-left">
+<?php
+ include('inc/sentForm.php');
+ include('lib/timeline_format.php');
+ $t = getTwitter();
+ $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+ $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
+
+ $statuses = $t->replies($since_id, $max_id);
+ if ($statuses === false) {
+ header('location: error.php');exit();
+ }
+
+ $count_t = count($statuses);
+ if ($count_t > 1) {
+ $empty = 0; // 0 for not empty
+ } else if ($count_t < 1) {
+ $empty = 1; // 1 for no tweets to display
+ } else {
+ $empty = $t->http_code == 429 ? 2 : 0; // 2 for API outage
+ }
+ if ($empty == 1) {
+ echo "<div id=\"empty\">No tweet to display.</div>";
+ } else if ($empty == 2) {
+ echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+ } else {
+ $output = '<ol class="timeline" id="allTimeline">';
+
+ $firstid = false;
+ $lastid = false;
+ foreach ($statuses as $status) {
+ if (!$firstid) $firstid = $status->id_str;
+ $lastid = $status->id_str;
+ $output .= format_timeline($status,$t->username);
+ }
+ $lastid = bcsub($lastid, "1");
+
+ $output .= "</ol><div id=\"pagination\">";
+
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"replies.php?since_id=" . $firstid . "\">Back</a>";
+ $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"replies.php?max_id=" . $lastid . "\">Next</a>";
+
+ $output .= "</div>";
+
+ echo $output;
+ }
+ ?>
+</div>
+
+<?php
+ include ('inc/sidebar.php');
+ include ('inc/footer.php');
+?>
-<?php\r
- include_once('lib/twitese.php');\r
- $title = "Retweets";\r
- include_once('inc/header.php');\r
- include_once('lib/timeline_format.php');\r
- if (!loginStatus()) header('location: login.php');\r
-\r
- $type = 'retweets';\r
- $page = isset($_GET['p']) ? $_GET['p'] : 1;\r
- $count = isset($_GET['count']) ? $_GET['count'] : 20;\r
- $since_id = isset($_GET['since']) ? $_GET['since'] : false;\r
- $max_id = isset($_GET['maxid']) ? $_GET['maxid'] : false;\r
-\r
- $t = getTwitter();\r
- $retweets = $t->retweets_of_me($page, $count, $since_id, $max_id);\r
- echo '<div id="statuses" class="column round-left">';\r
- include_once('inc/sentForm.php');\r
- $html = '<script src="js/btns.js"></script>\r
- <style>\r
- .big-retweet-icon{display:none}\r
- </style>';\r
- $html .='<div class="clear"></div>';\r
- $empty = count($retweets) == 0? true: false;\r
- if ($empty) {\r
- $html .= "<div id=\"empty\">No retweets to display.</div>";\r
- } else {\r
- $html .= '<ol class="timeline" id="allTimeline">';\r
- foreach($retweets as $retweet){\r
- $html .= format_retweet_of_me($retweet);\r
- }\r
- $html .= '</ol><div id="pagination">';\r
- if ($page >1) $html .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"retweets.php?p=" . ($page-1) . "\">Back</a>";\r
- if (!$empty) $html .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"retweets.php?p=" . ($page+1) . "\">Next</a>";\r
- $html .= "</div>";\r
- }\r
- echo $html;\r
- include_once('inc/sidebar.php');\r
- include_once('inc/footer.php');\r
-?>\r
+<?php
+ include_once('lib/twitese.php');
+ $title = "Retweets";
+ include_once('inc/header.php');
+ include_once('lib/timeline_format.php');
+ if (!loginStatus()) header('location: login.php');
+
+ $count = isset($_GET['count']) ? $_GET['count'] : 20;
+ $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+ $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
+
+ $t = getTwitter();
+
+ $retweets = $t->retweets_of_me($count, $since_id, $max_id);
+
+ echo '<div id="statuses" class="column round-left">';
+ include_once('inc/sentForm.php');
+ $html = '<script src="js/btns.js"></script>
+ <style>
+ .big-retweet-icon{display:none}
+ </style>';
+ $html .='<div class="clear"></div>';
+ $empty = count($retweets) == 0? true: false;
+ if ($empty) {
+ $html .= "<div id=\"empty\">No retweet to display.</div>";
+ } else if ($t->http_code == 429) {
+ $html .= "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+ } else {
+ $html .= '<ol class="timeline" id="allTimeline">';
+ $firstid = false;
+ $lastid = false;
+ foreach($retweets as $retweet){
+ if (!$firstid) $firstid = $retweet->id_str;
+ $lastid = $retweet->id_str;
+ $html .= format_retweet_of_me($retweet);
+ }
+ $lastid = bcsub($lastid, "1");
+ $html .= '</ol><div id="pagination">';
+ $html .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"retweets.php?since_id={$firstid}\">Back</a>";
+ $html .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"retweets.php?max_id={$lastid}\">Next</a>";
+ $html .= "</div>";
+ }
+ echo $html;
+ include_once('inc/sidebar.php');
+ include_once('inc/footer.php');
+?>
$title = "Search";
include ('inc/header.php');
- function getSearch($query, $max_id_str){
- GLOBAL $output;
+ function getSearch($query, $sinceid, $maxid){
$t = getTwitter();
- $result = $t->search($query, $max_id_str);
- $statuses = $result->statuses;
- $max_id_str = end($statuses)->id_str;
- $resultCount = count($statuses);
+ $answer = $t->search($query,$sinceid,$maxid);
+
+ $resultCount = count($answer->statuses);
if ($resultCount <= 0) {
echo "<div id=\"empty\">No tweet to display.</div>";
} else {
include_once('lib/timeline_format.php');
$output = '<ol class="timeline" id="allTimeline">';
- foreach ($statuses as $status) {
- $output .= format_timeline($status, $t->username);
+ foreach ($answer->statuses as $status) {
+ if (isset($status->retweeted_status)) {
+ $output .= format_retweet($status);
+ } else {
+ $output .= format_timeline($status,$t->username);
+ }
}
- $output .= "</ol><div id=\"pagination\"><a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"search.php?q=".urlencode($query)."&maxid=" . $max_id_str . "\">Next</a></div>";
+ $output .= "</ol><div id=\"pagination\">";
+
+ $next_results = isset($answer->search_metadata->next_results) ? $answer->search_metadata->next_results : false;
+ if ($next_results) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"search.php". $next_results ."\">Next</a>";
+ $output .= "</div>";
+ echo $output;
}
}
<div id="statuses" class="column round-left">
<form action="search.php" method="get" id="search_form">
- <input type="text" name="q" id="query" value="<?php echo $_GET['q'] ?>" />
- <input type="submit" class="more round" style="width: 103px; margin-left: 10px; display: block; float: left; height: 34px; font-family: tahoma; color: rgb(51, 51, 51);" value="Search">
+ <input type="text" name="q" id="query" value="<?php echo $_GET['q'] ?>" autocomplete="off" />
+ <input type="submit" class="more round" style="width: 73px; margin-left: 10px; display: block; float: left; height: 34px; font-family: tahoma; color: rgb(51, 51, 51);" value="Search">
+ <input type="button" class="more round" style="width: 73px; margin-left: 10px; display: block; float: right; height: 34px; font-family: tahoma; color: rgb(51, 51, 51);" value="Save" id="btn_savesearch">
</form>
<?php
- $p = 1;
+ $sinceid = false;
+ $maxid = false;
+ if (isset($_GET['since_id'])) {
+ $sinceid = $_GET['since_id'];
+ }
if (isset($_GET['max_id'])) {
- $max_id = $_GET['max_id'];
- } else {
- $max_id = false;
+ $maxid = $_GET['max_id'];
}
- $output = '';
if (isset($_GET['q'])) {
$q = $_GET['q'];
- getSearch($q, $max_id);
+ getSearch($q, $sinceid, $maxid);
}
- echo $output;
?>
</div>
<fieldset class="settings">
<legend>Avatar</legend>
<ol>
- <li style="display:inline-block"><img src="<?php echo isset($_COOKIE['imgurl']) ? $_COOKIE['imgurl'] : getAvatar($user->profile_image_url)?>"></img></li>
+ <li style="display:inline-block"><img src="<?php echo isset($_COOKIE['imgurl']) ? $_COOKIE['imgurl'] : getAvatar($user->profile_image_url)?>" id="avatarimg"></img></li>
<ol style="margin-left:29px">
<li><input type="file" name="image" id="profile_image"/></li>
<li><input type="submit" id="AvatarUpload" class="btn" value="Upload"/><small style="margin-left:10px;vertical-align: middle;">BMP,JPG or PNG accepted, less than 800K.</small></li>
</ol></ol>
</fieldset>
</form>
+ <form id="setting_form" action="ajax/uploadImage.php?do=background" method="post" enctype="multipart/form-data">
+ <fieldset class="settings">
+ <legend>Background</legend>
+ <ol>
+ <li style="display:inline-block"><img src="<?php echo getAvatar($user->profile_background_image_url)?>" id="backgroundimg" style="max-width: 460px;"></img></li>
+ <li><input type="file" name="image" id="profile_background"/></li>
+ <li><input type="submit" id="BackgroundUpload" class="btn" value="Upload"/><small style="margin-left:10px;vertical-align: middle;">BMP,JPG or PNG accepted, less than 800K.</small></li>
+ <li>
+ <input id="tile" type="checkbox" <?php echo $user->profile_background_tile ? 'checked="checked"' : '' ?> />
+ <label>Tile the profile background</label>
+ </li>
+ </ol>
+ </fieldset>
+ </form>
<form id="setting_form" action="ajax/updateProfile.php" method="post">
<fieldset class="settings">
<legend>Literature</legend>
<table id="setting_table">
<tr>
- <td class="setting_title">Name:</td>
+ <td class="setting_title">Name: </td>
<td><input class="setting_input" type="text" name="name" value="<?php echo isset($user->name) ? $user->name : ''?>" /></td>
</tr>
<tr>
- <td class="setting_title">URL:</td>
- <td><input class="setting_input" type="text" name="url" value="<?php echo isset($user->url) ? $user->url : '' ?>" /></td>
+ <td class="setting_title">URL: </td>
+ <td><input class="setting_input" type="text" name="url" value="<?php
+ if (!isset($user->url))
+ echo '';
+ else {
+ $hops = array();
+ $newurl = expandRedirect($user->url, $hops);
+ echo $newurl;
+ }
+ ?>" /></td>
</tr>
<tr>
- <td class="setting_title">Location:</td>
+ <td class="setting_title">Location: </td>
<td><input class="setting_input" type="text" name="location" value="<?php echo isset($user->location) ? $user->location : '' ?>" /></td>
</tr>
<tr>
- <td class="setting_title">Bio:</td><td><small style="margin-left:5px;vertical-align: top;">*Max 160 chars</small></td>
+ <td class="setting_title">Bio: </td><td><small style="margin-left:5px;vertical-align: top;">*Max 160 chars</small></td>
</tr><tr>
<td></td>
<td><textarea id="setting_text" name="description"><?php echo isset($user->description) ? $user->description : '' ?></textarea></td>
<label>Home Page</label>
<select id="homeInterval" name="homeInterval" value="<?php echo getCookie('homeInterval')?>">
- <option value="0.5">30 sec</option>
- <option value="1" selected="selected">1 min(Default)</option>
+ <option value="1">1 min</option>
+ <option value="2" selected="selected">2 min (Default)</option>
<option value="3">3 min</option>
<option value="5">5 min</option>
<option value="10">10 min</option>
</select>
<label>Updates Page</label>
<select id="updatesInterval" name="updatesInterval" value="<?php echo getCookie('updatesInterval')?>">
- <option value="0.5">30 sec</option>
<option value="1">1 min</option>
- <option value="3" selected="selected">3 min(Default)</option>
+ <option value="2">2 min</option>
+ <option value="3" selected="selected">3 min (Default)</option>
<option value="5">5 min</option>
<option value="10">10 min</option>
<option value="0">Never</option>
<label>Use twitter account background</label>
<br /><br />
+
+ <input id="shownick" type="checkbox" />
+ <label>Use nickname instead of username</label>
+
+ <br /><br />
<label>Custom Themes</label>
<select id="styleSelect"></select>
-<?php\r
- if(!isset($_SESSION)){\r
- session_start();\r
- }\r
- include ('lib/twitese.php');\r
-?>\r
-<!DOCTYPE HTML>\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r
-<title>Share to Embr</title>\r
-<style>\r
-body{background-color:#EEE;font-family:Tahoma,Helvetica,sans-serif;font-size:12px;margin:0}\r
-h2{color:#666;display:block;float:left;font-family:Helvetica;font-weight:700;margin:8px 0 0;text-shadow:1px 1px #EEE}\r
-p{margin:0;padding:0}\r
-a:active, a:focus{outline:medium none}\r
-a{color:#3280AB;text-decoration:none}\r
-a:hover{color:#000;text-decoration:underline}\r
-#tip{color:#999;float:right;font-size:12px}\r
-#tip b{font-family:Tahoma,Helvetica,sans-serif;font-size:24px;margin:3px}\r
-#share{border-radius:5px;box-shadow:0 0 5px #000;-moz-box-shadow:0 0 5px #000;-webkit-box-shadow:0 0 5px #000;background:url("../img/bg-front.gif") repeat-x scroll 0 0 transparent;height:230px;margin:20px 30px 0;padding:10px 20px;width:500px}\r
-#textbox{border-radius:2px;background-color:#FBFBFB;border:1px solid #A7A6AA;font-family:'Lucida Grande',Tahoma,sans-serif;font-size:14px;height:80px;margin:0;overflow:hidden;padding:3px;width:490px}\r
-#url{border-radius:2px;background-color:#FBFBFB;border:1px solid #A7A6AA;font-family:'Lucida Grande',Tahoma,sans-serif;font-size:12px;padding:3px;width:490px}\r
-.title{display:block;width:40px}\r
-table tr td{padding:5px 0}\r
-#message{font-size:14px;margin-top:100px;text-align:center}\r
-#textbox:hover, #url:hover{background-color:#FFF}\r
-.more{background-color:#FFF;background-image:url("../img/more.gif");background-position:left top;background-repeat:repeat-x;border-color:#DDD #AAA #AAA #DDD;border-style:solid;border-width:1px;display:block;font-family:Helvetica;font-size:18px;font-weight:700;height:22px;letter-spacing:1px;line-height:2em;margin-bottom:6px;outline-style:none;outline-width:medium;padding:6px 0;width:100%}\r
-.more:hover{background-position:left -78px;border:1px solid #bbb;text-decoration:none}\r
-.more:active{background-position:left -38px;color:#666}\r
-.more.loading{background-color:#fff;background-image:url(../img/ajax.gif);background-position:50% 50%;background-repeat:no-repeat;border:1px solid #eee;cursor:default!important}\r
-.more::-moz-focus-inner{border:0}\r
-.round{-moz-border-radius:8px;border-radius:8px}\r
-#shareBtn{color:#666;display:block;height:45px;margin:0 auto;text-shadow:0 1px 0 #FFF;vertical-align:top;width:300px;line-height:1em}\r
-</style>\r
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>\r
-<script>\r
-$(function(){leaveWord();\r
- $("#textbox").focus().bind("keyup","keydown",function(){leaveWord()});\r
-});\r
-\r
-function leaveWord(num){\r
- if (!num) num = 140;\r
- var leave = num-$("#textbox").val().length;\r
- if (leave < 0){\r
- $("#tip").html("<b>-" + (-leave) + "</b>");\r
- } else{\r
- $("#tip").html("<b>" + leave + "</b>");\r
- if (leave > 40){ \r
- $("#tip, #tip b").css("color","#CCC");\r
- } else if(leave > 20){\r
- $("#tip, #tip b").css("color","#CAA");\r
- } else if(leave > 10){\r
- $("#tip, #tip b").css("color","#C88");\r
- } else if(leave > 0){\r
- $("#tip, #tip b").css("color","#C44");\r
- } else{\r
- $("#tip, #tip b").css("color","#E00");\r
- }\r
- }\r
-}\r
-</script>\r
-</head>\r
-\r
-<body>\r
-<?php\r
- $t = getTwitter();\r
- if ( isset($_POST['status']) ){\r
- $status = $_POST['status'];\r
- if (mb_strlen($status,'utf-8') > 140){\r
- $status = mb_substr($status, 0, 140, 'utf-8');\r
- }\r
- $status .= $_POST['url'];\r
- $result = $t->update($status);\r
- }\r
- \r
- $text = '';\r
- \r
- if ( isset($_GET['u']) ){\r
- $url = $_GET['u'];\r
- }\r
- \r
- if ( isset($_GET['t']) ){\r
- $title = $_GET['t'];\r
- $text = $_GET['t'];\r
- }\r
- \r
- if ( isset($_GET['d']) ){\r
- $select = $_GET['d'];\r
- if ( trim($select) != "" ) $text = $select;\r
- }\r
- \r
- $text = $text; \r
- $siteUrl = str_replace('share', 'index', 'http://' . $_SERVER ['HTTP_HOST'] . $_SERVER['PHP_SELF']);\r
- ?>\r
-<div id="share">\r
-\r
- <?php if ( !$t->username ){?>\r
- <div id="message">Please <a href="login.php" target="_blank">login</a> first.</div>\r
- <?php } else if ( isset($_POST['status']) ){ \r
- if ($result){\r
- ?>\r
- <div id="message">Successfully shared your stuff on Embr! <a href="javascript:window.close()">Close</a></div>\r
- <script type="text/javascript">\r
- setTimeout("window.close()",1000);\r
- </script>\r
- <?php } else{ ?>\r
- <div id="message">Failed to share your stuff, please try again. <a href="javascript:window.history.go(-1)">Go Back</a></div>\r
- <?php \r
- }\r
- } else{ \r
- ?>\r
- <form action="share.php" method="post">\r
- <table>\r
- <tr>\r
- <td colspan="2"><h2>Share to Embr</h2><span id="tip"><b>140</b></span></td>\r
- </tr>\r
- <tr>\r
- <td><input type="text" name="url" id="url" disabled="ture" value="<?php echo $url?>"/></td>\r
- </tr>\r
- <tr>\r
- <td><textarea name="status" id="textbox"><?php echo $text?> <?php if (strlen($url)>30) echo urlshorten($url); else echo $url ?></textarea></td>\r
- </tr>\r
- <tr>\r
- <td>\r
- <input class="more round" id="shareBtn" type="submit" value="Share" />\r
- </td>\r
- </tr>\r
- </table>\r
- </form>\r
- <?php } ?>\r
-</div>\r
-</body>\r
-</html>\r
+<?php
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ include ('lib/twitese.php');
+?>
+<!DOCTYPE HTML>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Share to Embr</title>
+<style>
+body{background-color:#EEE;font-family:Tahoma,Helvetica,sans-serif;font-size:12px;margin:0}
+h2{color:#666;display:block;float:left;font-family:Helvetica;font-weight:700;margin:8px 0 0;text-shadow:1px 1px #EEE}
+p{margin:0;padding:0}
+a:active, a:focus{outline:medium none}
+a{color:#3280AB;text-decoration:none}
+a:hover{color:#000;text-decoration:underline}
+#tip{color:#999;float:right;font-size:12px}
+#tip b{font-family:Tahoma,Helvetica,sans-serif;font-size:24px;margin:3px}
+#share{border-radius:5px;box-shadow:0 0 5px #000;-moz-box-shadow:0 0 5px #000;-webkit-box-shadow:0 0 5px #000;background:url("../img/bg-front.gif") repeat-x scroll 0 0 transparent;height:230px;margin:20px 30px 0;padding:10px 20px;width:500px}
+#textbox{border-radius:2px;background-color:#FBFBFB;border:1px solid #A7A6AA;font-family:'Lucida Grande',Tahoma,sans-serif;font-size:14px;height:80px;margin:0;overflow:hidden;padding:3px;width:490px}
+#url{border-radius:2px;background-color:#FBFBFB;border:1px solid #A7A6AA;font-family:'Lucida Grande',Tahoma,sans-serif;font-size:12px;padding:3px;width:490px}
+.title{display:block;width:40px}
+table tr td{padding:5px 0}
+#message{font-size:14px;margin-top:100px;text-align:center}
+#textbox:hover, #url:hover{background-color:#FFF}
+.more{background-color:#FFF;background-image:url("../img/more.gif");background-position:left top;background-repeat:repeat-x;border-color:#DDD #AAA #AAA #DDD;border-style:solid;border-width:1px;display:block;font-family:Helvetica;font-size:18px;font-weight:700;height:22px;letter-spacing:1px;line-height:2em;margin-bottom:6px;outline-style:none;outline-width:medium;padding:6px 0;width:100%}
+.more:hover{background-position:left -78px;border:1px solid #bbb;text-decoration:none}
+.more:active{background-position:left -38px;color:#666}
+.more.loading{background-color:#fff;background-image:url(../img/ajax.gif);background-position:50% 50%;background-repeat:no-repeat;border:1px solid #eee;cursor:default!important}
+.more::-moz-focus-inner{border:0}
+.round{-moz-border-radius:8px;border-radius:8px}
+#shareBtn{color:#666;display:block;height:45px;margin:0 auto;text-shadow:0 1px 0 #FFF;vertical-align:top;width:300px;line-height:1em}
+</style>
+<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3.min.js"></script>
+<script src="js/jquery.js"></script>
+<script>
+$(function(){leaveWord();
+ $("#textbox").focus().bind("keyup","keydown",function(){leaveWord()});
+});
+
+function leaveWord(num){
+ if (!num) num = 140;
+ var leave = num-$("#textbox").val().length;
+ if (leave < 0){
+ $("#tip").html("<b>-" + (-leave) + "</b>");
+ } else{
+ $("#tip").html("<b>" + leave + "</b>");
+ if (leave > 40){
+ $("#tip, #tip b").css("color","#CCC");
+ } else if(leave > 20){
+ $("#tip, #tip b").css("color","#CAA");
+ } else if(leave > 10){
+ $("#tip, #tip b").css("color","#C88");
+ } else if(leave > 0){
+ $("#tip, #tip b").css("color","#C44");
+ } else{
+ $("#tip, #tip b").css("color","#E00");
+ }
+ }
+}
+</script>
+</head>
+
+<body>
+<?php
+ $t = getTwitter();
+ if ( isset($_POST['status']) ){
+ $status = $_POST['status'];
+ if (mb_strlen($status,'utf-8') > 140){
+ $status = mb_substr($status, 0, 140, 'utf-8');
+ }
+ $status .= $_POST['url'];
+ $result = $t->update($status);
+ }
+
+ $text = '';
+
+ if ( isset($_GET['u']) ){
+ $url = $_GET['u'];
+ }
+
+ if ( isset($_GET['t']) ){
+ $title = $_GET['t'];
+ $text = $_GET['t'];
+ }
+
+ if ( isset($_GET['d']) ){
+ $select = $_GET['d'];
+ if ( trim($select) != "" ) $text = $select;
+ }
+
+ $text = $text;
+ $siteUrl = str_replace('share', 'index', 'http://' . $_SERVER ['HTTP_HOST'] . $_SERVER['PHP_SELF']);
+ ?>
+<div id="share">
+
+ <?php if ( !$t->username ){?>
+ <div id="message">Please <a href="login.php" target="_blank">login</a> first.</div>
+ <?php } else if ( isset($_POST['status']) ){
+ if ($result){
+ ?>
+ <div id="message">Successfully shared your stuff on Embr! <a href="javascript:window.close()">Close</a></div>
+ <script type="text/javascript">
+ setTimeout("window.close()",1000);
+ </script>
+ <?php } else{ ?>
+ <div id="message">Failed to share your stuff, please try again. <a href="javascript:window.history.go(-1)">Go Back</a></div>
+ <?php
+ }
+ } else{
+ ?>
+ <form action="share.php" method="post">
+ <table>
+ <tr>
+ <td colspan="2"><h2>Share to Embr</h2><span id="tip"><b>140</b></span></td>
+ </tr>
+ <tr>
+ <td><input type="text" name="url" id="url" disabled="ture" value="<?php echo $url?>"/></td>
+ </tr>
+ <tr>
+ <td><textarea name="status" id="textbox"><?php echo $text?> <?php if (strlen($url)>30) echo urlshorten($url); else echo $url ?></textarea></td>
+ </tr>
+ <tr>
+ <td>
+ <input class="more round" id="shareBtn" type="submit" value="Share" />
+ </td>
+ </tr>
+ </table>
+ </form>
+ <?php } ?>
+</div>
+</body>
+</html>
+++ /dev/null
-<?php\r
-include('common.php');\r
-echo req('https://twitter.com/users/'.$_GET['t'].'_available?'.$_GET['t'].'='.urlencode($_GET['v']));\r
-?>\r
+++ /dev/null
-<?php\r
-function req($url, $data=false, $cert=false) {\r
- $c = curl_init();\r
- curl_setopt_array($c, array(\r
- CURLOPT_URL => $url,\r
- CURLOPT_HTTPHEADER => array( 'User-Agent: Mozilla/5.0 (Windows NT 5.1; U; zh-cn; rv:1.8.1) Gecko/20091102 Firefox/3.5.5' ),\r
- CURLOPT_RETURNTRANSFER => true,\r
- CURLOPT_FOLLOWLOCATION => true,\r
- CURLOPT_FRESH_CONNECT => true,\r
- CURLOPT_DNS_USE_GLOBAL_CACHE => true\r
- ));\r
- if (!strpos($url, 'https')) {\r
- if ($cert) {\r
- curl_setopt_array($c, array(\r
- CURLOPT_SSL_VERIFYPEER => true,\r
- CURLOPT_SSL_VERIFYHOST => 2,\r
- CURLOPT_CAINFO, getcwd().$cert\r
- ));\r
- } else {\r
- curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);\r
- }\r
- }\r
- if ($data) {\r
- curl_setopt_array($c, array(\r
- CURLOPT_POST => 1,\r
- CURLOPT_POSTFIELDS => $data\r
- ));\r
- }\r
- $r = curl_exec($c);\r
- curl_close($c);\r
- return $r;\r
-}\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-include('common.php');\r
-header('Content-Type: image/jpeg');\r
-echo req('https://api-secure.recaptcha.net/image?c='.$_GET['c']);\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-include('common.php');\r
-\r
-function between($str, $strStart, $strEnd) {\r
- $posStart = strpos($str, $strStart);\r
- $posEnd = strpos($str, $strEnd, $posStart);\r
- return substr($str, $posStart + strlen($strStart), $posEnd - $posStart - strlen($strStart));\r
-}\r
-\r
-if ($_SERVER['REQUEST_METHOD'] == 'GET') {\r
- $twitter = req('https://twitter.com/signup', false, false);\r
- $recaptha_params = between($twitter, 'https://api-secure.recaptcha.net/challenge', '">');\r
- $recaptcha = req('https://api-secure.recaptcha.net/challenge'.$recaptha_params, false, false);\r
- \r
- $auth_key = between($twitter, '<input name="authenticity_token" type="hidden" value="', '" />');\r
- $challenge = between($recaptcha, "challenge : '", "',");\r
- echo \r
-'<!doctype html>\r
-<html>\r
- <head>\r
- <title>Let\'s tear down this wall!</title>\r
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\r
- <link href="style.css" media="screen" rel="stylesheet" type="text/css" />\r
- </head>\r
- <body>\r
- <form action="'.$_SERVER["REQUEST_URI"].'" method="POST">\r
- <input name="authenticity_token" type="hidden" value="'.$auth_key.'" />\r
- <input id="follow" name="follow" type="hidden" />\r
- <input name="recaptcha_challenge_field" type="hidden" value="'.$challenge.'" />\r
- <p>\r
- <label for="user_name">姓名(可以为中文)</label><br/>\r
- <input autocomplete="off" class="text_field" id="user_name" name="user[name]" size="30" type="text" /><span></span>\r
- <p>\r
- <p>\r
- <label for="user_screen_name">用户名(用于登录,只能是英文字母、数字及下划线的组合)</label><br/>\r
- <input autocomplete="off" class="text_field" id="user_screen_name" maxlength="15" name="user[screen_name]" size="15" type="text" /><span></span>\r
- </p>\r
- <p>\r
- <label for="user_user_password">密码(至少六位)</label><br/>\r
- <input autocomplete="off" class="text_field" id="user_user_password" name="user[user_password]" size="30" type="password" /><span></span>\r
- </p>\r
- <p>\r
- <label for="user_email">邮箱(请填写真实邮箱,注册成功后会收到注册邮件)</label><br/>\r
- <input autocomplete="off" class="text_field" id="user_email" name="user[email]" size="30" type="text" /><span></span>\r
- </p>\r
- <input name="user[send_email_newsletter]" type="hidden" value="1" />\r
- <p>\r
- <label for="recaptcha_response_field">输入下面的两个单词(以半角空格分开)</label><br/>\r
- <img src="image.php?c='.$challenge.'" alt="recaptcha" /><br/> \r
- <input type="text" id="recaptcha_response_field" name="recaptcha_response_field" class="text_field">\r
- </p>\r
- <input name="user[send_email_newsletter]" type="hidden" value="0" />\r
- <p><input alt="我同意。创建我的账号。" class="btn btn-m" id="user_create_submit" name="commit" onclick="this.disabled=true,this.form.submit();" type="submit" value="创建账号" /></p>\r
- </form>\r
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>\r
- <script type="text/javascript" src="main.js"></script>\r
- </body>\r
-</html>';\r
-} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {\r
- $error_msg = false;\r
- $fields = array( 'name', 'screen_name', 'user_password', 'email' );\r
- foreach ($fields as $field) {\r
- if (!strcmp($_POST['user'][$field], '')) {\r
- $error_msg = '所有选项均为必填。';\r
- break;\r
- }\r
- }\r
- if (!$error_msg && strlen($_POST['user']['user_password']) < 6) {\r
- $error_msg = '密码长度不够。';\r
- }\r
-\r
- if (!$error_msg) {\r
- $r = req('https://twitter.com/account/create', @file_get_contents('php://input'), false); \r
- $err_msg = array(\r
- 'You can\'t do that right now.' => '出现未知错误。',\r
- 'Please try to match the 2 words shown above' => '验证码输入错误。',\r
- 'has already been taken' => '用户名或邮箱已有人使用。',\r
- 'is not a valid email address' => '邮箱格式不正确。'\r
- );\r
- foreach ($err_msg as $k => $v) {\r
- if (strpos($r, $k) !== false) {\r
- $error_msg = $v;\r
- break;\r
- }\r
- }\r
- }\r
- if (!$error_msg) {\r
- echo '注册成功,请到注册的邮箱中查收邮件。';\r
- } else {\r
- echo $error_msg.'请返回<a href="'.$_SERVER["REQUEST_URI"].'">注册页面</a>重试。';\r
- }\r
-}\r
-?>\r
+++ /dev/null
-(function() {\r
- \r
- var translation = {\r
- 'Username has already been taken' : '用户名已经有人使用',\r
- "Only use letters, numbers and '_'" : '只能使用英文字母、数字及下划线',\r
- 'Email has already been taken.' : '邮箱已经有人使用'\r
- }\r
-\r
- var err = function(textbox, msg) {\r
- textbox.parent().find('span').addClass('error').html(msg);\r
- }\r
- \r
- var ok = function(textbox) {\r
- textbox.parent().find('span').removeClass('error').html('<img src="check.gif" alt="ok" />');\r
- }\r
- \r
- var reEmpty = /^\s*$/;\r
- var reEmail = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;\r
-\r
- var urlencode = function(str) {\r
- return escape(str).replace('+', '%2B').replace('%20', '+').replace('*', '%2A').replace('/', '%2F').replace('@', '%40');\r
- }\r
- \r
- $('#user_name').blur(function() {\r
- var self = $(this);\r
- if (reEmpty.test(self.val())) {\r
- err(self, '姓名不能为空');\r
- return;\r
- }\r
- ok(self);\r
- });\r
- \r
- $('#user_screen_name').blur(function() {\r
- var self = $(this);\r
- if (reEmpty.test(self.val())) {\r
- err(self, '用户名不能为空');\r
- return;\r
- }\r
- $.getJSON('available.php?t=username&v=' + escape(self.val()), function(data) {\r
- var span = self.parent().find('span');\r
- if (data.valid) {\r
- ok(self);\r
- } else {\r
- err(self, translation[data.msg] || data.msg);\r
- }\r
- });\r
- });\r
-\r
- $('#user_email').blur(function() {\r
- var self = $(this);\r
- var email = self.val();\r
- if (!reEmail.test(email)) {\r
- err(self, '输入的邮箱地址不合法');\r
- return;\r
- }\r
- if (reEmpty.test(email)) {\r
- err(self, '邮箱不能为空');\r
- return;\r
- }\r
- $.getJSON('available.php?t=email&v=' + urlencode(email), function(data) {\r
- var span = self.parent().find('span');\r
- if (data.valid) {\r
- ok(self);\r
- } else {\r
- err(self, translation[data.msg] || data.msg);\r
- }\r
- });\r
- });\r
- \r
- $('#user_user_password').blur(function() {\r
- var self = $(this);\r
- if (self.val().length <= 6) {\r
- err(self, '密码长度不能小于6位');\r
- return;\r
- }\r
- ok(self);\r
- });\r
-\r
-})();\r
+++ /dev/null
-body { font-family: Tahoma,Arial,sans-serif; font-size: 13px; }\r
-form { border: 20px solid #EBEBEB; width: 450px; margin: auto; padding: 5px 20px; }\r
-p { clear: both; }\r
-p label { width: 100%; text-align: left; font-weight: bold; }\r
-p input.text_field { width: 200px; }\r
-p span { margin-left: 20px; }\r
-.error { color: #FF0000; }
\ No newline at end of file
}
$user = $status->user;
$date = format_time($status->created_at);
- $text = formatEntities(&$status->entities,$status->text);
+ $text = formatEntities($status->entities,$status->text);
} else {
header('location: error.php');exit();
}
.status_body {display:block;font-size:2em;line-height:30px;margin-left:58px;overflow:hidden;position:relative}
.timeline li {cursor:default;margin:0px;overflow:hidden;padding:10px;position:relative}
.status_author, .rank_img {left:10px;position:absolute;top:15px;width:50px}
+.retweet_info {color:#999;display:block;font-size:11px;margin:0;text-align:left;width:100%}
</style>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
+<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3.min.js"></script>
<script src="js/jquery.js"></script>
<script src="js/mediaPreview.js"></script>
<script src="js/public.js"></script>
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="profile.php">Profile</a></li>
- <li><a href="browse.php">Public</a></li>
<li><a href="setting.php">Settings</a></li>
<li><a href="logout.php">Logout</a></li>
</ul>
</span>
<span class="status_body">
<span class="status_id"><?php echo $statusid ?></span>
- <span class="status_word"><a class="user_name" href="user.php?id=<?php echo $user->screen_name ?>"><?php echo $user->screen_name ?></a> <span class="tweet"><?php echo $text ?></span></span>
+ <span class="status_word"><a class="user_name" href="user.php?id=<?php echo $user->screen_name ?>" id="<?php echo $user->screen_name ?>"><?php if ($_COOKIE['shownick']=='true') echo $user->name; else echo $user->screen_name; ?></a> <span class="tweet"><?php echo $text ?></span></span>
<span class="status_info">
<?php if ($status->in_reply_to_status_id_str) {?><span class="in_reply_to"> <a href="status.php?id=<?php echo $status->in_reply_to_status_id_str ?>">in reply to <?php echo $status->in_reply_to_screen_name?></a></span> <?php }?>
<span class="source">from <?php echo $status->source ?></span>
<span class="date"><a href="status.php?id=<?php echo $statusid ?>" id="<?php echo $date?>" target="_blank"><?php echo date('Y-m-d H:i:s', $date); ?></a></span>
</span>
+ <?php if ($status->retweet_count>0) { ?>
+ <span class="retweet_info">Retweeted by</span>
+ <?php
+ include ('lib/timeline_format.php');
+ echo getRetweeters($status->id_str, 100);
+ }
+ ?>
</span>
</li>
</ol>
-/*Theme 9 from Twitter.com*/\r
+/*Theme 9 from Twitter.com*/
body{background:#1A1B1F url(http://s3.amazonaws.com/twitter_production/images/themes/theme9/bg.gif) fixed no-repeat top left}a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#2FC2EF}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#666}#side_base{border-left:1px solid #181A1E;background-color:#252429}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#3D3C41}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#252429!important}#side .actions,#side .promo{border:1px solid #181A1E}#side div.section-header h3{border-bottom:1px solid #181A1E}#side hr{background:#181A1E;color:#181A1E}ul.sidebar-menu li.loading a{background:#3D3C41 url(img/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(img/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(img/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1257465343/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #181A1E}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #181A1E!important}nav:hover{box-shadow:0 0 10px #2FC2EF;-webkit-box-shadow:0 0 10px #2FC2EF}
\ No newline at end of file
-/*theme 19 from twitter.com*/\r
+/*theme 19 from twitter.com*/
body{background:#FFF04D url(http://s3.amazonaws.com/twitter_production/images/themes/theme19/bg.gif) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #fff8ad}#side_base{border-left:1px solid #fff8ad;background-color:#f6ffd1}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#f6ffd1!important}#side .actions,#side .promo{border:1px solid #fff8ad}#side div.section-header h3{border-bottom:1px solid #fff8ad}#side p.sidebar-location{border-bottom:1px dotted #fff8ad}#side hr{background:#fff8ad;color:#fff8ad}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #fff8ad}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #fff8ad!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#09C}nav:hover{box-shadow:0 0 10px #09C;-webkit-box-shadow:0 0 10px #09C}
\ No newline at end of file
-/*theme 20 #red from twitter.com*/\r
+/*theme 20 #red from twitter.com*/
body{background:#BF1238 url(http://s3.amazonaws.com/twitter_production/images/themes/theme20/bg.png) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #FFF}#side_base{border-left:1px solid #FFF;background-color:#EFEFEF}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#EFEFEF!important}#side .actions,#side .promo{border:1px solid #FFF}#side div.section-header h3{border-bottom:1px solid #FFF}#side p.sidebar-location{border-bottom:1px dotted #FFF}#side hr{background:#FFF;color:#FFF}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #FFF}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #FFF!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#BF1238}nav:hover{box-shadow:0 0 10px #BF1238;-webkit-box-shadow:0 0 10px #BF1238}
\ No newline at end of file
-/*Storm theme by disinfeqt*/\r
+/*Storm theme by disinfeqt*/
body{background:#969696 url(../themes/img/01602_sandringhambeach_1440x900.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#424242}.unconfirmed-email-banner{border-bottom:solid 1px #A6A6A6}#side_base{border-left:1px solid #A6A6A6;background-color:#E2E2E2}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#E2E2E2!important}#side .actions,#side .promo{border:1px solid #A6A6A6}#side div.section-header h3{border-bottom:1px solid #A6A6A6}#side p.sidebar-location{border-bottom:1px dotted #A6A6A6}#side hr{background:#A6A6A6;color:#A6A6A6}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #A6A6A6}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #A6A6A6!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#690200}nav:hover{box-shadow:0 0 10px #690200;-webkit-box-shadow:0 0 10px #690200}
\ No newline at end of file
-/*City theme by disinfeqt*/\r
+/*City theme by disinfeqt*/
body{background-size: 100% 100%;background:#969696 url(../themes/img/01500_iceonthelake_1440x900.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#3B3B3B}.unconfirmed-email-banner{border-bottom:solid 1px #BFFEFF}#side_base{border-left:1px solid #BFFEFF;background-color:#EDEDED}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#EDEDED!important}#side .actions,#side .promo{border:1px solid #BFFEFF}#side div.section-header h3{border-bottom:1px solid #BFFEFF}#side p.sidebar-location{border-bottom:1px dotted #BFFEFF}#side hr{background:#BFFEFF;color:#BFFEFF}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #BFFEFF}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #BFFEFF!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#009294}nav:hover{box-shadow:0 0 10px #009294;-webkit-box-shadow:0 0 10px #009294}
\ No newline at end of file
-/*Cosmos Theme by disinfeqt\r
-Image (c) Apple Inc*/\r
+/*Cosmos Theme by disinfeqt
+Image (c) Apple Inc*/
body{background:#000 url(http://static.colourlovers.com/images/themeleon/twitter/themes/0/0/17-bg.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#636363}.unconfirmed-email-banner{border-bottom:solid 1px #DEDEDE}#side_base{border-left:1px solid #DEDEDE;background-color:#2B2B2B}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#2B2B2B!important}#side .actions,#side .promo{border:1px solid #DEDEDE}#side div.section-header h3{border-bottom:1px solid #DEDEDE}#side p.sidebar-location{border-bottom:1px dotted #DEDEDE}#side hr{background:#DEDEDE;color:#DEDEDE}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #DEDEDE}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #DEDEDE!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#006A87}nav:hover{box-shadow:0 0 10px #006A87;-webkit-box-shadow:0 0 10px #006A87}
\ No newline at end of file
-/*Pride (Rainbow) Theme by disinfeqt\r
-Loving you ain't my fault, is it? */\r
-body{background:#000 url(../themes/img/rainbow.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#525252}.unconfirmed-email-banner{border-bottom:solid 1px #333}#side_base{border-left:1px solid #333;background-color:#000}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#000!important}#side .actions,#side .promo{border:1px solid #333}#side div.section-header h3{border-bottom:1px solid #333}#side p.sidebar-location{border-bottom:1px dotted #333}#side hr{background:#333;color:#333}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #333}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #333!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug{color:#4F4F4F}\r
-#side_name{background:url("../themes/img/pride_flag.png") no-repeat scroll 165px 4px transparent}\r
+/*Pride (Rainbow) Theme by disinfeqt
+Loving you ain't my fault, is it? */
+body{background:#000 url(../themes/img/rainbow.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#525252}.unconfirmed-email-banner{border-bottom:solid 1px #333}#side_base{border-left:1px solid #333;background-color:#000}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#000!important}#side .actions,#side .promo{border:1px solid #333}#side div.section-header h3{border-bottom:1px solid #333}#side p.sidebar-location{border-bottom:1px dotted #333}#side hr{background:#333;color:#333}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #333}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #333!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug{color:#4F4F4F}
+#side_name{background:url("../themes/img/pride_flag.png") no-repeat scroll 165px 4px transparent}
nav:hover{box-shadow:0 0 10px #4F4F4F;-webkit-box-shadow:0 0 10px #4F4F4F}
\ No newline at end of file
-/*Drop Bombs by disinfeqt*/\r
+/*Drop Bombs by disinfeqt*/
body{background:#1F1F1F url(../themes/img/drop_bombs.png) fixed no-repeat}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#75715E}.unconfirmed-email-banner{border-bottom:solid 1px #000}#side_base{border-left:1px solid #000;background-color:#1F1F1F}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#373737}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#1F1F1F!important}#side .actions,#side .promo,#design .side-section{border:1px solid #000}#side div.section-header h3{border-bottom:1px solid #000}#side p.sidebar-location{border-bottom:1px dotted #000}#side hr{background:#000;color:#000}ul.sidebar-menu li.loading a{background:#373737 url(https://s3.amazonaws.com/twitter_production/a/1267486213/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1267486213/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1267486213/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1267486213/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #000}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #000!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,.tweet-label a:hover,#side_name{color:#858585}nav:hover{box-shadow:0 0 10px #858585;-webkit-box-shadow:0 0 10px #858585}}
\ No newline at end of file
-/*disinfeqt's Monokai Python Style*/\r
+/*disinfeqt's Monokai Python Style*/
body{background:#272822 url(../themes/img/bg.py.png) fixed no-repeat top left}a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#66D8EF}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#75715E}#side_base{border-left:1px solid #F92673;background-color:#272822}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#3F403A}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#272822!important}#side .actions,#side .promo{border:1px solid #F92673}#side div.section-header h3{border-bottom:1px solid #F92673}#side hr{background:#F92673;color:#F92673}ul.sidebar-menu li.loading a{background:#3F403A url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #F92673}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #F92673!important}nav:hover{box-shadow:0 0 10px #66D8EF;-webkit-box-shadow:0 0 10px #66D8EF}
\ No newline at end of file
-/*Twitter Classic*/\r
-body{background:#9AE4E8 url(http://s3.amazonaws.com/twitter_production/images/themes/theme16/bg.gif) fixed no-repeat top left}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu li.active a,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}#side_base{border-left:1px solid #BDDCAD;background-color:#DFC}ul.sidebar-menu li.active a,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#EDFFDC}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#DFC!important}#side .actions,#side .promo{border:1px solid #BDDCAD}#side div.section-header h3{border-bottom:1px solid #BDDCAD}#side hr{background:#BDDCAD;color:#BDDCAD}ul.sidebar-menu li.loading a{background:#EDFFDC url(img/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(img/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(img/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #BDDCAD}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #BDDCAD!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#0084B4}nav:hover{box-shadow:0 0 10px #0084B4;-webkit-box-shadow:0 0 10px #0084B4}\r
+/*Twitter Classic*/
+body{background:#9AE4E8 url(http://s3.amazonaws.com/twitter_production/images/themes/theme16/bg.gif) fixed no-repeat top left}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu li.active a,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}#side_base{border-left:1px solid #BDDCAD;background-color:#DFC}ul.sidebar-menu li.active a,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#EDFFDC}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#DFC!important}#side .actions,#side .promo{border:1px solid #BDDCAD}#side div.section-header h3{border-bottom:1px solid #BDDCAD}#side hr{background:#BDDCAD;color:#BDDCAD}ul.sidebar-menu li.loading a{background:#EDFFDC url(img/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(img/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(img/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #BDDCAD}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #BDDCAD!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#0084B4}nav:hover{box-shadow:0 0 10px #0084B4;-webkit-box-shadow:0 0 10px #0084B4}
/*Do you miss old times? XD*/
\ No newline at end of file
-/*Pink*/\r
+/*Pink*/
body{background:#F69 url(http://s3.amazonaws.com/twitter_production/images/themes/theme11/bg.gif) fixed repeat top left}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#362720}#side_base{border-left:1px solid #C36;background-color:#E5507E}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#FD6896}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#E5507E!important}#side .actions,#side .promo{border:1px solid #C36}#side div.section-header h3{border-bottom:1px solid #C36}#side hr{background:#C36;color:#C36}ul.sidebar-menu li.loading a{background:#FD6896 url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #C36}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #C36!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#B40B43}nav:hover{box-shadow:0 0 10px #B40B43;-webkit-box-shadow:0 0 10px #B40B43}
\ No newline at end of file
-/*by @lgsoltek*/\r
+/*by @lgsoltek*/
body{background:#F7AD71}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#873800}#side_base{border-left:1px solid #D4A72A;background-color:#D4A386}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#E8B79A}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#D4A386!important}#side .actions,#side .promo{border:1px solid #D4A72A}#side div.section-header h3{border-bottom:1px solid #D4A72A}#side hr{background:#D4A72A;color:#D4A72A}ul.sidebar-menu li.loading a{background:#E8B79A url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #D4A72A}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #D4A72A!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#D94100}nav:hover{box-shadow:0 0 10px #D94100;-webkit-box-shadow:0 0 10px #D94100}
\ No newline at end of file
-/*by @lgsoltek*/\r
+/*by @lgsoltek*/
body{background:#292945;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#6F7194}#side_base{border-left:1px solid #F9E6FC;background-color:#0E0F21}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#262739}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#0E0F21!important}#side .actions,#side .promo{border:1px solid #F9E6FC}#side div.section-header h3{border-bottom:1px solid #F9E6FC}#side p.sidebar-location{border-bottom:1px dotted #F9E6FC}#side hr{background:#F9E6FC;color:#F9E6FC}ul.sidebar-menu li.loading a{background:#262739 url(https://s3.amazonaws.com/twitter_production/a/1260817727/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1260817727/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1260817727/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1260817727/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #F9E6FC}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #F9E6FC!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#6B5B78}nav:hover{box-shadow:0 0 10px #6B5B78;-webkit-box-shadow:0 0 10px #6B5B78}
\ No newline at end of file
-/*theme 13 from twitter.com*/\r
+/*theme 13 from twitter.com*/
body{background:#B2DFDA url(http://s3.amazonaws.com/twitter_production/images/themes/theme13/bg.gif) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #eee}#side_base{border-left:1px solid #eee;background-color:#fff}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#fff!important}#side .actions,#side .promo{border:1px solid #eee}#side div.section-header h3{border-bottom:1px solid #eee}#side p.sidebar-location{border-bottom:1px dotted #eee}#side hr{background:#eee;color:#eee}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #eee}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #eee!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#93A644}nav:hover{box-shadow:0 0 10px #93A644;-webkit-box-shadow:0 0 10px #93A644}
\ No newline at end of file
-/*theme 15 from twitter.com*/\r
+/*theme 15 from twitter.com*/
body{background:#022330 url(http://s3.amazonaws.com/twitter_production/images/themes/theme15/bg.png) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #a8c7f7}#side_base{border-left:1px solid #a8c7f7;background-color:#C0DFEC}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#C0DFEC!important}#side .actions,#side .promo{border:1px solid #a8c7f7}#side div.section-header h3{border-bottom:1px solid #a8c7f7}#side p.sidebar-location{border-bottom:1px dotted #a8c7f7}#side hr{background:#a8c7f7;color:#a8c7f7}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #a8c7f7}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #a8c7f7!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#0084B4}nav:hover{box-shadow:0 0 10px #0084B4;-webkit-box-shadow:0 0 10px #0084B4}
\ No newline at end of file
-/*theme 18 from twitter.com*/\r
+/*theme 18 from twitter.com*/
body{background:#ACDED6 url(http://s3.amazonaws.com/twitter_production/images/themes/theme18/bg.gif) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #EEE}#side_base{border-left:1px solid #EEE;background-color:#F6F6F6}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#F6F6F6!important}#side .actions,#side .promo{border:1px solid #EEE}#side div.section-header h3{border-bottom:1px solid #EEE}#side p.sidebar-location{border-bottom:1px dotted #EEE}#side hr{background:#EEE;color:#EEE}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #EEE}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #EEE!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#038543}nav:hover{box-shadow:0 0 10px #038543;-webkit-box-shadow:0 0 10px #038543}
\ No newline at end of file
-/*Minimal Theme Inspired by @Ratoo*/\r
+/*Minimal Theme Inspired by @Ratoo*/
body{background:#FFF}a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#000;}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#606060;}#side_base{border-left:1px solid gray;background-color:#FFF;}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#F7F7F7;}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#FFF!important;}#side .actions,#side .promo{border:1px solid gray;}#side div.section-header h3{border-bottom:1px solid gray;}#side hr{background:gray;color:gray;}nav:hover{box-shadow:0 0 1px gray;-webkit-box-shadow:0 0 1px gray}
\ No newline at end of file
header('location: error.php');exit();
}
- $p = 1;
- if (isset($_GET['p'])) {
- $p = (int) $_GET['p'];
- if ($p <= 0) $p = 1;
- }
-
$t = getTwitter();
$userid = $_GET['id'];
+ $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+ $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
if (isset($_GET['fav'])) {
- $statuses = $t->getFavorites($p, $userid);
+ $statuses = $t->getFavorites($userid, $since_id, $max_id);
} else {
- $statuses = $t->userTimeline($p, $userid);
+ $statuses = $t->userTimeline($userid, $since_id, $max_id);
}
if ($statuses === false) {
header('location: error.php');exit;
}
+ if ($t->http_code == 429) {
+ $apiout = true;
+ } else {
+ $aptout = false;
+ }
+
$user = $t->showUser($userid);
if (strcasecmp($userid,$t->username) == 0) {header('location: profile.php');exit();}
$userinfo['friends_count'] = $user->friends_count;
$userinfo['statuses_count'] = $user->statuses_count;
$userinfo['followers_count'] = $user->followers_count;
- $userinfo['url'] = $user->url;
+ $userinfo['url'] = $user->entities->url->urls[0]->expanded_url ? $user->entities->url->urls[0]->expanded_url : $user->url;
$userinfo['description'] = formatText($user->description);
$userinfo['location'] = $user->location;
$userinfo['date_joined'] = date('Y-m-d', format_time($user->created_at)); //from dabr
$empty = count($statuses) == 0? true: false;
if ($empty) {
echo "<div id=\"empty\">No tweet to display.</div>";
+ } else if ($apiout) {
+ echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
} else {
$output = '<ol class="timeline" id="allTimeline">';
+ $firstid = false;
+ $lastid = false;
foreach ($statuses as $status) {
if (isset($status->retweeted_status)) {
$output .= format_retweet($status);
} else {
- $output .= format_timeline($status,$t->username);
+ $output .= format_timeline($status,$t->username);
}
+ if(!$firstid)
+ $firstid = $status->id_str;
+ $lastid = $status->id_str;
}
+ $lastid = bcsub($lastid, "1");
+
$output .= "</ol><div id=\"pagination\">";
if ($_GET['fav'] == true) {
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"user.php?id=$userid&fav=true&p=" . ($p-1) . "\">Back</a>";
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"user.php?id=$userid&fav=true&p=" . ($p+1) . "\">Next</a>";
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"user.php?id=$userid&fav=true&since_id={$firstid}\">Back</a>";
+ $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"user.php?id=$userid&fav=true&max_id={$lastid}\">Next</a>";
} else {
- if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"user.php?id=$userid&p=" . ($p-1) . "\">Back</a>";
- if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"user.php?id=$userid&p=" . ($p+1) . "\">Next</a>";
+ $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"user.php?id=$userid&since_id={$firstid}\">Back</a>";
+ $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"user.php?id=$userid&max_id={$lastid}\">Next</a>";
}
$output .= "</div>";
echo $output;