Skip to content

Instantly share code, notes, and snippets.

@jakl
Created July 21, 2013 09:15
Show Gist options
  • Save jakl/6048000 to your computer and use it in GitHub Desktop.
Save jakl/6048000 to your computer and use it in GitHub Desktop.
requirebin sketch
var twtxt = require('twitter-text')
// Input / output user facing elements
var explanation = document.createElement('div')
var input = document.createElement('input')
var output = document.createElement('div')
document.body.appendChild(explanation)
document.body.appendChild(input)
document.body.appendChild(output)
// Style interface
explanation.innerText = 'Playground for a twitter-text example showing removing entities'
explanation.style.margin = '2%'
input.autofocus = true
input.type = 'search'
input.style.margin = '1%'
input.style.width = '95%'
output.style.margin = '2%'
var removeEntity = function(tweet, entity){
var start = entity.indices[0]
var end = entity.indices[1]
return tweet.slice(0,start) + tweet.slice(end)
}
// Output function
var removeEntitiesFromTweet = function(tweet){
return twttr.txt.extractEntitiesWithIndices(tweet)
.reverse()
.reduce(removeEntity, tweet);
}
// When the user types anything, rerun output function and refresh output
input.oninput = function(){
output.innerHTML = removeEntitiesFromTweet(this.value)
}
// Initial example
input.value = 'just #batman @can do it!'
output.innerHTML = removeEntitiesFromTweet(input.value)
require=function(t,e,a){function n(a,i){if(!e[a]){if(!t[a]){var l="function"==typeof require&&require;if(!i&&l)return l(a,!0);if(r)return r(a,!0);throw Error("Cannot find module '"+a+"'")}var s=e[a]={exports:{}};t[a][0].call(s.exports,function(e){var r=t[a][1][e];return n(r?r:e)},s,s.exports)}return e[a].exports}for(var r="function"==typeof require&&require,i=0;a.length>i;i++)n(a[i]);return n}({"twitter-text":[function(t,e){e.exports=t("GIYVKx")},{}],GIYVKx:[function(t,e){(function(){(function(){function t(t,e){return e=e||"","string"!=typeof t&&(t.global&&0>e.indexOf("g")&&(e+="g"),t.ignoreCase&&0>e.indexOf("i")&&(e+="i"),t.multiline&&0>e.indexOf("m")&&(e+="m"),t=t.source),RegExp(t.replace(/#\{(\w+)\}/g,function(t,e){var a=l.txt.regexen[e]||"";return"string"!=typeof a&&(a=a.source),a}),e)}function a(t,e){return t.replace(/#\{(\w+)\}/g,function(t,a){return e[a]||""})}function n(t,e,a){var n=String.fromCharCode(e);return a!==e&&(n+="-"+String.fromCharCode(a)),t.push(n),t}function r(t){var e={};for(var a in t)t.hasOwnProperty(a)&&(e[a]=t[a]);return e}function i(t,e,a){return a?!t||t.match(e)&&RegExp["$&"]===t:"string"==typeof t&&t.match(e)&&RegExp["$&"]===t}if(l===void 0||null===l)var l={};l.txt={},l.txt.regexen={};var s={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#39;"};l.txt.htmlEscape=function(t){return t&&t.replace(/[&"'><]/g,function(t){return s[t]})},l.txt.regexSupplant=t,l.txt.stringSupplant=a,l.txt.addCharsToCharClass=n;var o=String.fromCharCode,c=[o(32),o(133),o(160),o(5760),o(6158),o(8232),o(8233),o(8239),o(8287),o(12288)];n(c,9,13),n(c,8192,8202);var x=[o(65534),o(65279),o(65535)];n(x,8234,8238),l.txt.regexen.spaces_group=t(c.join("")),l.txt.regexen.spaces=t("["+c.join("")+"]"),l.txt.regexen.invalid_chars_group=t(x.join("")),l.txt.regexen.punct=/\!'#%&'\(\)*\+,\\\-\.\/:;<=>\?@\[\]\^_{|}~\$/,l.txt.regexen.rtl_chars=/[\u0600-\u06FF]|[\u0750-\u077F]|[\u0590-\u05FF]|[\uFE70-\uFEFF]/gm,l.txt.regexen.non_bmp_code_pairs=/[\uD800-\uDBFF][\uDC00-\uDFFF]/gm;var u=[];n(u,1024,1279),n(u,1280,1319),n(u,11744,11775),n(u,42560,42655),n(u,1425,1471),n(u,1473,1474),n(u,1476,1477),n(u,1479,1479),n(u,1488,1514),n(u,1520,1524),n(u,64274,64296),n(u,64298,64310),n(u,64312,64316),n(u,64318,64318),n(u,64320,64321),n(u,64323,64324),n(u,64326,64335),n(u,1552,1562),n(u,1568,1631),n(u,1646,1747),n(u,1749,1756),n(u,1758,1768),n(u,1770,1775),n(u,1786,1788),n(u,1791,1791),n(u,1872,1919),n(u,2208,2208),n(u,2210,2220),n(u,2276,2302),n(u,64336,64433),n(u,64467,64829),n(u,64848,64911),n(u,64914,64967),n(u,65008,65019),n(u,65136,65140),n(u,65142,65276),n(u,8204,8204),n(u,3585,3642),n(u,3648,3662),n(u,4352,4607),n(u,12592,12677),n(u,43360,43391),n(u,44032,55215),n(u,55216,55295),n(u,65441,65500),n(u,12449,12538),n(u,12540,12542),n(u,65382,65439),n(u,65392,65392),n(u,65296,65305),n(u,65313,65338),n(u,65345,65370),n(u,12353,12438),n(u,12441,12446),n(u,13312,19903),n(u,19968,40959),n(u,173824,177983),n(u,177984,178207),n(u,194560,195103),n(u,12291,12291),n(u,12293,12293),n(u,12347,12347),l.txt.regexen.nonLatinHashtagChars=t(u.join(""));var h=[];n(h,192,214),n(h,216,246),n(h,248,255),n(h,256,591),n(h,595,596),n(h,598,599),n(h,601,601),n(h,603,603),n(h,611,611),n(h,616,616),n(h,623,623),n(h,626,626),n(h,649,649),n(h,651,651),n(h,699,699),n(h,768,879),n(h,7680,7935),l.txt.regexen.latinAccentChars=t(h.join("")),l.txt.regexen.hashSigns=/[##]/,l.txt.regexen.hashtagAlpha=t(/[a-z_#{latinAccentChars}#{nonLatinHashtagChars}]/i),l.txt.regexen.hashtagAlphaNumeric=t(/[a-z0-9_#{latinAccentChars}#{nonLatinHashtagChars}]/i),l.txt.regexen.endHashtagMatch=t(/^(?:#{hashSigns}|:\/\/)/),l.txt.regexen.hashtagBoundary=t(/(?:^|$|[^&a-z0-9_#{latinAccentChars}#{nonLatinHashtagChars}])/),l.txt.regexen.validHashtag=t(/(#{hashtagBoundary})(#{hashSigns})(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi),l.txt.regexen.validMentionPrecedingChars=/(?:^|[^a-zA-Z0-9_!#$%&*@@]|RT:?)/,l.txt.regexen.atSigns=/[@@]/,l.txt.regexen.validMentionOrList=t("(#{validMentionPrecedingChars})(#{atSigns})([a-zA-Z0-9_]{1,20})(/[a-zA-Z][a-zA-Z0-9_-]{0,24})?","g"),l.txt.regexen.validReply=t(/^(?:#{spaces})*#{atSigns}([a-zA-Z0-9_]{1,20})/),l.txt.regexen.endMentionMatch=t(/^(?:#{atSigns}|[#{latinAccentChars}]|:\/\/)/),l.txt.regexen.validUrlPrecedingChars=t(/(?:[^A-Za-z0-9@@$###{invalid_chars_group}]|^)/),l.txt.regexen.invalidUrlWithoutProtocolPrecedingChars=/[-_.\/]$/,l.txt.regexen.invalidDomainChars=a("#{punct}#{spaces_group}#{invalid_chars_group}",l.txt.regexen),l.txt.regexen.validDomainChars=t(/[^#{invalidDomainChars}]/),l.txt.regexen.validSubdomain=t(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\.)/),l.txt.regexen.validDomainName=t(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\.)/),l.txt.regexen.validGTLD=t(/(?:(?:aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|xxx)(?=[^0-9a-zA-Z]|$))/),l.txt.regexen.validCCTLD=t(/(?:(?:ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|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|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|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|ss|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|sx)(?=[^0-9a-zA-Z]|$))/),l.txt.regexen.validPunycode=t(/(?:xn--[0-9a-z]+)/),l.txt.regexen.validDomain=t(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/),l.txt.regexen.validAsciiDomain=t(/(?:(?:[\-a-z0-9#{latinAccentChars}]+)\.)+(?:#{validGTLD}|#{validCCTLD}|#{validPunycode})/gi),l.txt.regexen.invalidShortDomain=t(/^#{validDomainName}#{validCCTLD}$/),l.txt.regexen.validPortNumber=t(/[0-9]+/),l.txt.regexen.validGeneralUrlPathChars=t(/[a-z0-9!\*';:=\+,\.\$\/%#\[\]\-_~@|&#{latinAccentChars}]/i),l.txt.regexen.validUrlBalancedParens=t(/\(#{validGeneralUrlPathChars}+\)/i),l.txt.regexen.validUrlPathEndingChars=t(/[\+\-a-z0-9=_#\/#{latinAccentChars}]|(?:#{validUrlBalancedParens})/i),l.txt.regexen.validUrlPath=t("(?:(?:#{validGeneralUrlPathChars}*(?:#{validUrlBalancedParens}#{validGeneralUrlPathChars}*)*#{validUrlPathEndingChars})|(?:@#{validGeneralUrlPathChars}+/))","i"),l.txt.regexen.validUrlQueryChars=/[a-z0-9!?\*'@\(\);:&=\+\$\/%#\[\]\-_\.,~|]/i,l.txt.regexen.validUrlQueryEndingChars=/[a-z0-9_&=#\/]/i,l.txt.regexen.extractUrl=t("((#{validUrlPrecedingChars})((https?:\\/\\/)?(#{validDomain})(?::(#{validPortNumber}))?(\\/#{validUrlPath}*)?(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?))","gi"),l.txt.regexen.validTcoUrl=/^https?:\/\/t\.co\/[a-z0-9]+/i,l.txt.regexen.urlHasProtocol=/^https?:\/\//i,l.txt.regexen.urlHasHttps=/^https:\/\//i,l.txt.regexen.cashtag=/[a-z]{1,6}(?:[._][a-z]{1,2})?/i,l.txt.regexen.validCashtag=t("(^|#{spaces})(\\$)(#{cashtag})(?=$|\\s|[#{punct}])","gi"),l.txt.regexen.validateUrlUnreserved=/[a-z0-9\-._~]/i,l.txt.regexen.validateUrlPctEncoded=/(?:%[0-9a-f]{2})/i,l.txt.regexen.validateUrlSubDelims=/[!$&'()*+,;=]/i,l.txt.regexen.validateUrlPchar=t("(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|[:|@])","i"),l.txt.regexen.validateUrlScheme=/(?:[a-z][a-z0-9+\-.]*)/i,l.txt.regexen.validateUrlUserinfo=t("(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|:)*","i"),l.txt.regexen.validateUrlDecOctet=/(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))/i,l.txt.regexen.validateUrlIpv4=t(/(?:#{validateUrlDecOctet}(?:\.#{validateUrlDecOctet}){3})/i),l.txt.regexen.validateUrlIpv6=/(?:\[[a-f0-9:\.]+\])/i,l.txt.regexen.validateUrlIp=t("(?:#{validateUrlIpv4}|#{validateUrlIpv6})","i"),l.txt.regexen.validateUrlSubDomainSegment=/(?:[a-z0-9](?:[a-z0-9_\-]*[a-z0-9])?)/i,l.txt.regexen.validateUrlDomainSegment=/(?:[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?)/i,l.txt.regexen.validateUrlDomainTld=/(?:[a-z](?:[a-z0-9\-]*[a-z0-9])?)/i,l.txt.regexen.validateUrlDomain=t(/(?:(?:#{validateUrlSubDomainSegment]}\.)*(?:#{validateUrlDomainSegment]}\.)#{validateUrlDomainTld})/i),l.txt.regexen.validateUrlHost=t("(?:#{validateUrlIp}|#{validateUrlDomain})","i"),l.txt.regexen.validateUrlUnicodeSubDomainSegment=/(?:(?:[a-z0-9]|[^\u0000-\u007f])(?:(?:[a-z0-9_\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i,l.txt.regexen.validateUrlUnicodeDomainSegment=/(?:(?:[a-z0-9]|[^\u0000-\u007f])(?:(?:[a-z0-9\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i,l.txt.regexen.validateUrlUnicodeDomainTld=/(?:(?:[a-z]|[^\u0000-\u007f])(?:(?:[a-z0-9\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i,l.txt.regexen.validateUrlUnicodeDomain=t(/(?:(?:#{validateUrlUnicodeSubDomainSegment}\.)*(?:#{validateUrlUnicodeDomainSegment}\.)#{validateUrlUnicodeDomainTld})/i),l.txt.regexen.validateUrlUnicodeHost=t("(?:#{validateUrlIp}|#{validateUrlUnicodeDomain})","i"),l.txt.regexen.validateUrlPort=/[0-9]{1,5}/,l.txt.regexen.validateUrlUnicodeAuthority=t("(?:(#{validateUrlUserinfo})@)?(#{validateUrlUnicodeHost})(?::(#{validateUrlPort}))?","i"),l.txt.regexen.validateUrlAuthority=t("(?:(#{validateUrlUserinfo})@)?(#{validateUrlHost})(?::(#{validateUrlPort}))?","i"),l.txt.regexen.validateUrlPath=t(/(\/#{validateUrlPchar}*)*/i),l.txt.regexen.validateUrlQuery=t(/(#{validateUrlPchar}|\/|\?)*/i),l.txt.regexen.validateUrlFragment=t(/(#{validateUrlPchar}|\/|\?)*/i),l.txt.regexen.validateUrlUnencoded=t("^(?:([^:/?#]+):\\/\\/)?([^/?#]*)([^?#]*)(?:\\?([^#]*))?(?:#(.*))?$","i");var g="tweet-url list-slug",d="tweet-url username",v="tweet-url hashtag",m="tweet-url cashtag",p={urlClass:!0,listClass:!0,usernameClass:!0,hashtagClass:!0,cashtagClass:!0,usernameUrlBase:!0,listUrlBase:!0,hashtagUrlBase:!0,cashtagUrlBase:!0,usernameUrlBlock:!0,listUrlBlock:!0,hashtagUrlBlock:!0,linkUrlBlock:!0,usernameIncludeSymbol:!0,suppressLists:!0,suppressNoFollow:!0,targetBlank:!0,suppressDataScreenName:!0,urlEntities:!0,symbolTag:!0,textWithSymbolTag:!0,urlTarget:!0,invisibleTagAttrs:!0,linkAttributeBlock:!0,linkTextBlock:!0,htmlEscapeNonEntities:!0},f={disabled:!0,readonly:!0,multiple:!0,checked:!0};l.txt.tagAttrs=function(t){var e="";for(var a in t){var n=t[a];f[a]&&(n=n?a:null),null!=n&&(e+=" "+l.txt.htmlEscape(a)+'="'+l.txt.htmlEscape(""+n)+'"')}return e},l.txt.linkToText=function(t,e,n,r){r.suppressNoFollow||(n.rel="nofollow"),r.linkAttributeBlock&&r.linkAttributeBlock(t,n),r.linkTextBlock&&(e=r.linkTextBlock(t,e));var i={text:e,attr:l.txt.tagAttrs(n)};return a("<a#{attr}>#{text}</a>",i)},l.txt.linkToTextWithSymbol=function(t,e,a,n,r){var i=r.symbolTag?"<"+r.symbolTag+">"+e+"</"+r.symbolTag+">":e;a=l.txt.htmlEscape(a);var s=r.textWithSymbolTag?"<"+r.textWithSymbolTag+">"+a+"</"+r.textWithSymbolTag+">":a;return r.usernameIncludeSymbol||!e.match(l.txt.regexen.atSigns)?l.txt.linkToText(t,i+s,n,r):i+l.txt.linkToText(t,s,n,r)},l.txt.linkToHashtag=function(t,e,a){var n=e.substring(t.indices[0],t.indices[0]+1),i=l.txt.htmlEscape(t.hashtag),s=r(a.htmlAttrs||{});return s.href=a.hashtagUrlBase+i,s.title="#"+i,s["class"]=a.hashtagClass,i[0].match(l.txt.regexen.rtl_chars)&&(s["class"]+=" rtl"),a.targetBlank&&(s.target="_blank"),l.txt.linkToTextWithSymbol(t,n,i,s,a)},l.txt.linkToCashtag=function(t,e,a){var n=l.txt.htmlEscape(t.cashtag),i=r(a.htmlAttrs||{});return i.href=a.cashtagUrlBase+n,i.title="$"+n,i["class"]=a.cashtagClass,a.targetBlank&&(i.target="_blank"),l.txt.linkToTextWithSymbol(t,"$",n,i,a)},l.txt.linkToMentionAndList=function(t,e,a){var n=e.substring(t.indices[0],t.indices[0]+1),i=l.txt.htmlEscape(t.screenName),s=l.txt.htmlEscape(t.listSlug),o=t.listSlug&&!a.suppressLists,c=r(a.htmlAttrs||{});return c["class"]=o?a.listClass:a.usernameClass,c.href=o?a.listUrlBase+i+s:a.usernameUrlBase+i,o||a.suppressDataScreenName||(c["data-screen-name"]=i),a.targetBlank&&(c.target="_blank"),l.txt.linkToTextWithSymbol(t,n,o?i+s:i,c,a)},l.txt.linkToUrl=function(t,e,a){var n=t.url,i=n,s=l.txt.htmlEscape(i),o=a.urlEntities&&a.urlEntities[n]||t;o.display_url&&(s=l.txt.linkTextWithEntity(o,a));var c=r(a.htmlAttrs||{});return n.match(l.txt.regexen.urlHasProtocol)||(n="http://"+n),c.href=n,a.targetBlank&&(c.target="_blank"),a.urlClass&&(c["class"]=a.urlClass),a.urlTarget&&(c.target=a.urlTarget),!a.title&&o.display_url&&(c.title=o.expanded_url),l.txt.linkToText(t,s,c,a)},l.txt.linkTextWithEntity=function(t,e){var n=t.display_url,r=t.expanded_url,i=n.replace(/…/g,"");if(-1!=r.indexOf(i)){var s=r.indexOf(i),o={displayUrlSansEllipses:i,beforeDisplayUrl:r.substr(0,s),afterDisplayUrl:r.substr(s+i.length),precedingEllipsis:n.match(/^…/)?"…":"",followingEllipsis:n.match(/…$/)?"…":""};for(var c in o)o.hasOwnProperty(c)&&(o[c]=l.txt.htmlEscape(o[c]));return o.invisible=e.invisibleTagAttrs,a("<span class='tco-ellipsis'>#{precedingEllipsis}<span #{invisible}>&nbsp;</span></span><span #{invisible}>#{beforeDisplayUrl}</span><span class='js-display-url'>#{displayUrlSansEllipses}</span><span #{invisible}>#{afterDisplayUrl}</span><span class='tco-ellipsis'><span #{invisible}>&nbsp;</span>#{followingEllipsis}</span>",o)}return n},l.txt.autoLinkEntities=function(t,e,a){a=r(a||{}),a.hashtagClass=a.hashtagClass||v,a.hashtagUrlBase=a.hashtagUrlBase||"https://twitter.com/#!/search?q=%23",a.cashtagClass=a.cashtagClass||m,a.cashtagUrlBase=a.cashtagUrlBase||"https://twitter.com/#!/search?q=%24",a.listClass=a.listClass||g,a.usernameClass=a.usernameClass||d,a.usernameUrlBase=a.usernameUrlBase||"https://twitter.com/",a.listUrlBase=a.listUrlBase||"https://twitter.com/",a.htmlAttrs=l.txt.extractHtmlAttrsFromOptions(a),a.invisibleTagAttrs=a.invisibleTagAttrs||"style='position:absolute;left:-9999px;'";var n,i,s;if(a.urlEntities){for(n={},i=0,s=a.urlEntities.length;s>i;i++)n[a.urlEntities[i].url]=a.urlEntities[i];a.urlEntities=n}var o="",c=0;e.sort(function(t,e){return t.indices[0]-e.indices[0]});for(var x=a.htmlEscapeNonEntities?l.txt.htmlEscape:function(t){return t},i=0;e.length>i;i++){var u=e[i];o+=x(t.substring(c,u.indices[0])),u.url?o+=l.txt.linkToUrl(u,t,a):u.hashtag?o+=l.txt.linkToHashtag(u,t,a):u.screenName?o+=l.txt.linkToMentionAndList(u,t,a):u.cashtag&&(o+=l.txt.linkToCashtag(u,t,a)),c=u.indices[1]}return o+=x(t.substring(c,t.length))},l.txt.autoLinkWithJSON=function(t,e,a){var n=[];for(var r in e)n=n.concat(e[r]);for(var i=0;n.length>i;i++)entity=n[i],entity.screen_name?entity.screenName=entity.screen_name:entity.text&&(entity.hashtag=entity.text);return l.txt.modifyIndicesFromUnicodeToUTF16(t,n),l.txt.autoLinkEntities(t,n,a)},l.txt.extractHtmlAttrsFromOptions=function(t){var e={};for(var a in t){var n=t[a];p[a]||(f[a]&&(n=n?a:null),null!=n&&(e[a]=n))}return e},l.txt.autoLink=function(t,e){var a=l.txt.extractEntitiesWithIndices(t,{extractUrlsWithoutProtocol:!1});return l.txt.autoLinkEntities(t,a,e)},l.txt.autoLinkUsernamesOrLists=function(t,e){var a=l.txt.extractMentionsOrListsWithIndices(t);return l.txt.autoLinkEntities(t,a,e)},l.txt.autoLinkHashtags=function(t,e){var a=l.txt.extractHashtagsWithIndices(t);return l.txt.autoLinkEntities(t,a,e)},l.txt.autoLinkCashtags=function(t,e){var a=l.txt.extractCashtagsWithIndices(t);return l.txt.autoLinkEntities(t,a,e)},l.txt.autoLinkUrlsCustom=function(t,e){var a=l.txt.extractUrlsWithIndices(t,{extractUrlsWithoutProtocol:!1});return l.txt.autoLinkEntities(t,a,e)},l.txt.removeOverlappingEntities=function(t){t.sort(function(t,e){return t.indices[0]-e.indices[0]});for(var e=t[0],a=1;t.length>a;a++)e.indices[1]>t[a].indices[0]?(t.splice(a,1),a--):e=t[a]},l.txt.extractEntitiesWithIndices=function(t,e){var a=l.txt.extractUrlsWithIndices(t,e).concat(l.txt.extractMentionsOrListsWithIndices(t)).concat(l.txt.extractHashtagsWithIndices(t,{checkUrlOverlap:!1})).concat(l.txt.extractCashtagsWithIndices(t));return 0==a.length?[]:(l.txt.removeOverlappingEntities(a),a)},l.txt.extractMentions=function(t){for(var e=[],a=l.txt.extractMentionsWithIndices(t),n=0;a.length>n;n++){var r=a[n].screenName;e.push(r)}return e},l.txt.extractMentionsWithIndices=function(t){for(var e,a=[],n=l.txt.extractMentionsOrListsWithIndices(t),r=0;n.length>r;r++)e=n[r],""==e.listSlug&&a.push({screenName:e.screenName,indices:e.indices});return a},l.txt.extractMentionsOrListsWithIndices=function(t){if(!t||!t.match(l.txt.regexen.atSigns))return[];var e=[];return t.replace(l.txt.regexen.validMentionOrList,function(t,a,n,r,i,s,o){var c=o.slice(s+t.length);if(!c.match(l.txt.regexen.endMentionMatch)){i=i||"";var x=s+a.length,u=x+r.length+i.length+1;e.push({screenName:r,listSlug:i,indices:[x,u]})}}),e},l.txt.extractReplies=function(t){if(!t)return null;var e=t.match(l.txt.regexen.validReply);return!e||RegExp.rightContext.match(l.txt.regexen.endMentionMatch)?null:e[1]},l.txt.extractUrls=function(t,e){for(var a=[],n=l.txt.extractUrlsWithIndices(t,e),r=0;n.length>r;r++)a.push(n[r].url);return a},l.txt.extractUrlsWithIndices=function(t,e){if(e||(e={extractUrlsWithoutProtocol:!0}),!t||(e.extractUrlsWithoutProtocol?!t.match(/\./):!t.match(/:/)))return[];for(var a=[];l.txt.regexen.extractUrl.exec(t);){var n=RegExp.$2,r=RegExp.$3,i=RegExp.$4,s=RegExp.$5,o=RegExp.$7,c=l.txt.regexen.extractUrl.lastIndex,x=c-r.length;if(i)r.match(l.txt.regexen.validTcoUrl)&&(r=RegExp.lastMatch,c=x+r.length),a.push({url:r,indices:[x,c]});else{if(!e.extractUrlsWithoutProtocol||n.match(l.txt.regexen.invalidUrlWithoutProtocolPrecedingChars))continue;var u=null,h=!1,g=0;if(s.replace(l.txt.regexen.validAsciiDomain,function(t){var e=s.indexOf(t,g);g=e+t.length,u={url:t,indices:[x+e,x+g]},h=t.match(l.txt.regexen.invalidShortDomain),h||a.push(u)}),null==u)continue;o&&(h&&a.push(u),u.url=r.replace(s,u.url),u.indices[1]=c)}}return a},l.txt.extractHashtags=function(t){for(var e=[],a=l.txt.extractHashtagsWithIndices(t),n=0;a.length>n;n++)e.push(a[n].hashtag);return e},l.txt.extractHashtagsWithIndices=function(t,e){if(e||(e={checkUrlOverlap:!0}),!t||!t.match(l.txt.regexen.hashSigns))return[];var a=[];if(t.replace(l.txt.regexen.validHashtag,function(t,e,n,r,i,s){var o=s.slice(i+t.length);if(!o.match(l.txt.regexen.endHashtagMatch)){var c=i+e.length,x=c+r.length+1;a.push({hashtag:r,indices:[c,x]})}}),e.checkUrlOverlap){var n=l.txt.extractUrlsWithIndices(t);if(n.length>0){var r=a.concat(n);l.txt.removeOverlappingEntities(r),a=[];for(var i=0;r.length>i;i++)r[i].hashtag&&a.push(r[i])}}return a},l.txt.extractCashtags=function(t){for(var e=[],a=l.txt.extractCashtagsWithIndices(t),n=0;a.length>n;n++)e.push(a[n].cashtag);return e},l.txt.extractCashtagsWithIndices=function(t){if(!t||-1==t.indexOf("$"))return[];var e=[];return t.replace(l.txt.regexen.validCashtag,function(t,a,n,r,i){var l=i+a.length,s=l+r.length+1;e.push({cashtag:r,indices:[l,s]})}),e},l.txt.modifyIndicesFromUnicodeToUTF16=function(t,e){l.txt.convertUnicodeIndices(t,e,!1)},l.txt.modifyIndicesFromUTF16ToUnicode=function(t,e){l.txt.convertUnicodeIndices(t,e,!0)},l.txt.getUnicodeTextLength=function(t){return t.replace(l.txt.regexen.non_bmp_code_pairs," ").length},l.txt.convertUnicodeIndices=function(t,e,a){if(0!=e.length){var n=0,r=0;e.sort(function(t,e){return t.indices[0]-e.indices[0]});for(var i=0,l=e[0];t.length>n;){if(l.indices[0]==(a?n:r)){var s=l.indices[1]-l.indices[0];if(l.indices[0]=a?r:n,l.indices[1]=l.indices[0]+s,i++,i==e.length)break;l=e[i]}var o=t.charCodeAt(n);o>=55296&&56319>=o&&t.length-1>n&&(o=t.charCodeAt(n+1),o>=56320&&57343>=o&&n++),r++,n++}}},l.txt.splitTags=function(t){for(var e,a,n=t.split("<"),r=[],i=0;n.length>i;i+=1)if(a=n[i]){e=a.split(">");for(var l=0;e.length>l;l+=1)r.push(e[l])}else r.push("");return r},l.txt.hitHighlight=function(t,e,a){var n="em";if(e=e||[],a=a||{},0===e.length)return t;var r,i,s,o,c,x,u,h=a.tag||n,g=["<"+h+">","</"+h+">"],d=l.txt.splitTags(t),v="",m=0,p=d[0],f=0,U=0,C=!1,b=p,y=[];for(r=0;e.length>r;r+=1)for(i=0;e[r].length>i;i+=1)y.push(e[r][i]);for(s=0;y.length>s;s+=1){for(o=y[s],c=g[s%2],x=!1;null!=p&&o>=f+p.length;)v+=b.slice(U),C&&o===f+b.length&&(v+=c,x=!0),d[m+1]&&(v+="<"+d[m+1]+">"),f+=b.length,U=0,m+=2,p=d[m],b=p,C=!1;x||null==p?x||(x=!0,v+=c):(u=o-f,v+=b.slice(U,u)+c,U=u,C=0===s%2?!0:!1)}if(null!=p)for(b.length>U&&(v+=b.slice(U)),s=m+1;d.length>s;s+=1)v+=0===s%2?d[s]:"<"+d[s]+">";return v};var U=140,C=[o(65534),o(65279),o(65535),o(8234),o(8235),o(8236),o(8237),o(8238)];l.txt.getTweetLength=function(t,e){e||(e={short_url_length:22,short_url_length_https:23});var a=l.txt.getUnicodeTextLength(t),n=l.txt.extractUrlsWithIndices(t);l.txt.modifyIndicesFromUTF16ToUnicode(t,n);for(var r=0;n.length>r;r++)a+=n[r].indices[0]-n[r].indices[1],a+=n[r].url.toLowerCase().match(l.txt.regexen.urlHasHttps)?e.short_url_length_https:e.short_url_length;return a},l.txt.isInvalidTweet=function(t){if(!t)return"empty";if(l.txt.getTweetLength(t)>U)return"too_long";for(var e=0;C.length>e;e++)if(t.indexOf(C[e])>=0)return"invalid_characters";return!1},l.txt.isValidTweetText=function(t){return!l.txt.isInvalidTweet(t)},l.txt.isValidUsername=function(t){if(!t)return!1;var e=l.txt.extractMentions(t);return 1===e.length&&e[0]===t.slice(1)};var b=t(/^#{validMentionOrList}$/);if(l.txt.isValidList=function(t){var e=t.match(b);return!(!e||""!=e[1]||!e[4])},l.txt.isValidHashtag=function(t){if(!t)return!1;var e=l.txt.extractHashtags(t);return 1===e.length&&e[0]===t.slice(1)},l.txt.isValidUrl=function(t,e,a){if(null==e&&(e=!0),null==a&&(a=!0),!t)return!1;var n=t.match(l.txt.regexen.validateUrlUnencoded);if(!n||n[0]!==t)return!1;var r=n[1],s=n[2],o=n[3],c=n[4],x=n[5];return(!a||i(r,l.txt.regexen.validateUrlScheme)&&r.match(/^https?$/i))&&i(o,l.txt.regexen.validateUrlPath)&&i(c,l.txt.regexen.validateUrlQuery,!0)&&i(x,l.txt.regexen.validateUrlFragment,!0)?e&&i(s,l.txt.regexen.validateUrlUnicodeAuthority)||!e&&i(s,l.txt.regexen.validateUrlAuthority):!1},e!==void 0&&e.exports&&(e.exports=l.txt),"undefined"!=typeof window)if(window.twttr)for(var y in l)window.twttr[y]=l[y];else window.twttr=l})()})()},{}]},{},[]);var twtxt=require("twitter-text"),explanation=document.createElement("div"),input=document.createElement("input"),output=document.createElement("div");document.body.appendChild(explanation),document.body.appendChild(input),document.body.appendChild(output),explanation.innerText="Playground for a twitter-text example showing removing entities",explanation.style.margin="2%",input.autofocus=!0,input.type="search",input.style.margin="1%",input.style.width="95%",output.style.margin="2%";var removeEntity=function(t,e){var a=e.indices[0],n=e.indices[1];return t.slice(0,a)+t.slice(n)},removeEntitiesFromTweet=function(t){return twttr.txt.extractEntitiesWithIndices(t).reverse().reduce(removeEntity,t)};input.oninput=function(){output.innerHTML=removeEntitiesFromTweet(this.value)},input.value="just #batman @can do it!",output.innerHTML=removeEntitiesFromTweet(input.value);
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; }
body, html { height: 100%; width: 100%; }</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment