Publicada originalmente em 28 de Janeiro de 2012
.
Texto corrigido e actualizado com novas ligações.
Publiquei este artigo no Mocheco⊗Marafado em Janeiro de 2012, depois de pedir autorização ao autor do script para fazer uma tradução do mesmo para Português.
Era um script que além de permitir colocar os comentários mais recentes na barra lateral do Blogger, ainda tinha a opção de apresentar o avatar de quem comentara junto com o nome...
Isso na altura era uma novidade que eu quis partilhar com os meus visitantes, especialmente com aqueles que poderiam aproveitar uma versão em Português.
NOTA: O texto seguinte está praticamente como o escrevi há cerca de 10 anos...
Tentei actualizar este artigo onde necessário, mas resolvi mexer o menos possivel para não estragar o sentido de alguns dos comentários deixados então e que restaurei neste artigo... e também para recordar/mostrar alguma da confusão que alguns bloguistas enfrentaram quando o Blogger faz algumas sérias modificações na plataforma alguns anos atrás.
Estes últimos dias tem sido uma loucura brincando com os códigos do novo sistema de comentários do Blogger, pelo meio criei um novo template mas depois o Blogger editou o código base da plataforma (suponho que para corrigir alguns bugs entretanto descobertos), e isso estragou toda a personalização que tinha feito e tive que refazer tudo.
Mas, e como mesmo quando as coisas não correm bem há sempre alguma coisa boa no meio, ao procurar soluções para os problemas que tive para corrigir certas coisas, aconteceu de descobrir um excelente blogue de tutoriais e dicas para o Blogger onde vi algo que já tinha tentado fazer sem sucesso: Um gadget com os comentários mais recentes na barra lateral.
Sim. Existem milhares desses gadgets por essa blogosfera fora, cada um com uma maneira diferente de mostrar os comentários recentes... mas o que me chamou a atenção neste gadget foi que além dos comentários recentes com a ligação para o comentário em si e o nome de quem deixou o dito comentário, também mostra o avatar de quem comentou com a ligação para o perfil (se disponível).
O blogue é Yet Another Blogger Tips Blog (que recomendo seguir para se manterem actualizados sobre esta e outras dicas publicadas por lá
) e onde podem encontrar o tutorial sobre como colocar o gadget dos comentários recentes com avatar da autoria do MS-potilas.
Podem ver o elemento a funcionar aqui neste blogue na barra lateral (Com um estilo bem diferente do apresentado na imagem deste artigo de 2012), ou no Quadradinhos INk, onde também o instalei.
Claro que fiz algumas modificações no estilo CSS para se adaptar ao meu blogue, mas basicamente não é necessário modificar muita coisa.
Da maneira como está o código, basta copiar e colocar num novo elemento HTML/JavaScript na barra lateral.
Abaixo podem ver o código já traduzido e com os estilos CSS que utilizo[utilizava em 2012] aqui neste blogue:
Ver Código
01 | <style type= "text/css" > |
04 | background : rgba( 0 , 0 , 0 , 0.5 ); |
05 | padding : 5px 5px 5px 25px ; |
06 | border : 1px inset #4be ; |
09 | .recent-comment a:hover { |
12 | .recent-comment:hover { |
13 | background : rgba( 0 , 0 , 0 , 0.8 ); |
14 | border : 1px outset #4be ; |
15 | box-shadow: 0 0 5px #abc , inset 0 0 5px #fff ; |
17 | .recent-comment-admin { |
21 | margin : 4px 0 -30px 5px ; |
25 | .recent-comment-header { |
29 | font-variant : small-caps ; |
32 | .recent-comment-header a { |
36 | .recent-comment-header a:hover { |
42 | border-top : 1px dashed #888 ; |
45 | .recent-comment-footer { |
50 | .recent-comment-footer a{ |
54 | border : 1px ridge #ff0 ; |
58 | .recent-comment-footer a:hover{ |
61 | border : 1px outset #ff0 ; |
E a parte javascript:
001 | <script type= "text/javascript" > |
006 | var numRecentComments = 10; |
008 | var maxCommentChars = 90; |
009 | var maxPostTitleChars = 0; |
011 | var txtWrote = 'disse:' ; |
012 | var txtMore = 'Ler Mais >>' ; |
013 | var txtTooltip = '[user] em "[title]" - [date MM/dd/yyyy hh:mm]' ; |
014 | var txtAnonymous = 'Anónimo' ; |
020 | var trueAvatars = true ; |
022 | var urlMyProfile = '' ; |
024 | var cropAvatar = true ; |
026 | var urlNoAvatar = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu5b6Rzno8zmUWW9_5dkcjQTbSM6eiXY8Kroc4bddrfots190bLKCc01nSP7j-qWxPXQoSTgolu8orlTxtnwU8LJ5kTEcG4oDHUGOihuoAZVNFEfnqFe-ws-qpQIViLflTZRVI4cKB9v0/" +sizeAvatar+ "/avatar_blue_m_96.png" ; // http://www.blogger.com/img/avatar_blue_m_96.png resizeable (avatar por defeito quando não existe avatar e aparece o icone do blogger. se alterar, colocar /s "+sizeAvatar+" / tal como demonstrado acima para que script altere o tamanho automaticamente conforme o tamanho que colocamos em var sizeAvatar) |
028 | var urlAnoAvatar = 'http://www.gravatar.com/avatar/00000000000000000000000000000000?d=mm&s=' + sizeAvatar; // se o comentador é anónimo ou comenta com nome/url (alterar para ficar como em var urlNoAvatar se quiserem colocar um avatar personalizado, mas em vez de "url" colocar 'url' ) |
029 | var maxResultsPosts = "" ; |
030 | var maxResultsComments = "" ; |
033 | function replaceVars(text, user, title, date) { |
034 | text = text.replace( '[user]' , user); |
035 | text = text.replace( '[date]' , date.toLocaleDateString()); |
036 | text = text.replace( '[datetime]' , date.toLocaleString()); |
037 | text = text.replace( '[time]' , date.toLocaleTimeString()); |
038 | text = text.replace( '[title]' , title.replace(/\"/g, '"' )); |
039 | var i = text.indexOf( "[date " ); |
041 | var format = /\[date\s+(.+?)\]/.exec(text)[1]; |
043 | var txtDate = format.replace(/yyyy/i, date.getFullYear()); |
044 | txtDate = txtDate.replace(/yy/i, date.getFullYear().toString().slice(-2)); |
045 | txtDate = txtDate.replace( "MM" , String( "0" +(date.getMonth()+1)).slice(-2)); |
046 | txtDate = txtDate.replace( "mm" , String( "0" +date.getMinutes()).slice(-2)); |
047 | txtDate = txtDate.replace( "ss" , String( "0" +date.getSeconds()).slice(-2)); |
048 | txtDate = txtDate.replace( "dd" , String( "0" +date.getDate()).slice(-2)); |
050 | txtDate = txtDate.replace( "hh" , String( "0" +date.getHours()).slice(-2)); |
052 | text = text.replace(/\[date\s+(.+?)\]/, txtDate) |
057 | if (urlMyProfile == "" ) { |
058 | var elements = document.getElementsByTagName( "*" ); |
059 | var expr = /(^| )profile-link( |$)/; |
060 | for ( var i=0 ; i<elements.length ; i++) |
061 | if (expr.test(elements[i].className)) { |
062 | urlMyProfile = elements[i].href; |
066 | function getPostUrlsForComments(json) { |
067 | for ( var i = 0 ; i < json.feed.entry.length ; i++ ) { |
068 | var entry = json.feed.entry[i]; |
069 | for ( var k = 0; k < entry.link.length; k++ ) { |
070 | if (entry.link[k].rel == 'alternate' ) { |
071 | href = entry.link[k].href; |
075 | urlToTitle[href] = entry.title.$t; |
078 | function showRecentComments(json) { |
079 | var postHandled = {}; |
082 | while (numPerPost < numRecentComments) { |
083 | for ( var i = 0 ; i < json.feed.entry.length ; i++ ) { |
084 | var entry = json.feed.entry[i]; |
085 | if (entry[ "thr$in-reply-to" ]) { |
086 | if (!postHandled[entry[ "thr$in-reply-to" ].href]) |
087 | postHandled[entry[ "thr$in-reply-to" ].href] = 1; |
089 | postHandled[entry[ "thr$in-reply-to" ].href]++; |
090 | if (postHandled[entry[ "thr$in-reply-to" ].href] <= numPerPost) |
094 | if (j >= numRecentComments) |
100 | if (numRecentComments == numPerPost) |
105 | for ( var i = 0 ; j < numRecentComments && i < json.feed.entry.length ; i++ ) { |
106 | var entry = json.feed.entry[i]; |
107 | if (numPerPost && postHandled[entry[ "thr$in-reply-to" ].href] && postHandled[entry[ "thr$in-reply-to" ].href] >= numPerPost) |
109 | if (entry[ "thr$in-reply-to" ]) { |
110 | if (!postHandled[entry[ "thr$in-reply-to" ].href]) |
111 | postHandled[entry[ "thr$in-reply-to" ].href] = 1; |
113 | postHandled[entry[ "thr$in-reply-to" ].href]++; |
116 | for ( var k = 0; k < entry.link.length; k++ ) { |
117 | if (entry.link[k].rel == 'alternate' ) { |
118 | href = entry.link[k].href; |
122 | if (href== '' ) {j--; continue ; } |
123 | var hrefPost = href.split( "?" )[0]; |
125 | if ( "content" in entry) comment = entry.content.$t; |
126 | else comment = entry.summary.$t; |
127 | comment = comment.replace(/<br[^>]*>/ig, " " ); |
128 | comment = comment.replace(/<\S[^>]*>/g, "" ); |
130 | if (urlToTitle[hrefPost]) postTitle=urlToTitle[hrefPost]; |
132 | postTitle = hrefPost.split( "/" )[5].split( ".html" )[0].replace(/_\d{2}$/, "" ); |
133 | postTitle = postTitle.replace(/-/g, " " ); |
134 | postTitle = postTitle[0].toUpperCase() + postTitle.slice(1); |
136 | if (maxPostTitleChars && postTitle.length > maxPostTitleChars) { |
137 | postTitle = postTitle.substring(0, maxPostTitleChars); |
138 | var indexBreak = postTitle.lastIndexOf( " " ); |
139 | postTitle = postTitle.substring(0, indexBreak) + "..." ; |
142 | var authorName = entry.author[0].name.$t; |
144 | if (entry.author[0].uri && entry.author[0].uri.$t != "" ) |
145 | authorUri = entry.author[0].uri.$t; |
147 | var avaimg = urlAnoAvatar; |
148 | var bloggerprofile = "https://www.blogger.com/profile/" ; |
149 | if (trueAvatars && entry.author[0].gd$image && entry.author[0].gd$image.src && authorUri.substr(0,bloggerprofile.length) == bloggerprofile) |
150 | avaimg = entry.author[0].gd$image.src; |
152 | var parseurl = document.createElement( 'a' ); |
153 | if (authorUri != "" ) { |
154 | parseurl.href = authorUri; |
155 | avaimg = 'https://www.google.com/s2/favicons?domain=' + parseurl.hostname; |
158 | if (urlMyProfile != "" && authorUri == urlMyProfile && urlMyAvatar != "" ) |
159 | avaimg = urlMyAvatar; |
160 | if (avaimg == "https://img2.blogblog.com/img/b16-rounded.gif" && urlNoAvatar != "" ) |
161 | avaimg = urlNoAvatar; |
162 | var newsize= "s" +sizeAvatar; |
163 | avaimg = avaimg.replace(/\/s\d\d+-c\ |
164 | if (cropAvatar) newsize+= "-c" ; |
165 | avaimg = avaimg.replace(/\/s\d\d+(-c){0,1}\ |
166 | if (authorName == 'Anonymous' && txtAnonymous != '' && avaimg == urlAnoAvatar) |
167 | authorName = txtAnonymous; |
168 | var imgcode = '<img height="' +sizeAvatar+ '" width="' +sizeAvatar+ '" title="' +authorName+ '" src="' +avaimg+ '" />' ; |
169 | if (authorUri!= "" ) imgcode = '<a href="' +authorUri+ '">' +imgcode+ '</a>' ; |
171 | if (urlMyProfile != "" && authorUri == urlMyProfile) |
172 | clsAdmin = " recent-comment-admin" ; |
173 | var datePart = entry.published.$t.match(/\d+/g); |
174 | var cmtDate = new Date(datePart[0],datePart[1]-1,datePart[2],datePart[3],datePart[4],datePart[5]); |
176 | var txtHeader = txtWrote; |
177 | if (txtWrote.indexOf( '[' )==-1) |
178 | txtHeader = authorName + ' ' + txtWrote; |
180 | txtHeader = replaceVars(txtHeader, authorName, postTitle, cmtDate); |
182 | var tooltip = replaceVars(txtTooltip, authorName, postTitle, cmtDate); |
184 | document.write( '<div title="' +tooltip+ '" class="recent-comment' +clsAdmin+ '">' ); |
185 | document.write( '<div title="' +tooltip+ '" class="recent-comment-header' +clsAdmin+ '"><div title="' +tooltip+ '" class="recent-comment-ico' +clsAdmin+ '">' +imgcode+ '</div><a title="' +tooltip+ '" href="' + href + '">' + txtHeader + ' </a></div>' ); |
186 | if (comment.length < maxCommentChars) |
187 | document.write( '<div title="' +tooltip+ '" class="recent-comment-body' +clsAdmin+ '">' + comment + '</div>' ); |
189 | comment = comment.substring(0, maxCommentChars); |
190 | var indexBreak = comment.lastIndexOf( " " ); |
191 | comment = comment.substring(0, indexBreak); |
192 | document.write( '<div title="' +tooltip+ '" class="recent-comment-body' +clsAdmin+ '">' + comment + '...</div>' ); |
194 | var moretext = replaceVars(txtMore, authorName, postTitle, cmtDate); |
195 | document.write( '<div title="' +tooltip+ '" class="recent-comment-footer' +clsAdmin+ '"><a title="' +tooltip+ '" href="' + href + '">' + moretext + '</a></div>' ); |
198 | document.write( '<div style="clear:both;"></div></div>' ); |
203 | document.write( '<script type="text/javascript" src="https://' +window.location.hostname+ '/feeds/posts/summary?redirect=false' +maxResultsPosts+ '&alt=json-in-script&callback=getPostUrlsForComments"></' + 'script>' ); |
204 | document.write( '<script type="text/javascript" src="https://' +window.location.hostname+ '/feeds/comments/default?redirect=false' +maxResultsComments+ '&alt=json-in-script&callback=showRecentComments"></' + 'script>' );</script> |
Ocultar Código
E é isso...
Para colocar o gadget em português, basta copiar ambos os código acima e colar num novo elemento HTML/JavaScript na barra lateral.
Tentei deixar o código comentado para ser fácil de entender como personalizar e configurar.
Caso prefiram colocar a versão em inglês, sigam as indicações no artigo original.
Que acham?
E... como estamos no mês do Natal...
O Natal é daqui a
-835
Dias
0-9
Horas
0-1
Minutos
0-32
Segundos
E por hoje é tudo.
Até breve. 
Olá. Pelo visto eu não estou sozinha nas Peripécias com o Blog, kkk eu sei bem o que você passou, é chato mesmo depois de tudo pronto ter que arrumar tudo. O meu Blog existe pela misericórdia do Eterno pois tenho arranjado as coisas lá meio sem jeito. tem alguns tutoriais meio difíceis de netender, então dou meu jeitinho brasileiro. Parabéns pelo seu Blog, muito moderno.Quem não conhece o trabalho que um Blogueiro tem nunca vai valorizar, por não conhecer mas é uma Luta que tem recompensa, como a de conquistar mais um Amigo, isso não tem dinheiro que pague.
ResponderEliminarDesculpe por não estar votando assiduamente nas notícias, tem sido muito difícil adminstrar o tempo, mas quando puder estarei visitando. Me faz uma visita também tá? Link no meu Perfil.
Um abraço!!
Olá e bem vinda aqui ao meu canto.


EliminarEspero que visite mais vezes.
Quanto às dores de cabeça que um blogue dá, especialmente para quem como eu gosta de brincar com os códigos... bem, só posso dizer que é recompensador. Não só pelo motivo que menciona mas também pelo prazer de ver a nossa visão tomar forma.
Abraço.
Ainda bem que estás de volta às dicas, já te disse que tens um talento natural para isto ;).
ResponderEliminarComo estou a testar um template novo, vou experimentar este gadget também.
Sabias que não se consegue ver o teu blog no IE9??
Um abraço.
Luca, pelo que tenho lido, esse é um dos bugs provocado pelo novo sistema de comentários do blogger. Só ocorre em alguns blogues, e embora eu tenha procurado uma solução, confesso que não me preocupei muito porque deixei de ligar ao IE.

EliminarNo meu PC, nem consigo que o danado arranque. xD
Abraço.
Olá, gostei e estou usando.
ResponderEliminarÓtima postagem.
te mais!
Olá e bem-vindo aqui ao meu estaminé.


EliminarFico contente que tenhas gostado.
Abraço.