public
Created — forked from boazsender/index.html

  • Download Gist
index.html
HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
<!DOCTYPE html>
<html>
<head>
<title>Twitter Search Plugin</title>
<script src="http://code.jquery.com/jquery.js"></script>
<script src="jquery.twitter.js"></script>
<style type="text/css">
.twitter-posts li {margin-bottom: 10px; font-size: 12px; clear: both; list-style-type:none;}
.twitter-posts li img {float:left; width: 48px; margin:0px 10px 10px 0px;border:1px solid #c2c2c2; -moz-box-shadow: 0px 0px 4px #c2c2c2; -webkit-box-shadow: 0px 0px 4px #c2c2c2; box-shadow: 0px 0px 4px #c2c2c2;}
.twitter-posts li a {text-decoration:none; color: #009;}
hr.space {clear:both; width: 100%; visibility:hidden;}
</style>
<script type="text/javascript">
$(function(){
// Call twitter search for tweets including the string 'bocoup loft'
$('#bocoup').twitter('bocoup loft');
 
// Call twitter search for tweets including the string 'omgomg'
// and limit to 5 results
// and don't show tweets with the word 'lol'
// and don't show tweets with an '_' or an 's' in them
// and don't show @replies
// and don't show retweets
// and only show results with links
$('#omg').twitter({
limit : 5, // Number of tweets to get <-- not in twitter api, maps to and supersedes rpp (results per page)
exclusions : '_ s', // Space delimited list of strings to exclude (eg: '_ s gr @b') <-- not in twitter api, done in plugin
replies : false, // Include mentions <-- not in twitter api, done in plugin
retweets : false, // Include mentions <-- not in twitter api, done in plugin
ors : 'omg', // Any of these words
nots : 'lol' // None of these words
});
 
// Call twitter search for tweets from boazsender
// and limit 5 results
// and set special text to display if none are found
// and don't show @replies
// and don't show retweets
// and list out all the possible options properties for learning!
$('#boazsender').twitter({
limit : 5, // Number of tweets to get <-- not in twitter api, maps to and supersedes rpp (results per page)
exclusions : '@ #', // Space delimited list of strings to exclude (eg: '_ s gr @b') <-- not in twitter api, done in plugin
notFoundText : 'No results found on twitter', // Text to display if no results are found <-- not in twitter api, done in plugin
replies : true, // Include replies? <-- not in twitter api, done in plugin
retweets : true, // Include replies? <-- not in twitter api, done in plugin
ands : '', // All of these words
phrase : '', // This exact phrase
ors : '', // Any of these words
nots : '', // None of these words
tag : '', // This hashtag
lang : '', // Written in language
from : 'boazsender', // From this person
to : '', // To this person
ref : '', // Referencing this person
near : '', // Near this place
within : '', // Within this distance
units : '', // Distance unit (miles or kilometers)
since : '', // Since this date
until : '', // Until this date
tude : '', // Attitude: '?' or ':)' or ':)'
filter : '', // Containing: 'links'
include : '', // Include retweet?: 'retweets'
rpp : 5, // Results per page
q : '' // Plain query
});
 
// Call twitter search for tweets from rwaldron
// and limit 5 results
// and don't show @replies
// and don't show retweets
$('#rwaldron').twitter({
from : 'rwaldron', // From this person
limit : 5, // Number of tweets to get <-- not in twitter api, maps to and supersedes rpp (results per page)
replies : false, // Include replies? <-- not in twitter api, done in plugin
retweets : false // Include replies? <-- not in twitter api, done in plugin
});
 
// Call twitter search for tweets from asdasdhdajkhjfdasasd
// and limit 5 results
$('#asdasdhdajkhjfdasasd').twitter({
from : 'asdasdhdajkhjfdasasd', // From this person
limit : 0, // Number of tweets to get <-- not in twitter api, maps to and supersedes rpp (results per page)
notFoundText : 'this is special text to sho if no results are found.', // Text to display if no results are found <-- not in twitter api, done in plugin
});
});
</script>
<link href="twitterSearch.jQuery.css" media="screen" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Twitter:</h1>
<h2>'bocoup loft':</h2>
<div id="bocoup" class="twitter-posts">
<h3>Loading Tweets From The Cloud With AJAX HTML5...</h3>
</div>
<hr class="space" />
 
<h2>'omg':</h2>
<div id="omg" class="twitter-posts">
<h3>Loading Tweets From The Cloud With AJAX HTML5...</h3>
</div>
 
<hr class="space" />
<h2>@BoazSender</h2>
<div id="boazsender" class="twitter-posts">
<h3>Loading Tweets From The Cloud With AJAX HTML5...</h3>
</div>
 
<hr class="space" />
 
<h2>@rwaldron</h2>
<div id="rwaldron" class="twitter-posts">
<h3>Loading Tweets From The Cloud With AJAX HTML5...</h3>
</div>
 
<hr class="space" />
 
<h2>@asdasdhdajkhjfdasasd</h2>
<div id="asdasdhdajkhjfdasasd" class="twitter-posts">
<h3>Loading Tweets From The Cloud With AJAX HTML5...</h3>
</div>
 
</body>
</html>
jquery.twitter.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
/*
* Twitter Search Plugin jquery.twitter.js
* http://code.bocoup.com/jquery-twitter-plugin/
*
* Copyright (c) 2010 Bocoup, LLC
* Authors: Boaz Sender, Rick Waldron, Nick Cammarata
* Dual licensed under the MIT and GPL licenses.
* http://code.bocoup.com/license/
*
*/
;(function ($) {
$.getScript('http://github.com/cowboy/javascript-linkify/raw/master/ba-linkify.min.js');
var mention = function(str) {
return str.replace(/[@]+[A-Za-z0-9-_]+/ig, function(username) {
return username.link('http://twitter.com/'+ username.replace('@','') );
});
},
hashtags = function(str) {
return str.replace(/[#]+[A-Za-z0-9-_]+/ig, function(tag) {
return tag.link('http://search.twitter.com/search?q='+tag.replace('#','%23'));
});
};
 
$.twitter = function (options, callback) {
// Fail if the options arg is not set
if ( !options ) {
return false;
}
// Set a temporary default query object
var query,
// Set up a regex to be used later in the case that exclusions have been set
exclusionsExp = new RegExp(false);
// If options is a string use it as standalone query
if(typeof options == 'string'){
query = $.extend({}, $.twitter.opts, {
q: options
});
// Else prepare the options object to be serialized
} else {
// If a limit is set, add it to the query object
options.rpp = options.limit ? options.limit : options.rpp;
 
// If no limit is set, make the limit the rpp
options.limit = options.limit ? options.limit : options.rpp;
 
// If there are exlusions, turn them into a regex string
exclusionsStr = options.exclusions ? options.exclusions.replace(' ', '|') : false;
 
// If there are exlusions, turn the regex string we just made into a RegExp
exclusionsExp = exclusionsStr ? new RegExp(exclusionsStr) : false;
 
// Make a new object that is a merger of the options passed in with the default $.twitter.opts object
// and assign it to the query variable
query = $.extend({}, $.twitter.opts, options);
 
// If there are exclusions, or replies or retweets are set to false, multiply the results to ask for from twitter by ten
// We need to do this so that we have some meat to work with if the exclusions are common
query.rpp = query.exclusions || !query.replies || !query.retweets ? (query.rpp * 10) : query.rpp;
 
}
 
// Call Twitter JSONP
$.getJSON('http://search.twitter.com/search.json?'+$.param(query)+'&callback=?', function(tweets){
callback(tweets, query, exclusionsExp)
});
};
$.fn.twitter = function (options) {
// Fail gracefully if the options arg is not set
// return the jQuery obj so that chaining does not break
if ( !options ) {
return this;
}
// Begin to iterate over the jQuery collection that the method was called on
return this.each(function () {
// Cache `this`
var $this = $(this);
$.twitter(options, function(tweets, query, exclusionsExp){
//Create and cache a new UL
var $tweets = $('<ul>'),
// Create a counter variable to count up how many tweets we have rendered
// unfortunately we have to do this, because exclusions, retweet booleans and replies booleans
// are not supported by the Twitter Search API
limitInt = 0;
 
// If there are results to work with
if (tweets.results && tweets.results.length) {
 
// Iterate over returned tweets
for(var i in tweets.results){
 
// Cache tweet content
var tweet = tweets.results[i],
// Set a variable to determine weather replies are set to false, and if so, weather the tweet starts with a reply
allowReply = !query.replies && tweet.to_user_id ? false : true,
// Set a variable to determine weather retweets are set to false, and if so, weather the tweet starts with a retweet
allowRetweet = !query.retweets && tweet.text.slice(0,2) == 'RT' ? false : true;
 
// Only proceed if allow reply is false
if (!allowReply) {
continue;
}
 
// Only proceed if allow retweet is false
if (!allowRetweet) {
continue;
}
 
// If exlusions set and none of the exlusions is found in the tweet then add it to the DOM
if ( exclusionsExp && exclusionsExp.test(tweet.text) ) {
continue;
}
 
// Create and cache new LI
$('<li/>', {
className : 'tweet'
})
// Make the avatar, and append it to the $tweet
.append($('<a/>', {
href: 'http://twitter.com/' + tweet.from_user,
html: '<img src="' + tweet.profile_image_url + '"/>'
}))
// Make the tweet text, and append it to the $tweet, then to the parent
.append($('<span>', {
className: 'content',
html: '<a href="http://twitter.com/' + tweet.from_user + '">@' + tweet.from_user + '</a>: ' + mention(hashtags(linkify(tweet.text)))
}))
// Append tweet to the $tweets ul
.appendTo($tweets);
 
// Count up our counter variable
limitInt++;
 
// If the counter is equal to the limit, stop rendering tweets
if ( limitInt === query.limit ) {
break;
}
}
 
// Append the $tweets to the DOM
$this.html($tweets);
 
// Else there are no results to work with
} else {
// Update the DOM to reflect that no results were found
$this.html($('<h3/>', {
className: 'twitter-notFound',
text: query.notFoundText
}));
}
});
});
};
 
$.twitter.opts = {
limit : 7, // Number of tweets to get <-- not in twitter api, maps to and supersedes rpp (results per page)
exclusions : '', // Space delimited list of strings to exclude (eg: '_ s gr @b') <-- not in twitter api, done in plugin
notFoundText : 'No results found on twitter', // Text to display if no results are found <-- not in twitter api, done in plugin
replies : true, // Include replies? <-- not in twitter api, done in plugin
retweets : true, // Include replies? <-- not in twitter api, done in plugin
ands : '', // All of these words
phrase : '', // This exact phrase
ors : '', // Any of these words
nots : '', // None of these words
tag : '', // This hashtag
lang : '', // Written in language
from : '', // From this person
to : '', // To this person
ref : '', // Referencing this person
near : '', // Near this place
within : '', // Within this distance
units : '', // Distance unit (miles or kilometers)
since : '', // Since this date
until : '', // Until this date
tude : '', // Attitude: '?' or ':)' or ':)'
filter : '', // Containing: 'links'
include : '', // Include retweet?: 'retweets'
rpp : 5, // Results per page
q : '' // Default query
}
})(jQuery);

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.