-
-
Save ncammarata/524889 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;(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:/(?:[!?.,:;'"]|(?:&|&)(?: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