<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>James Padolsey&#187; Twitter category &#8211; James Padolsey</title>
	<atom:link href="http://james.padolsey.com/category/twitter/feed/" rel="self" type="application/rss+xml" />
	<link>http://james.padolsey.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 22 Jan 2012 17:04:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>&#8216;tweetFromFile&#8217; PHP Class</title>
		<link>http://james.padolsey.com/twitter/tweetfromfile-php-class/</link>
		<comments>http://james.padolsey.com/twitter/tweetfromfile-php-class/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 21:45:04 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Code Snippets]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Class]]></category>

		<guid isPermaLink="false">http://james.padolsey.com/?p=612</guid>
		<description><![CDATA[This recently created PHP class is part of today's ongoing struggle of trying to create a Twitter 'drip' that will automatically update Twitter at pre-defined intervals with status updates specified in a text file]]></description>
			<content:encoded><![CDATA[<p>This recently created PHP class is part of today&#8217;s ongoing struggle of trying to create a Twitter &#8216;drip&#8217; that will automatically update Twitter at pre-defined intervals with status updates specified in a text file.</p>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span class="co1">// (C) Copyright JAMES PADOLSEY</span>
<span class="kw2">class</span> tweetFromFile <span class="br0">&#123;</span>
&nbsp;
    <span class="kw2">private</span> <span class="re0">$curlHandle</span><span class="sy0">;</span>
    <span class="kw2">private</span> <span class="re0">$updateFile</span><span class="sy0">;</span>
    <span class="kw2">private</span> <span class="re0">$archiveFile</span><span class="sy0">;</span>
&nbsp;
    <span class="kw2">private</span> <span class="kw2">function</span> getNewStatus<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
        <span class="re0">$upcomingTweetsFile</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">files</span><span class="br0">&#91;</span><span class="st_h">'upcoming'</span><span class="br0">&#93;</span><span class="sy0">;</span>
        <span class="re0">$archivedTweetsFile</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">files</span><span class="br0">&#91;</span><span class="st_h">'archive'</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
        <span class="re0">$upcomingTweets_R</span> <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="re0">$upcomingTweetsFile</span><span class="sy0">,</span> <span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="co1">// Get upcoming Tweets:</span>
        <span class="re0">$contents</span> <span class="sy0">=</span> <span class="kw3">fread</span><span class="br0">&#40;</span><span class="re0">$upcomingTweets_R</span><span class="sy0">,</span> <span class="kw3">filesize</span><span class="br0">&#40;</span><span class="re0">$upcomingTweetsFile</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$splitContents</span> <span class="sy0">=</span> <span class="kw3">preg_split</span><span class="br0">&#40;</span><span class="st_h">'/\n/'</span><span class="sy0">,</span> <span class="re0">$contents</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="co1">// ARCHIVE OLD POSTS:</span>
        <span class="re0">$archive</span> <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="re0">$archivedTweetsFile</span><span class="sy0">,</span> <span class="st0">&quot;a&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fwrite</span><span class="br0">&#40;</span><span class="re0">$archive</span><span class="sy0">,</span> <span class="re0">$splitContents</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="co1">// Remove top line from upcoming:</span>
        <span class="re0">$upcomingTweets_W</span> <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="re0">$upcomingTweetsFile</span><span class="sy0">,</span> <span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fwrite</span><span class="br0">&#40;</span><span class="re0">$upcomingTweets_W</span><span class="sy0">,</span> <span class="re0">$splitContents</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="co1">// Clean up</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re0">$upcomingTweets_W</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re0">$upcomingTweets_R</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re0">$archive</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="kw1">return</span> <span class="re0">$splitContents</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw2">public</span> <span class="re0">$files</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'upcoming'</span> <span class="sy0">=&gt;</span> <span class="st_h">''</span><span class="sy0">,</span> <span class="st_h">'archive'</span> <span class="sy0">=&gt;</span> <span class="st_h">''</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re0">$username</span><span class="sy0">,</span> <span class="re0">$password</span><span class="sy0">,</span> <span class="re0">$filename</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">curlHandle</span> <span class="sy0">=</span> curl_init<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">files</span><span class="br0">&#91;</span><span class="st_h">'upcoming'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$filename</span><span class="sy0">;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">files</span><span class="br0">&#91;</span><span class="st_h">'archive'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st_h">'ARCHIVE_'</span> <span class="sy0">.</span> <span class="re0">$filename</span><span class="sy0">;</span>
&nbsp;
        <span class="co1">// Shortcut:</span>
        <span class="re0">$ch</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">curlHandle</span><span class="sy0">;</span>
&nbsp;
        curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_URL<span class="sy0">,</span> <span class="st0">&quot;http://twitter.com/statuses/update.xml&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_CONNECTTIMEOUT<span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span>
        curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_RETURNTRANSFER<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
        curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_POST<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
        curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_USERPWD<span class="sy0">,</span> <span class="st0">&quot;<span class="es4">$username</span>:<span class="es4">$password</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw2">public</span> <span class="kw2">function</span> __destruct<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        curl_close<span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">curlHandle</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw2">public</span> <span class="kw2">function</span> updateStatus<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
        <span class="re0">$status</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getNewStatus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        curl_setopt<span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">curlHandle</span><span class="sy0">,</span> CURLOPT_POSTFIELDS<span class="sy0">,</span> <span class="st0">&quot;status=<span class="es4">$status</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="re0">$result</span> <span class="sy0">=</span> curl_exec<span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">curlHandle</span><span class="br0">&#41;</span><span class="sy0">;</span>	
	<span class="re0">$resultArray</span> <span class="sy0">=</span> curl_getinfo<span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">curlHandle</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$resultArray</span><span class="br0">&#91;</span><span class="st_h">'http_code'</span><span class="br0">&#93;</span> <span class="sy0">==</span> <span class="nu0">200</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">true</span><span class="sy0">;</span>
&nbsp;
        <span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span>
&nbsp;
    <span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">// ==================</span>
<span class="co1">// ===== USAGE ======</span>
<span class="co1">// ==================</span>
&nbsp;
<span class="re0">$tweet</span> <span class="sy0">=</span> <span class="kw2">new</span> tweetFromFile<span class="br0">&#40;</span><span class="st_h">'twitterUsername'</span><span class="sy0">,</span> <span class="st_h">'password'</span><span class="sy0">,</span> <span class="st_h">'textfile.txt'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$success</span> <span class="sy0">=</span> <span class="re0">$tweet</span><span class="sy0">-&gt;</span><span class="me1">updateStatus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$success</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw3">echo</span> <span class="st_h">'Twitter updated!'</span><span class="sy0">;</span>
<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
    <span class="kw3">echo</span> <span class="st_h">'Hmm, an error...'</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>




<p>The class will retrieve each new update from the specified text file. Each update needs to be on a new line; an example text file:</p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Blah blah blah, this is the first update...
And another update!
Third and last update!!! ARGH!</pre></div></div>




<p>The PHP class will remove each update from this file when it&#8217;s added to Twitter so all you need to do is keep adding to the bottom of the file&#8230;</p>

<p>This won&#8217;t do the dripping automatically. You&#8217;ll need to setup a &#8216;cron job&#8217; to request the script at selected intervals (e.g. every two hours). I&#8217;m rubbish at Apache and anything to do with the command line so I haven&#8217;t quite accomplished this part yet&#8230; maybe someone else wants to give it a go? <img src='http://james.padolsey.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://james.padolsey.com/twitter/tweetfromfile-php-class/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Extending jQuery&#8217;s selector capabilities</title>
		<link>http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/</link>
		<comments>http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 15:43:56 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Selectors]]></category>

		<guid isPermaLink="false">http://james.padolsey.com/?p=237</guid>
		<description><![CDATA[I&#8217;m sure you all know that it&#8217;s possible to create plugins and extend various aspects of the jQuery JavaScript library but did you know you could also extend the capabilities of it&#8217;s selector engine?
Well, you can! For example, you might want to add a&#8230;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m sure you all know that it&#8217;s possible to create plugins and extend various aspects of the jQuery JavaScript library but did you know you could also extend the capabilities of it&#8217;s selector engine?</p>
<p>Well, you can! For example, you might want to add a new &#8216;:inline&#8217; selector which will return those elements that are displayed inline. Have a look:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#123;</span>
    inline<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">'display'</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="st0">'inline'</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>



<p>Using the above code, when you want to select elements that are displayed inline you can simply include it within the selector:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span class="br0">&#40;</span><span class="st0">':inline'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Selects ALL inline elements</span>
$<span class="br0">&#40;</span><span class="st0">'a:inline'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Selects ALL inline anchors</span></pre></div></div>



<p>That was a pretty simple example but I&#8217;m sure you can see the endless possibilites that this enables! And, creating a custom jQuery selector couldn&#8217;t really be simpler!
    <span id="more-237"></span>
</p>
<h2>Loaded images selector</h2>
<p>You might want to add a &#8216;loaded&#8217; selector which will work with images, and will return those images that are loaded:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Flag images upon load:</span>
$<span class="br0">&#40;</span><span class="st0">'img'</span><span class="br0">&#41;</span>.<span class="me1">load</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
    $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">'loaded'</span><span class="sy0">,</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Extend expr:</span>
$.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#123;</span>
    loaded<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">'loaded'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Example of usage:</span>
<span class="kw3">alert</span><span class="br0">&#40;</span> <span class="st0">'Images loaded so far: '</span> <span class="sy0">+</span> $<span class="br0">&#40;</span><span class="st0">'img:loaded'</span><span class="br0">&#41;</span>.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>



<h2>Querying element data</h2>
<p>jQuery&#8217;s &#8216;data&#8217; function allows us to add special data to elements without having to pollute global variables or add invalid element attributes. One of the things that jQuery lacks is the capability to easily query elements according to their data. For example, one might decide to flag all elements added dynamically (with jQuery) as &#8216;dom&#8217;:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// New element:</span>
$<span class="br0">&#40;</span><span class="st0">'&lt;img/&gt;'</span><span class="br0">&#41;</span>
    .<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">'dom'</span><span class="sy0">,</span> <span class="kw2">true</span><span class="br0">&#41;</span> <span class="co1">// Flag</span>
    .<span class="me1">appendTo</span><span class="br0">&#40;</span><span class="st0">'body'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Append to DOM</span></pre></div></div>



<p>Currently there&#8217;s <strong>no easy way</strong> to select all elements that have been flagged but what if we added a new &#8216;:data&#8217; selector which could query such information?</p>
<p>Here&#8217;s how we would do it:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Wrap in self-invoking anonymous function:</span>
<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>$<span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp;
    <span class="co1">// Extend jQuery's native ':'</span>
    $.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#123;</span>
&nbsp;
        <span class="co1">// New method, &quot;data&quot;</span>
        data<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>a<span class="sy0">,</span>i<span class="sy0">,</span>m<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
            <span class="kw2">var</span> e <span class="sy0">=</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span> keyVal<span class="sy0">;</span>
&nbsp;
            <span class="co1">// m[3] refers to value inside parenthesis (if existing) e.g. :data(___)</span>
            <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
                <span class="co1">// Loop through properties of element object, find any jquery references:</span>
                <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> x <span class="kw1">in</span> e<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="co2">/jQuery\d+/</span><span class="br0">&#41;</span>.<span class="me1">test</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="kw2">true</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="br0">&#125;</span>
&nbsp;
            <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp;
                <span class="co1">// Split into array (name,value):</span>
                keyVal <span class="sy0">=</span> m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">'='</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
                <span class="co1">// If a value is specified:</span>
                <span class="kw1">if</span> <span class="br0">&#40;</span>keyVal<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
                    <span class="co1">// Test for regex syntax and test against it:</span>
                    <span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="co2">/^\/.+\/([mig]+)?$/</span><span class="br0">&#41;</span>.<span class="me1">test</span><span class="br0">&#40;</span>keyVal<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                        <span class="kw1">return</span>
                         <span class="br0">&#40;</span><span class="kw2">new</span> RegExp<span class="br0">&#40;</span>
                             keyVal<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">substr</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>keyVal<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">lastIndexOf</span><span class="br0">&#40;</span><span class="st0">'/'</span><span class="br0">&#41;</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span>
                             keyVal<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">substr</span><span class="br0">&#40;</span>keyVal<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">lastIndexOf</span><span class="br0">&#40;</span><span class="st0">'/'</span><span class="br0">&#41;</span><span class="sy0">+</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
                          <span class="br0">&#41;</span>.<span class="me1">test</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span>keyVal<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                    <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
                        <span class="co1">// Test key against value:</span>
                        <span class="kw1">return</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span>keyVal<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">==</span> keyVal<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span>
                    <span class="br0">&#125;</span>
&nbsp;
                <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp;
                    <span class="co1">// Test if element has data property:</span>
                    <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span>keyVal<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                        <span class="kw1">return</span> <span class="kw2">true</span><span class="sy0">;</span>
                    <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
                        <span class="co1">// If it doesn't remove data (this is to account for what seems</span>
                        <span class="co1">// to be a bug in jQuery):</span>
                        $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">removeData</span><span class="br0">&#40;</span>keyVal<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                        <span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span>
                    <span class="br0">&#125;</span>
&nbsp;
                <span class="br0">&#125;</span>
            <span class="br0">&#125;</span>
&nbsp;
            <span class="co1">// Strict compliance:</span>
            <span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span>
&nbsp;
        <span class="br0">&#125;</span>
&nbsp;
    <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span>jQuery<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>



<h3>Usage</h3>
<p>Now, selecting elements which have that &#8216;dom&#8217; flag is really easy:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span class="br0">&#40;</span><span class="st0">':data(dom)'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// All elements with 'dom' flag</span>
$<span class="br0">&#40;</span><span class="st0">'div:data(dom)'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// All DIV elements with 'dom' flag</span>
$<span class="br0">&#40;</span><span class="st0">':not(:data(dom))'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// All elements WITHOUT 'dom' flag</span></pre></div></div>



<p>The &#8216;:data&#8217; extension also allows you to query by comparison, for example:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span class="br0">&#40;</span><span class="st0">':data(ABC=123)'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// All elements with a data key of 'ABC' equal to 123</span></pre></div></div>



<p>It also allows you to use regular expressions:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Let's assume we have slightly varying data across a set of elements:</span>
$<span class="br0">&#40;</span><span class="st0">'div'</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="br0">&#123;</span>
    $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">'divInfo'</span><span class="sy0">,</span><span class="st0">'index:'</span> <span class="sy0">+</span> i<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="co1">// Will result in value being 'index:0', 'index:1', 'index:2' etc. etc.</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// We can select all of those DIVs like this:</span>
$<span class="br0">&#40;</span><span class="st0">'div:data(divInfo=/index:<span class="es0">\\</span>d+/)'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Note: It's necessary to use non-literal notation when writing these</span>
<span class="co1">// regular expressions, so if you want to match a real backslash you'd</span>
<span class="co1">// have to use '\\\\'. Similarly if you want to test for all digit's</span>
<span class="co1">// you'd have to use \\d instead of \d.</span></pre></div></div>



<p>Additionally, you can select elements on a basis of whether or not they have ANY data applied to them:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span class="br0">&#40;</span><span class="st0">':data'</span><span class="br0">&#41;</span><span class="sy0">;</span>       <span class="co1">// All elements with data</span>
$<span class="br0">&#40;</span><span class="st0">':not(:data)'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// All elements without data</span></pre></div></div>



<h2>Some other examples:</h2>
<ul>
    <li><h3>:red</h3>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Check if color of element is red:</span>
$.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#123;</span>
    red<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">'color'</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="st0">'red'</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Usage:</span>
$<span class="br0">&#40;</span><span class="st0">'p:red'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Select all red paragraphs</span></pre></div></div>



    </li>
    <li><h3>:childOfDiv</h3>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Check if element is a child of a div:</span>
$.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#123;</span>
    childOfDiv<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">parents</span><span class="br0">&#40;</span><span class="st0">'div'</span><span class="br0">&#41;</span>.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Yes, I know this is exactly the same as $('div p')</span>
<span class="co1">// This is just a demonstration! ;)</span>
&nbsp;
<span class="co1">// Usage:</span>
$<span class="br0">&#40;</span><span class="st0">'p:childOfDiv'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Select all paragraphs that have a DIV as a parent</span></pre></div></div>



    </li>
    <li><h3>:width()</h3>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Check width of element:</span>
$.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#123;</span>
    width<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>a<span class="sy0">,</span>i<span class="sy0">,</span>m<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">||!</span><span class="br0">&#40;</span><span class="co2">/^(&lt;|&gt;)\d+$/</span><span class="br0">&#41;</span>.<span class="me1">test</span><span class="br0">&#40;</span>m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span><span class="br0">&#125;</span>
        <span class="kw1">return</span> m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>.<span class="me1">substr</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="st0">'&gt;'</span> <span class="sy0">?</span> 
                 $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>.<span class="me1">substr</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy0">:</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&lt;</span> m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>.<span class="me1">substr</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Usage:</span>
$<span class="br0">&#40;</span><span class="st0">'div:width(&gt;200)'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Select all DIVs that have a width greater than 200px</span>
&nbsp;
<span class="co1">// Alternative usage:</span>
$<span class="br0">&#40;</span><span class="st0">'div:width(&gt;200):width(&lt;300)'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Select all DIVs that have a width greater</span>
                                  <span class="co1">// than 200px but less than 300px</span></pre></div></div>



    </li>
    <li><h3>:biggerThan()</h3>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Check whether element is bigger than another:</span>
$.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#123;</span>
    biggerThan<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>a<span class="sy0">,</span>i<span class="sy0">,</span>m<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span><span class="br0">&#125;</span>
        <span class="kw1">return</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">*</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> $<span class="br0">&#40;</span>m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">*</span> $<span class="br0">&#40;</span>m<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Usage:</span>
$<span class="br0">&#40;</span><span class="st0">'div:biggerThan(div#banner))'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Select all DIVs that are bigger than #banner</span>
&nbsp;
<span class="co1">// Alternative usage: (something a little more complex)</span>
<span class="co1">// (Making use of custom width() selector)</span>
&nbsp;
<span class="co1">// Select all DIVs with a width less than 600px but an overall</span>
<span class="co1">// size greater than that of the first paragraph which has a </span>
<span class="co1">// size greater than img#header:</span>
$<span class="br0">&#40;</span><span class="st0">'div:width(&lt;600):biggerThan(p:biggerThan(img#header):eq(0))'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>



    </li>
</ul>
<p>Like I said, the possibilities are endless&#8230;</p>

<h2>UPDATE</h2>
<p>I&#8217;ve created a couple more examples, take a look:</p>

<ul>
    <li><h3>:external</h3>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Check whether links are external:</span>
<span class="co1">// (Only works with elements that have href):</span>
$.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#123;</span>
    external<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>a<span class="sy0">,</span>i<span class="sy0">,</span>m<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>a.<span class="me1">href</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span><span class="br0">&#125;</span>
        <span class="kw1">return</span> a.<span class="me1">hostname</span> <span class="sy0">&amp;&amp;</span> a.<span class="me1">hostname</span> <span class="sy0">!==</span> window.<span class="me1">location</span>.<span class="me1">hostname</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Usage:</span>
$<span class="br0">&#40;</span><span class="st0">'a:external'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Selects all anchors which link to external site/page</span></pre></div></div>



    </li>
    <li><h3>:inView</h3>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Check whether element is currently within the viewport:</span>
$.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#123;</span>
    inView<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw2">var</span> st <span class="sy0">=</span> <span class="br0">&#40;</span>document.<span class="me1">documentElement</span>.<span class="me1">scrollTop</span> <span class="sy0">||</span> document.<span class="me1">body</span>.<span class="me1">scrollTop</span><span class="br0">&#41;</span><span class="sy0">,</span>
            ot <span class="sy0">=</span> $<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span><span class="sy0">,</span>
            wh <span class="sy0">=</span> <span class="br0">&#40;</span>window.<span class="me1">innerHeight</span> <span class="sy0">&amp;&amp;</span> window.<span class="me1">innerHeight</span> <span class="sy0">&lt;</span> $<span class="br0">&#40;</span>window<span class="br0">&#41;</span>.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">?</span> window.<span class="me1">innerHeight</span> <span class="sy0">:</span> $<span class="br0">&#40;</span>window<span class="br0">&#41;</span>.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">return</span> ot <span class="sy0">&gt;</span> st <span class="sy0">&amp;&amp;</span> <span class="br0">&#40;</span>$<span class="br0">&#40;</span>a<span class="br0">&#41;</span>.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> ot<span class="br0">&#41;</span> <span class="sy0">&lt;</span> <span class="br0">&#40;</span>st <span class="sy0">+</span> wh<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Usage:</span>
$<span class="br0">&#40;</span><span class="st0">'div:inView'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Selects all DIV elements within the current viewport</span>
&nbsp;
<span class="co1">// Alternative Usage:</span>
<span class="kw1">if</span> <span class="br0">&#40;</span> $<span class="br0">&#40;</span><span class="st0">'div#footer'</span><span class="br0">&#41;</span>.<span class="kw1">is</span><span class="br0">&#40;</span><span class="st0">':inView'</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="co1">// Do stuff...</span>
<span class="br0">&#125;</span></pre></div></div>



    </li>
</ul>

<h2>UPDATE #2</h2>

<p>I&#8217;ve created a plugin which makes it a little easier to add new &#8216;:&#8217; selectors. Although, it&#8217;s not really a &#8216;plugin&#8217;, it&#8217;s just a function which resides under the jQuery namespace:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>$<span class="br0">&#41;</span><span class="br0">&#123;</span>
    $.<span class="me1">newSelector</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>arguments<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span><span class="sy0">;</span> <span class="br0">&#125;</span>
        $.<span class="me1">extend</span><span class="br0">&#40;</span>$.<span class="me1">expr</span><span class="br0">&#91;</span><span class="st0">':'</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="kw1">typeof</span><span class="br0">&#40;</span>arguments<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">===</span><span class="st0">'object'</span> <span class="sy0">?</span> arguments<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>
          <span class="sy0">:</span> <span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
              <span class="kw2">var</span> newOb <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span> newOb<span class="br0">&#91;</span>arguments<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#93;</span> <span class="sy0">=</span> arguments<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span>
              <span class="kw1">return</span> newOb<span class="sy0">;</span>
          <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
        <span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span>jQuery<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>




<p>Creating a new selector with the &#8216;newSelector&#8217; plugin:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Method 1:</span>
$.<span class="me1">newSelector</span><span class="br0">&#40;</span><span class="st0">'big'</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>elem<span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span class="kw1">return</span> $<span class="br0">&#40;</span>elem<span class="br0">&#41;</span>.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> $<span class="br0">&#40;</span>elem<span class="br0">&#41;</span>.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">1000</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// Method 2:</span>
$.<span class="me1">newSelector</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
    red<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>elem<span class="br0">&#41;</span><span class="br0">&#123;</span>
        <span class="kw1">return</span> $<span class="br0">&#40;</span>elem<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">'color'</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="st0">'red'</span><span class="sy0">;</span>
    <span class="br0">&#125;</span><span class="sy0">,</span>
    yellow<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>elem<span class="br0">&#41;</span><span class="br0">&#123;</span>
        <span class="kw1">return</span> $<span class="br0">&#40;</span>elem<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">'color'</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="st0">'yellow'</span><span class="sy0">;</span>
    <span class="br0">&#125;</span><span class="sy0">,</span>
    green<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>elem<span class="br0">&#41;</span><span class="br0">&#123;</span>
        <span class="kw1">return</span> $<span class="br0">&#40;</span>elem<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">'color'</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="st0">'green'</span><span class="sy0">;</span>
    <span class="br0">&#125;</span><span class="sy0">,</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>


]]></content:encoded>
			<wfw:commentRss>http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/feed/</wfw:commentRss>
		<slash:comments>46</slash:comments>
		</item>
		<item>
		<title>Solving Twitter&#8217;s URL posting issue</title>
		<link>http://james.padolsey.com/javascript/solving-twitters-url-posting-issue/</link>
		<comments>http://james.padolsey.com/javascript/solving-twitters-url-posting-issue/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 09:16:46 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[GreaseMonkey]]></category>
		<category><![CDATA[Reque.st]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://james.padolsey.com/?p=137</guid>
		<description><![CDATA[I&#8217;m one of the few people on this planet still using the Twitter web interface. I just cannot be bothered with any of those Adobe Air clients, they seem too intrusive. Twitter isn&#8217;t so great that it deserves it&#8217;s own process in Windows (sorry Twitter!).&#8230;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m one of the few people on this planet still using the Twitter web interface. I just cannot be bothered with any of those Adobe Air clients, they seem too intrusive. Twitter isn&#8217;t so great that it deserves it&#8217;s own process in Windows (sorry Twitter!). Plus, if I was using a client I&#8217;d feel like I&#8217;d have to tweet about every tiny insignificant thing that happens, which, although it is the point in twitter, would be a massive waste of time!</p>
<p>There are a few things which annoy me about the web interface though. The worst thing by far is that it&#8217;s very slow and sometimes just doesn&#8217;t work. There are also some posting issues; if I have a really long link which I want to share, it won&#8217;t let me press the &quot;update&quot; button (because my tweet is now over 140 characters) &#8211; but I know that Twitter will convert the URL to a tinyurl which will surely result in a tweet shorter than 140 characters but Twitter still insists on disallowing this action!</p>
<p><img src="http://james.padolsey.com/wp-content/uploads/twitter-notclickable.png" alt="Cannot update Twitter" width="542" height="164" /></p>
<p>I got really tired of this, twitter wouldn&#8217;t let me tweet even though shortened versions of posted URLs would fit into the 140 character limit quite nicely! Out of desperation I decided to create a cool little GreaseMonkey script which solves this problem. </p>
<p class="video"><strong><a href="http://userscripts.org/scripts/show/36016">You can install the script here</a></strong> &#8211; (Sorry, it&#8217;s Firefox only, duh!)</p>
<span id="more-137"></span>
<p>The new script uses Greasemonkey&#8217;s native <a href="http://wiki.greasespot.net/GM_xmlhttpRequest"><code>GM_xmlhttpRequest</code></a> (Cross-Domain savvy!) to request shortened URLs from the <a href="http://reque.st/info.html">Reque.st API</a> (<a href="http://james.padolsey.com/general/request-for-shorter-urls/">recently developed</a>). If you <a href="http://userscripts.org/scripts/review/36016">have a look at the source</a> you&#8217;ll notice some of it&#8217;s a little bit &quot;hacky&quot; &#8211; I&#8217;m having to create a new invisible element over Twitter&#8217;s &quot;update&quot; button to capture a submission attempt &#8211; to be honest, this is just so much easier than messing with all Twitter&#8217;s event handling and existing functions; it&#8217;s an absolute minefield &#8211; they&#8217;ve got a wacky combination of Prototype, Scriptaculous &amp; jQuery! (Cough! What can&#8217;t jQuery do by itself!? <img src='http://james.padolsey.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<h3>How to use it:</h3>
<p>Once you&#8217;ve installed it simply use Twitter as you would normally. If you type in a long URL which makes the tweet go over the 140 character limit then simply press &quot;update&quot; as you would normally. If the tweet is still too long after URL shortening then an alert box will show up notifying you. Any bugs can be reported here or on the <a href="http://userscripts.org/scripts/show/36016">UserScript.org page</a> as a comment.</p>]]></content:encoded>
			<wfw:commentRss>http://james.padolsey.com/javascript/solving-twitters-url-posting-issue/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

