Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
This paste will be private.
// max of 140 chars is recommended, but it really allows 160 const TWEET_MAXLEN = 140; const TWEET_SHORT_URL_MAX_LENGTH = 17; CmdUtils.CreateCommand({ name: "tweet", icon: "http://assets3.twitter.com/images/favicon.ico", takes: {status: noun_arb_text}, modifiers: {}, description: "Sets your Twitter status to a message of at most 160 characters.", help: "You'll need a <a href=\"http://twitter.com\">Twitter account</a>, obviously. If you're not already logged in" + " you'll be asked to log in.", preview: function(previewBlock, directObj) { var statusText = directObj.text; var statusLength = statusText.length; var usesUrlShortener = statusText.indexOf('isgd') != -1; if (usesUrlShortener) statusLength += TWEET_SHORT_URL_MAX_LENGTH - 4; var previewData = { status: statusText, chars: TWEET_MAXLEN - statusLength }; var previewTemplate = "Updates your Twitter status to: <br /><b>${status}</b><br /><br />Characters remaining: <b>${chars}</b>"; var truncateTemplate = "<br />The last <b>${truncate}</b> characters will be truncated!"; var urlWillBeShortenedText = "<br />The text 'isgd' will be replaced with an http://is.gd/ link to the current page." var previewHTML = CmdUtils.renderTemplate(previewTemplate, previewData); if (usesUrlShortener) previewHTML += urlWillBeShortenedText; if(previewData.chars < 0) { var truncateData = { truncate: 0 - previewData.chars }; previewHTML += CmdUtils.renderTemplate(truncateTemplate, truncateData); } previewBlock.innerHTML = previewHTML; }, execute: function(directObj) { var statusText = directObj.text; if(statusText.length < 1) { displayMessage("Twitter requires a status to be entered"); return; } var usesUrlShortener = statusText.indexOf('isgd') != -1; var postUpdate = function( shortURL ) { var finalStatusText = statusText.replace('isgd', shortURL); var updateUrl = "https://twitter.com/statuses/update.json"; var updateParams = { source: "ubiquity", status: statusText }; jQuery.ajax({ type: "POST", url: updateUrl, data: updateParams, dataType: "json", error: function() { displayMessage("Twitter error - status not updated"); }, success: function() { displayMessage("Twitter status updated"); } }); } if (usesUrlShortener) { var urlToShorten = Application.activeWindow.activeTab.document.location.href; jQuery.get( 'http://is.gd/api.php', { 'longurl' : urlToShorten }, postUpdate); } else { postUpdate(''); } } });
From the Design Piracy series on my blog: