1(function($){ 2 $.fn.twitterFetcher = function (settings) { 3 settings = jQuery.extend({ 4 avatar: "default", 5 uniqueId: null, 6 widgetid: null, 7 maxTweets: 20, 8 enableLinks: true, 9 showImages: false, 10 showRetweet: true, 11 lang: "en", 12 enablePermalink: true 13 }, settings); 14 15 if (typeof settings.widgetid === "undefined" || settings.widgetid === null) { 16 console.error("TWITLINE: WIDGETID MUST BE DEFINED!"); 17 return false; 18 } 19 20 var $target = $(this); 21 22 var strTrim = function (t, l) { 23 t = t.substring(0, l); 24 return(t); 25 }; 26 27 window.twtCallback = function (response) { 28 var datefix = function(dateString) { 29 var dateStringISO = dateString.replace(/([+\-]\d\d)(\d\d)$/, "$1:$2"); 30 d = new Date(dateStringISO); 31 var hh = (d.getHours()) > 9 ? 32 (d.getHours()) : "0" + (d.getHours()); 33 var mm = (d.getMinutes()) > 9 ? 34 (d.getMinutes()) : "0" + (d.getMinutes()); 35 var day = (d.getDate() + 1) > 9 ? 36 (d.getDate()) : "0" + (d.getDate()); 37 var month = d.getMonth(); 38 var year = d.getFullYear(); 39 var month_it = ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"]; 40 var month_en = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dec"]; 41 month = settings.lang === "it" ? month_it[month] : month_en[month]; 42 var d = day + " " + month + " " + year + " "; 43 return d; 44 }; 45 function w(a) { 46 return a.replace(/<b[^>]*>(.*?)<\/b>/gi, function (a, f) { 47 return f; 48 }).replace(/class=".*?"|data-query-source=".*?"|dir=".*?"|rel=".*?"/gi, ""); 49 } 50 51 var list = $(response.body).find('*[data-scribe="component:tweet"]'); 52 var user = [], usrLnk = [], usrName = [], a = [], b = [], avatarImg = [], d = [], e = [], p = []; 53 54 list.each(function () { 55 var cur = $(this); 56 57 user.push(cur.find("[data-scribe='element:name']").text()); 58 usrLnk.push(cur.find("[data-scribe='element:user_link']").attr("href")); 59 60 var retweet = cur.find(".retweet-credit").html() != undefined; 61 62 if (!settings.showRetweet && retweet) { 63 return true; 64 }; 65 66 var shortUrl = cur.find('a[data-scribe="element:url"]'); 67 if (shortUrl.length > 0) { 68 shortUrl = shortUrl.attr("href"); 69 //shortUrl = strTrim(shortUrl, 50) + "..."; 70 cur.find('a[data-scribe="element:url"]').empty().append(shortUrl); 71 } 72 a.push(cur.find(".timeline-Tweet-text").html()); 73 b.push(cur.find(".data-tweet-id")); 74 75 avatarImg.push( 76 settings.avatar!=="default"? 77 settings.avatar : cur.find("[data-scribe='element:avatar']").attr("data-src-1x") 78 ); 79 80 p.push(cur.find('[data-scribe="element:mini_timestamp"]').attr("href")); 81 usrName.push(cur.find('[data-scribe="element:screen_name"]').html()); 82 d.push(datefix(cur.find(".dt-updated").attr("datetime"))); 83 e.push(""); //TODO: FIND IMAGES IN POSTS => TRY TO POST ONE TO GET THIS! 84 if (a.length === parseInt(settings.maxTweets)) 85 return false; 86 }); 87 88 var html = '<div class="twt-ct">\n'; 89 90 for (var i = 0; i < a.length; i++) { 91 html += '<div class="twt-item row">\n' + 92 '<i class="fa fa-twitter"></i>\n'+ 93 94 '<div class="tw-main">\n'+ 95 96 '<div class="tw-caption">\n'+ 97 98 '\n\n'; 99 100 if(settings.enablePermalink===true){ 101 html += '<a class="permalink" href="'+p[i]+'">\n' + 102 '<span class="twt-date">' + d[i] + '</span>\n'+ 103 '</a>\n'; 104 } 105 else{ 106 html += '<span class="twt-date">' + d[i] + '</span>\n'; 107 } 108 html+='</div>\n'+ 109 110 '<div class="twt-desc">\n'+ 111 '<div class="">\n'+ 112 w(a[i]) + '\n' + 113 '</div>\n'; 114 if(settings.showImages===true){ 115 html+=e[i] || ""; 116 } 117 html+= '</div>\n'; 118 html+='</div>\n'+ 119 '</div>\n'; 120 } 121 122 html += "</div>"; 123 $(html).find("*").removeAttr("data-scribe"); 124 $target.append(html); 125 126 }; 127 128 return this.each(function () { 129 var protocol = window.location.protocol==="https:"? "https":"http" 130 var c = document.createElement("script"); 131 c.type = "text/javascript"; 132 c.src = protocol+"://cdn.syndication.twimg.com/widgets/timelines/" + settings.widgetid +"?&lang=" + (settings.lang || "en") + 133 "&callback=twtCallback&suppress_response_codes=true&rnd=" +Math.random(); 134 c.onerror = function () { 135 if (typeof settings.uniqueId === "undefined" || settings.uniqueId === null) { 136 $(window).trigger("twt-error-" + settings.uniqueId); 137 }
138 console.warn("GET TWITS ERROR!"); 139 }; 140 c.onload = function () { 141 console.info("GET TWITS OK!"); 142 }; 143 c.onreadystatechange = function () { 144 console.info("RSC: ", this.status); 145 }; 146 document.getElementsByTagName("head")[0].appendChild(c); 147 }); 148}; 149 150})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.