Skip to content

Instantly share code, notes, and snippets.

@ncammarata
Forked from boazsender/index.html
Created August 15, 2010 00:35
Show Gist options
  • Save ncammarata/524889 to your computer and use it in GitHub Desktop.
Save ncammarata/524889 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html>
<head>
<title>Twitter Search Plugin Demo Page</title>
<script src="http://code.jquery.com/jquery.js"></script>
<script src="twitterSearch.jQuery.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; 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 from bocoup
// and display 2 results
$('#bocoup').twitter('bocoup', 2);
//Call twitter search for tweets from boazsender
// with the terms jquery or bocoup
// and display 12 results
$('#boazsender').twitter({
ands : 'jquery bocoup', // 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 : 12 // Results per page
});
//Call twitter search for tweets asdfghjklkjs
// and display 0 results
// and set a special message to display if no results are found
$('#whatever').twitter('whatever', 0, 'Whoops, no results');
});
</script>
<link href="twitterSearch.jQuery.css" media="screen" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Twitter:</h1>
<h2>@Bocoup:</h2>
<div id="bocoup" 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>@whatever:</h2>
<div id="whatever" class="twitter-posts">
<h3>Loading Tweets From The Cloud With AJAX HTML5...</h3>
</div>
</body>
</html>
;(function ($) {
/*
* Twitter Search Plugin twitterSearch.jQuery.js
*
* Written by Boaz Sender
* Input and refactoring form Rick Waldron and Nick Cammarata
*
* JavaScript Linkify - v0.3 - 6/27/2009
* http://benalman.com/projects/javascript-linkify/
*
* Copyright (c) 2009 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*
* Some regexps adapted from http://userscripts.org/scripts/review/7122
*/
var linkify = (function(){var k="[a-z\\d.-]+://",h="(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])",c="(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+",n="(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)",f="(?:"+c+n+"|"+h+")",o="(?:[;/][^#?<>\\s]*)?",e="(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?",d="\\b"+k+"[^<>\\s]+",a="\\b"+f+o+e+"(?!\\w)",m="mailto:",j="(?:"+m+")?[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"+f+e+"(?!\\w)",l=new RegExp("(?:"+d+"|"+a+"|"+j+")","ig"),g=new RegExp("^"+k,"i"),b={"'":"`",">":"<",")":"(","]":"[","}":"{","B;":"B+","b:":"b9"},i={callback:function(q,p){return p?'<a href="'+p+'" title="'+p+'">'+q+"</a>":q},punct_regexp:/(?:[!?.,:;'"]|(?:&|&amp;)(?:lt|gt|quot|apos|raquo|laquo|rsaquo|lsaquo);)$/};return function(u,z){z=z||{};var w,v,A,p,x="",t=[],s,E,C,y,q,D,B,r;for(v in i){if(z[v]===undefined){z[v]=i[v]}}while(w=l.exec(u)){A=w[0];E=l.lastIndex;C=E-A.length;if(/[\/:]/.test(u.charAt(C-1))){continue}do{y=A;r=A.substr(-1);B=b[r];if(B){q=A.match(new RegExp("\\"+B+"(?!$)","g"));D=A.match(new RegExp("\\"+r,"g"));if((q?q.length:0)<(D?D.length:0)){A=A.substr(0,A.length-1);E--}}if(z.punct_regexp){A=A.replace(z.punct_regexp,function(F){E-=F.length;return""})}}while(A.length&&A!==y);p=A;if(!g.test(p)){p=(p.indexOf("@")!==-1?(!p.indexOf(m)?"":m):!p.indexOf("irc.")?"irc://":!p.indexOf("ftp.")?"ftp://":"http://")+p}if(s!=C){t.push([u.slice(s,C)]);s=E}t.push([A,p])}t.push([u.substr(s)]);for(v=0;v<t.length;v++){x+=z.callback.apply(window,t[v])}return x||u}})(),
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) {
tag = tag.replace('#','%23')
return tag.link('http://search.twitter.com/search?q='+tag);
});
},
opts = {
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
};
$.fn.twitter = function (options, limit, notFoundText) {
// If text to display if no results are found is set, use it, otherwise, set it
notFoundText = notFoundText ? notFoundText : 'No results found on twitter';
// If a limit is set, add it to the query object
opts.rpp = limit ? limit : opts.rpp;
// Check that options is an object, and merge it with the defaults, otherwise, use the options as a username
typeof options == 'object' ? opts = $.extend(opts, options) : opts.from = options;
// Serialize the query object
var query = $.param(opts);
return this.each(function () {
// Cache `this`
var $this = $(this);
// Call Twitter JSONP
$.getJSON('http://search.twitter.com/search.json?q=&'+query+'&callback=?', function(tweets){
// Create and cache a new UL
var $tweets = $('<ul>');
if(tweets.results && tweets.results.length){
// Iterate over returned tweets
for(var i in tweets.results){
var tweet = tweets.results[i], // Cache tweet content
$tweet = $('<li>'); // Create and cache new LI
// Make the avatar, and append it to the $tweet
$('<a/>', {
href: 'http://twitter.com/' + tweet.from_user,
html: '<img src="' + tweet.profile_image_url + '"/>'
}).appendTo($tweet);
// Make the tweet text, and append it to the $tweet, then to the parent
$('<span>', {
className: 'content',
html: '<strong><a href="http://twitter.com/' + tweet.from_user + '">@' + tweet.from_user + '</a>: ' + mention(linkify(tweet.text)) + '</strong>'
}).appendTo($tweet).parent().appendTo($tweets);
// Append the $tweets to the DOM
$this.html($tweets);
}
} else {
$this.html($('<h3/>', {
className: 'twitterSearch-notFound',
text: notFoundText
}));
}
});
});
};
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment