jamo

createTwitterTimeline UDF for ColdFusion

Jul 8th, 2013
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!---
  2. createTwitterTimeline v1 by James Moberg (6/15/2013)
  3. Generates a Twitter Embedded Timeline, returns a struct with JS, HTML or full EmbedCode)
  4. For more information regarding a WidgetID or other parameters, go to:
  5. https://dev.twitter.com/docs/embedded-timelines
  6. Register Widget IDs here: https://twitter.com/settings/widgets
  7. --->
  8.  
  9. <h2>Sample Usage</h2>
  10. <CFSET TwitterData = {WidgetID="123456789012345", ScreenName="Screenname", href="https://twitter.com/Screenname", Tweetlimit="1", chrome="transparent,noscrollbar,noborders,nofooter,noheader", bordercolor="C2E4F4", linkcolor="0079C2"}>
  11.  
  12. <CFSET TwitterTimeline = createTwitterTimeline(argumentCollection = TwitterData)>
  13.  
  14. <cfhtmlhead text="#TwitterTimeline.JS#">
  15. <CFOUTPUT>
  16. <div>#TwitterTimeline.HTML#</div>
  17. </CFOUTPUT>
  18.  
  19. <cffunction name="createTwitterTimeline" access="public" returntype="struct" output="false">
  20.     <cfargument name="WidgetID" default="" type="string" required="true" hint="configure a unique timeline widget ID at https://twitter.com/settings/widgets" />
  21.     <cfargument name="Width" type="numeric" default="0" hint="Default: 520 [180-520]" />
  22.     <cfargument name="HREF" type="string" default="" hint="Twitter URL (in case javascript is not enabled)" />
  23.     <cfargument name="Chrome" type="string" default="" hint="Widget Layout: [noheader nofooter noborders noscrollbar transparent]" />
  24.     <!--- More Customization --->
  25.     <cfargument name="AnchorText" type="string" default="" hint="Default: Tweets by/from Username/List" />
  26.     <cfargument name="ARIA" type="string" hint="Default: polite. [polite/assertive] (least obtrusive vs primary content)" />
  27.     <cfargument name="Bordercolor" type="string" default="" hint="Default: E8E8E8  [Valid HEX color]" />
  28.     <cfargument name="DoNotTrack" type="boolean" default="true" hint="Default: True Enables tracking + allows Twitter tailored suggestions" />
  29.     <cfargument name="FavoritesScreenName" type="string" default="" hint="Favorites timeline screen name" />
  30.     <cfargument name="FavoritesUserID" type="string" default="" hint="Favorites timeline user ID" />
  31.     <cfargument name="Height" type="numeric" default="0" hint="Default: 600 [min 200]" />
  32.     <cfargument name="Language" type="string" default="" hint="2 Letter ISO 639-1 Language Code" />
  33.     <cfargument name="Linkcolor" type="string" default="" hint="Default: 0000ff [Valid HEX color]" />
  34.     <cfargument name="ListID" type="string" default="" hint="List ID" />
  35.     <cfargument name="ListOwnerID" type="string" default="" hint="List owner ID" />
  36.     <cfargument name="ListOwnerScreenName" type="string" default="" hint="List owner screen name" />
  37.     <cfargument name="ListSlug" type="string" default="" hint="Suggested User List" />
  38.     <cfargument name="Related" type="string" default="" hint="Comma-separated list of related user screen names" />
  39.     <cfargument name="ScreenName" type="string" default="" hint="Twitter Screen Name" />  
  40.     <cfargument name="searchQuery" type="string" default="" hint="Query string or hashtag (overrides HREF)" />
  41.     <cfargument name="ShowReplies" type="boolean" default="false" hint="Default: false - Shows replies to posts" />
  42.     <cfargument name="Theme" type="string" default="" hint="Default: light. Customized theme [dark/light]" />
  43.     <cfargument name="Tweetlimit" type="numeric" default="0" hint="Default: 20 [1-20]" />
  44.     <cfargument name="UserID" type="string" default="" hint="Twitter User ID" />
  45.     <CFSET VAR local = structNew() />
  46.     <CFSET local.TwitterTimeline = StructNew() />
  47.     <CFSET local.tempCode = "" />
  48.     <CFSET local.AnchorTextDefault = "" />
  49.     <CFSET local.ColorRegex = "^(##([\dA-F]{3}|[\dA-F]{6})|([\dA-F]{3}|[\dA-F]{6}))$" />
  50.     <CFSET local.Params = ArrayNew(1) />
  51.  
  52.     <!--- Trim values ---> 
  53.     <CFLOOP COLLECTION="#arguments#" ITEM="thisAttribute"><CFSET arguments[thisAttribute] = trim(arguments[thisAttribute]) /></CFLOOP>
  54.  
  55.     <!--- Build data parameters --->
  56.     <CFSET ArrayAppend(local.Params, 'data-widget-id="#arguments.WidgetID#"') />
  57.     <CFIF VAL(arguments.Width) GTE 180 AND VAL(arguments.Width) LTE 520>
  58.         <CFSET ArrayAppend(local.Params, 'width="#VAL(arguments.Width)#"') />
  59.     </CFIF>
  60.     <CFIF LEN(arguments.searchQuery)>
  61.         <CFSET arguments.HREF = "https://twitter.com/search?q=#URLEncodedFormat(arguments.searchQuery)#" />
  62.         <CFIF NOT LEN(arguments.AnchorText)>
  63.             <CFSET arguments.AnchorText = arguments.searchQuery />
  64.         </CFIF>
  65.     <CFELSEIF isvalid("URL", trim(arguments.HREF)) AND NOT LEN(arguments.AnchorText)>
  66.         <CFSET arguments.AnchorText = Replacenocase(arguments.HREF, "https://twitter.com/","@") />
  67.         <CFSET arguments.AnchorText = Replacenocase(arguments.AnchorText, "http://twitter.com/","@") />
  68.         <CFSET arguments.AnchorText = "Tweets by/from " & arguments.AnchorText />
  69.     </CFIF>
  70.     <CFIF isvalid("URL", arguments.HREF)>
  71.         <CFSET ArrayAppend(local.Params, 'href="#arguments.HREF#"') />
  72.     <CFELSE>
  73.         <CFSET ArrayAppend(local.Params, 'href="##"') />
  74.     </CFIF>
  75.     <CFIF LEN(arguments.Chrome)>
  76.         <CFSET ArrayAppend(local.Params, 'data-chrome="#Replace(arguments.Chrome,","," ","all")#"') />
  77.     </CFIF>
  78.     <CFIF ListFindNocase("polite,assertive", arguments.ARIA)>
  79.         <CFSET ArrayAppend(local.Params, 'data-aria-polite="#lcase(arguments.ARIA)#"') />
  80.     </CFIF>
  81.     <CFSET arguments.Bordercolor = replace(arguments.Bordercolor, "##", "")>
  82.     <CFIF ArrayLen(REMatchNoCase(local.ColorRegex, arguments.Bordercolor)) GT 0>
  83.         <CFSET ArrayAppend(local.Params, 'data-border-color="###arguments.Bordercolor#"') />
  84.     </CFIF>
  85.     <CFIF LEN(Trim(arguments.searchQuery))>
  86.         <CFSET arguments.AnchorText = "Tweets about " & Trim(arguments.searchQuery) />
  87.     </CFIF>
  88.     <CFIF YesNoFormat(arguments.DoNotTrack)>
  89.         <CFSET ArrayAppend(local.Params, 'data-dnt="true"') />
  90.     </CFIF>
  91.     <CFIF LEN(arguments.FavoritesScreenName)>
  92.         <CFSET ArrayAppend(local.Params, 'data-favorites-screen-name="#arguments.FavoritesScreenName#"') />
  93.     </CFIF>
  94.     <CFIF LEN(arguments.FavoritesUserID)>
  95.         <CFSET ArrayAppend(local.Params, 'data-favorites-user-id="#arguments.FavoritesUserID#"') />
  96.     </CFIF>
  97.     <CFIF VAL(arguments.Height) GTE 200>
  98.         <CFSET ArrayAppend(local.Params, 'height="#VAL(arguments.Height)#"') />
  99.     </CFIF>
  100.     <CFIF Listfindnocase("aa,ab,af,am,an,ar,as,ay,az,ba,be,bg,bh,bi,bn,bo,br,ca,co,cs,cy,da,de,dz,el,en,eo,es,et,eu,fa,fi,fj,fo,fr,fy,ga,gd,gl,gn,gu,gv,ha,he,hi,hr,ht,hu,hy,ia,id,ie,ii,ik,in,io,is,it,iu,iw,ja,ji,jv,ka,kk,kl,km,kn,ko,ks,ku,ky,la,li,ln,lo,lt,lv,mg,mi,mk,ml,mn,mo,mr,ms,mt,my,na,ne,nl,no,oc,om,or,pa,pl,ps,pt,qu,rm,rn,ro,ru,rw,sa,sd,sg,sh,si,sk,sl,sm,sn,so,sq,sr,ss,st,su,sv,sw,ta,te,tg,th,ti,tk,tl,tn,to,tr,ts,tt,tw,ug,uk,ur,uz,vi,vo,wa,wo,xh,yi,yo,zh,zh,zu", arguments.Language)>
  101.         <CFSET ArrayAppend(local.Params, 'data-lang="#lcase(arguments.Language)#"') />
  102.     </CFIF>
  103.     <CFSET arguments.Linkcolor = replace(arguments.Linkcolor, "##", "")>
  104.     <CFIF ArrayLen(REMatchNoCase(local.ColorRegex, arguments.Linkcolor)) GT 0>
  105.         <CFSET ArrayAppend(local.Params, 'data-link-color="###arguments.Linkcolor#"') />
  106.     </CFIF>
  107.     <CFIF LEN(arguments.ListID)>
  108.         <CFSET ArrayAppend(local.Params, 'data-list-id="#arguments.ListID#"') />
  109.     </CFIF>
  110.     <CFIF LEN(arguments.ListOwnerID)>
  111.         <CFSET ArrayAppend(local.Params, 'data-list-owner-id="#arguments.ListOwnerID#"') />
  112.     </CFIF>
  113.     <CFIF LEN(arguments.ListOwnerScreenName)>
  114.         <CFSET ArrayAppend(local.Params, 'data-list-owner-screen-name="#arguments.ListOwnerScreenName#"') />
  115.     </CFIF>
  116.     <CFIF LEN(arguments.ListSlug)>
  117.         <CFSET ArrayAppend(local.Params, 'data-list-slug="#arguments.ListSlug#"') />
  118.     </CFIF>
  119.     <CFIF LEN(arguments.Related)>
  120.         <CFSET ArrayAppend(local.Params, 'data-data-related="#arguments.Related#"') />
  121.     </CFIF>
  122.     <CFIF LEN(arguments.ScreenName)>
  123.         <CFSET ArrayAppend(local.Params, 'data-screen-name="#arguments.ScreenName#"') />
  124.     </CFIF>
  125.     <CFIF YesNoFormat(arguments.ShowReplies)>
  126.         <CFSET ArrayAppend(local.Params, 'data-show-replies="true"') />
  127.     </CFIF>
  128.     <CFIF Listfindnocase("light,dark", arguments.Theme)>
  129.         <CFSET ArrayAppend(local.Params, 'data-theme="#lcase(arguments.Theme)#"') />
  130.     </CFIF>
  131.     <CFIF VAL(arguments.Tweetlimit) GTE 1 AND VAL(arguments.Tweetlimit) LTE 20>
  132.         <CFSET ArrayAppend(local.Params, 'data-tweet-limit="#VAL(arguments.Tweetlimit)#"') />
  133.     </CFIF>
  134.     <CFIF LEN(arguments.UserID)>
  135.         <CFSET ArrayAppend(local.Params, 'data-user-id="#arguments.UserID#"') />
  136.     </CFIF>
  137.  
  138.     <!--- Generate HTML --->
  139.     <CFSAVECONTENT VARIABLE="local.tempCode"><CFOUTPUT>
  140.         <a class="twitter-timeline" #ArrayToList(local.Params, " ")#>#arguments.AnchorText#</a>
  141.     </CFOUTPUT></CFSAVECONTENT>
  142.     <CFSET local.TwitterTimeline['HTML'] = trim(local.tempCode)>
  143.     <CFSAVECONTENT VARIABLE="local.tempCode"><CFOUTPUT>
  144.         <script type="text/javascript">!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
  145.     </CFOUTPUT></CFSAVECONTENT>
  146.     <CFSET local.TwitterTimeline['JS'] = trim(local.tempCode)>
  147.     <CFSET local.TwitterTimeline['EmbedCode'] = local.TwitterTimeline['HTML'] & local.TwitterTimeline['JS']>
  148.    
  149.     <cfreturn local.TwitterTimeline />
  150.  
  151. </cffunction>
Advertisement
Add Comment
Please, Sign In to add comment