Hospedar JavaScript no Blogger / Blogspot


Melhor que isso, só a hospedagem no 7 estrelas Burj Al Arab...
OBS: Se você está procurando hospedagem grátis para arquivos externos, dê uma olhada neste post: Armazene, Sincronize e Compartilhe na Faixa
Uma problema antigo que atormenta alguns usuários avançados do Blogspot é quanto a hospedagem externa de arquivos JavaScript. Como o Blogger não disponibiliza um abrigo para estes arquivos, muita gente acaba recorrendo a serviços gratuitos de terceiros para hospedar externamente estes códigos.

Mas a hospedagem externa de arquivos JavaScript pode gerar alguns problemas para os usuários do Blogger. Caso o serviço onde seu arquivo JavaScript está hospedado apresentar alguma instabilidade, isto com certeza comprometerá o desempenho do seu site.

Além disso, estes serviços externos podem ser descontinuados, como aconteceu com o Google Pages, ou sofrer alterações no seu funcionamento que acarretem perdas de funcionalidades e exijam revisões de código, como está acontecendo agora com SkyDrive.

Mas eu não me incomodo mais com isso, pois encontrei uma forma de "hospedar" estes arquivos no próprio Blogspot. Não, o Blogger (ainda) não lançou um recurso de hospedagem de arquivos JavaScript exclusivo para beta testers, é POG compulsivo mesmo!

Incluindo JavaScript diretamente no código do template do Blogger / Blogspot:

Vamos tomar como exemplo um tutorial compulsivo que hospede arquivos JavaScript externamente e adaptá-lo para incluir este código diretamente no HTML do template. Podemos pegar o Menu em Abas, como exemplo.

Em determinado ponto no tutorial, pede-se que seja hospedado externamente este arquivo JavaScript e que seja incluí-da a linha de código a seguir antes da tag </HEAD> no HTML do template:

<script src='http://URL_DO_ARQUIVO/tabber.js' type='text/javascript'/>
O que precisamos fazer é copiar todo conteúdo do arquivo JavaScript e incluí-lo diretamente no código HTML do template. Para isso vamos utilizar delimitadores específicos no início e no final do código, que fazem com que o Blogger permita que o template seja salvo com o JavaScript embutido.

Depois de incluir os delimitadores e remover os comentários do autor (mantendo sua licença de uso) obtemos um extenso código JavaScript que pode ser incluído no mesmo local onde incluímos a URL apontando para o arquivo externo. Ou seja, antes da tag </HEAD> no HTML do template:
<script type='text/javascript'>
  //<![CDATA[

/*==================================================
  $Id: tabber.js,v 1.9 2006/04/27 20:51:51 pat Exp $
  tabber.js by Patrick Fitzgerald pat@barelyfitz.com

  Documentation can be found at the following URL:
  http://www.barelyfitz.com/projects/tabber/

  License (http://www.opensource.org/licenses/mit-license.php)
  Copyright (c) 2006 Patrick Fitzgerald

  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

  ==================================================*/

function tabberObj(argsObj)
{
  var arg;
  this.div = null;
  this.classMain = "tabber";
  this.classMainLive = "tabberlive";
  this.classTab = "tabbertab";
  this.classTabDefault = "tabbertabdefault";
  this.classNav = "tabbernav";
  this.classTabHide = "tabbertabhide";
  this.classNavActive = "tabberactive";
  this.titleElements = ['h2','h3','h4','h5','h6'];
  this.titleElementsStripHTML = true;
  this.removeTitle = true;
  this.addLinkId = false;
  this.linkIdFormat = '<tabberid>nav<tabnumberone>';
  for (arg in argsObj) { this[arg] = argsObj[arg]; }
  this.REclassMain = new RegExp('\\b' + this.classMain + '\\b', 'gi');
  this.REclassMainLive = new RegExp('\\b' + this.classMainLive + '\\b', 'gi');
  this.REclassTab = new RegExp('\\b' + this.classTab + '\\b', 'gi');
  this.REclassTabDefault = new RegExp('\\b' + this.classTabDefault + '\\b', 'gi');
  this.REclassTabHide = new RegExp('\\b' + this.classTabHide + '\\b', 'gi');
  this.tabs = new Array();
  if (this.div) {
    this.init(this.div);
    this.div = null;
  }
}
tabberObj.prototype.init = function(e)
{
  var
  childNodes,
  i, i2,
  t,
  defaultTab=0,
  DOM_ul,
  DOM_li,
  DOM_a,
  aId,
  headingElement;
   if (!document.getElementsByTagName) { return false; }
  if (e.id) {
    this.id = e.id;
  }
   this.tabs.length = 0;
   childNodes = e.childNodes;
  for(i=0; i < childNodes.length; i++) {
      if(childNodes[i].className &&
      childNodes[i].className.match(this.REclassTab)) { 
      t = new Object();
      t.div = childNodes[i];
      this.tabs[this.tabs.length] = t;
      if (childNodes[i].className.match(this.REclassTabDefault)) {
    defaultTab = this.tabs.length-1;
      }
    }
  }
  DOM_ul = document.createElement("ul");
  DOM_ul.className = this.classNav; 
  for (i=0; i < this.tabs.length; i++) {
    t = this.tabs[i];
    t.headingText = t.div.title;
    if (this.removeTitle) { t.div.title = ''; }
    if (!t.headingText) {
      for (i2=0; i2<this.titleElements.length; i2++) {
    headingElement = t.div.getElementsByTagName(this.titleElements[i2])[0];
    if (headingElement) {
      t.headingText = headingElement.innerHTML;
      if (this.titleElementsStripHTML) {
        t.headingText.replace(/<br>/gi," ");
        t.headingText = t.headingText.replace(/<[^>]+>/g,"");
      }
      break;
    }
      }
    }

    if (!t.headingText) {
      t.headingText = i + 1;
    }
    DOM_li = document.createElement("li");
    t.li = DOM_li;
    DOM_a = document.createElement("a");
    DOM_a.appendChild(document.createTextNode(t.headingText));
    DOM_a.href = "javascript:void(null);";
    DOM_a.title = t.headingText;
    DOM_a.onclick = this.navClick;
    DOM_a.tabber = this;
    DOM_a.tabberIndex = i;
    if (this.addLinkId && this.linkIdFormat) {
      aId = this.linkIdFormat;
      aId = aId.replace(/<tabberid>/gi, this.id);
      aId = aId.replace(/<tabnumberzero>/gi, i);
      aId = aId.replace(/<tabnumberone>/gi, i+1);
      aId = aId.replace(/<tabtitle>/gi, t.headingText.replace(/[^a-zA-Z0-9\-]/gi, ''));
      DOM_a.id = aId;
    }
    DOM_li.appendChild(DOM_a);
    DOM_ul.appendChild(DOM_li);
  }
  e.insertBefore(DOM_ul, e.firstChild);
  e.className = e.className.replace(this.REclassMain, this.classMainLive);
  this.tabShow(defaultTab);
  if (typeof this.onLoad == 'function') {
    this.onLoad({tabber:this});
  }
  return this;
};
tabberObj.prototype.navClick = function(event)
{
  var
  rVal,
  a,
  self,
  tabberIndex,
  onClickArgs;
  a = this;
  if (!a.tabber) { return false; }
  self = a.tabber;
  tabberIndex = a.tabberIndex;
  a.blur();
  if (typeof self.onClick == 'function') {
    onClickArgs = {'tabber':self, 'index':tabberIndex, 'event':event};
    if (!event) { onClickArgs.event = window.event; }
    rVal = self.onClick(onClickArgs);
    if (rVal === false) { return false; }
  }
  self.tabShow(tabberIndex);
  return false;
};
tabberObj.prototype.tabHideAll = function()
{
  var i;
  for (i = 0; i < this.tabs.length; i++) {
    this.tabHide(i);
  }
};
tabberObj.prototype.tabHide = function(tabberIndex)
{
  var div;
  if (!this.tabs[tabberIndex]) { return false; }
  div = this.tabs[tabberIndex].div;
  if (!div.className.match(this.REclassTabHide)) {
    div.className += ' ' + this.classTabHide;
  }
  this.navClearActive(tabberIndex);
  return this;
};
tabberObj.prototype.tabShow = function(tabberIndex)
{
  var div;
  if (!this.tabs[tabberIndex]) { return false; }
  this.tabHideAll();
  div = this.tabs[tabberIndex].div;
  div.className = div.className.replace(this.REclassTabHide, '');
  this.navSetActive(tabberIndex);
  if (typeof this.onTabDisplay == 'function') {
    this.onTabDisplay({'tabber':this, 'index':tabberIndex});
  }
  return this;
};
tabberObj.prototype.navSetActive = function(tabberIndex)
{
  this.tabs[tabberIndex].li.className = this.classNavActive;
  return this;
};
tabberObj.prototype.navClearActive = function(tabberIndex)
{
  this.tabs[tabberIndex].li.className = '';
  return this;
};
function tabberAutomatic(tabberArgs)
{
  var
    tempObj,
    divs,
    i;
  if (!tabberArgs) { tabberArgs = {}; }
  tempObj = new tabberObj(tabberArgs);
  divs = document.getElementsByTagName("div");
  for (i=0; i < divs.length; i++) {
    if (divs[i].className &&
    divs[i].className.match(tempObj.REclassMain)) {  
      tabberArgs.div = divs[i];
      divs[i].tabber = new tabberObj(tabberArgs);
    }
  } 
  return this;
}
function tabberAutomaticOnLoad(tabberArgs)
{
  var oldOnLoad;
  if (!tabberArgs) { tabberArgs = {}; }
  oldOnLoad = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = function() {
      tabberAutomatic(tabberArgs);
    };
  } else {
    window.onload = function() {
      oldOnLoad();
      tabberAutomatic(tabberArgs);
    };
  }
}

if (typeof tabberOptions == 'undefined') {
    tabberAutomaticOnLoad();
} else {
  if (!tabberOptions['manualStartup']) {
    tabberAutomaticOnLoad(tabberOptions);
  }
}

  //]]>
</script>
Observe que as linhas destacadas em vermelho acima, correspondem aos delimitadores utilizados para permitir que o template seja salvo sem erros após a inclusão do código JavaScript no Blogger.

Outro exemplo onde podemos observar o código JavaScript embutido no HTML do template do Blogspot é no tutorial compulsivo: Artigos relacionados no Blogger.

OBS: Há quem diga que hospedar os arquivos JavaScript desta forma, possa fazer com que o carregamento da página torne-se lento, pois o tamanho do código do template tende a aumentar consideravelmente. Mas, a experiência me mostrou que diversas conexões externas durante o carregamento da página podem ser ainda piores.

Comentários

  1. POG é ótimo. Programador é isso, é achar o problema, estudá-lo e resolvê-lo. Independente de como seja essa resolução :o)

    Abs,
    @monthiel

    ResponderExcluir
  2. E hospedar no http://code.google.com/hosting/ não rola?

    ResponderExcluir
  3. É Compulsivo como você disse no Dicas Blogger:

    "Estou preparando um tutorial que vai resolver este problema, na maioria dos casos, de uma vez por todas..."

    Pronto, resolvido...rs

    ResponderExcluir
  4. Ei Compulsivo,
    Tudo bem com você?
    Posso dar uma sugestão? Já estou falando... Rsss...
    Para o Java do menu em abas existe a opção minimized neste link: tabber-minimized.js que a pessoa pode também copiar e colar no template do blogger, porém ocupando menos espaço.
    Outra coisa: Existe também um site onde minimiza os códigos java assim como aquele do CSS o link é este aqui: JS Minifier
    Grande abraço para você e tenha um ótimo fim de semana.

    ResponderExcluir
  5. Grande @Áurea, assim o post fica menor ;-)

    []'s
    Compulsivo

    ResponderExcluir
  6. caramba eu sou medium! eu sonhei que algum blog famoso ia descobrir um jeito de inserir java internamente, ai foi e

    BANN!

    deu compulsivo xD.
    Vo testa aqui com o MiniPosts do estilo revista, ta muito pesadão sabe . .

    ResponderExcluir
  7. Compulsivo ainda acho que as outras formas de Hospedagens são melhores...

    Ficaria bem bacana ser o blogger hospeda-se pra gente ;-)

    ResponderExcluir
  8. Bela dica Compulsivo, eu prefiro ainda hospedar externamente, eu uso o Google Pages, que infelizmente não aceite novos membros (Ui!), pôs migrado para o Google site. como meu template não é uma arvore de natal, fica de bom tamanho

    Falando nisso tem blogs que enchem de Imagens coloca milhões de banner de parceiros e depois querem que o servidor faça milagre.

    Até!

    ResponderExcluir
  9. Eu já vinha utilizando esse método em meu blog, é uma solução simples e efetiva. Mas ainda estou no aguardo do Gdrive! :o)

    ResponderExcluir
  10. Por via das duvidas eu hospedo meus scripts em um host pago. Bom... ate hoje nao tive problemas e nem notei demora pra carregar!!

    Vlw

    ResponderExcluir
  11. Ai Compulsivo,tem esta forma também de hospedagem externa gratuita de JavaScript que ta no blog Blogger's Phera Com o Javascrip Host, o site e meio estranho mais funciona ate agora.Uso os scripts hospedado nele la no Zoona do Celular.

    Vlwwww

    ResponderExcluir
  12. Primeiro eu quria dar parabens a esse blog, é muito legal, e segundo, eu tenho um blog que tem o domínio .com, mas uso o blogger nele, e queria adicionar um ícone diferente desse B padrão, quem pode me ajudar?

    Agradeço desde já

    ResponderExcluir
  13. Compulsivo falou que ia resolver e já veio a solução! Vou já testar ...
    Obrigado e continue com seus POG´s pois eles são realmente úteis. rs
    Detalhe, não sei se vai permanecer mas parece que houve algum problema com o serviço iconlet e afetou alguns templates (não sei se vc tbm usa icones deste site) mas ai já é mais facil, da pra hospedar no blogger sem POG´s. :)
    Abraços
    Stallone For Ever!

    ResponderExcluir
  14. já está!! menu em abas hospedado no blogspot :)

    mas, o código assim fica muito grande, não será prejudicial para a rapidez do blog?

    abraço

    ResponderExcluir
  15. Caaaara! Não boto fé que você resolveu isso!
    Que mão na roda hein?

    POG?? Nada! adaptação!

    ehHEhehhe ;)

    Grande abraço

    ResponderExcluir
  16. Nossa gostei bastante desse blog!
    ele tem informaçõess muito uteis.
    sabe gostei tanto que toh adicionando seu banner lá no meu blog, se puder da uma passadinha lá, valeu!

    ResponderExcluir
  17. boa, primeiro vou fazer um teste em um blog.

    ResponderExcluir
  18. Eu hospedei meus arquivos JavaScript no Geocities e observei que o carregamento fica mais rápido do que o Javascript Host.

    abraços

    ResponderExcluir
  19. Cool blog. Vim cá via Dicas Blogger. Ganhou um leitor, pois aqui há muito o que ler e aprender. Parabéns pelo trabalho brilhante.

    ResponderExcluir
  20. Muito bom esse tutorial compulsivo, valeu

    ResponderExcluir
  21. Na minha opinião esse é o melhor meio de hospedagem de scripts para serem usados no Blogger. Quanto ao Sky Drive, eu já havia previsto acontecimentos semelhantes alguns meses atrás apenas pela simples razão de ser algo de domínio da Microsoft. Durante o reveillon de 2008, o Sky Drive permaneceu fora do ar por quase 24 horas, eu quase tive uma parada cardíaca quando vi minha página toda branca parecendo um fantasma. Eu estava usando o Sky Drive por puro comodismo, já sabendo dos riscos que estava correndo ao usar algo da Microsoft.

    Mas depois disso, ficou claro que da Microsoft apenas o teclado e o mouse.

    ^.^

    ResponderExcluir
  22. É, usando o POG fica fácil mesmo.

    Tenho dito!

    ResponderExcluir
  23. O Javascrip Host deu problemas,muito lentooo

    ResponderExcluir
  24. Olá, parabéns pelo Blog! Mas tenho uma dúvida

    to seguindo um tutorial, acho que não tá funcionando pq preciso por um "?load=effects,builder" logo depois do final do endereço do javascript, e como estou imbutindo o java no blogger não aparece o endereço (óbvio, pq não hospedei), como ponho esse "?load=effects,builder" no java embutido?

    Obrigado!

    ResponderExcluir
  25. Opa, belo tutorial. Só tem um problema. E para exibir o script?? Quando hospedo uso < script src=, dessa maneira aí uso o que??? Valeu e parabéns pelo blog, com certeza o melhor sobre o assunto =D

    ResponderExcluir
  26. funcionou mesmo, obrigado pela dica!

    ResponderExcluir
  27. Ainda bem, Compulsivo, que deu essa dica justamente com o script do menu em abas. Facilitou bastante o serviço...rs. Abraço e obrigado de novo.

    ResponderExcluir
  28. Essa é uma boa alternativa, mas página fica um pouco pesada e o código grande, o ideal se fosse viável é usar arquivos externos mesmo mas depender de hospedagem gratuita é f*. To pensando seriamente em compra uma hospedagem já me falaram da hospedagem da softhost, alguém conhece ou é cliente lá? Enquanto fico nessa procura já passei uma scripts pro código, mas só os mais simples mesmo. Valeu pela dica!

    ResponderExcluir
  29. eu raramente deixo recados de agradecimento.. mas este me fez ficar muito satisfeito... por isso venho dizer Obrigado parceiro... Realmente fiquei impressionado como um pequeno detalhe como estes delimitadores pôde ter resolvido meu problema tão facilmente... valeu mesmo

    ResponderExcluir
  30. É, fica enorme.. mas só assim o menu em abas funcionou
    Com o skydrive não tá indo

    ResponderExcluir
  31. compulsivo!!
    eu tenho esse em abas no meu blog, esta mais ou menos ótimo!
    o porem é que ele demora pra carregar as estrutura do menu, a pagina carrega por inteira e so sobra esse bendito menu, dai mais uns 2 a 3s ele carrega.

    como posso reso0lver isso?

    ResponderExcluir
  32. Valeu pelo post, me ajudou bastante!

    ResponderExcluir
  33. Oi Compulsivo!
    Desculpe incomodar, mas de repente meu JS parou de funcionar e não sei mais oque fazer. Acho que só a POG compulsiva resolve isso. Uso o template GameZine, no qual fiz uma série de adaptações. Tudo funcionou bem durante quase um ano, então não creio que seja erro em minhas adaptações. Já tentei hospedar em outros lugares e achei que tinha funcionado, mas no dia seguinte o problema retorna.

    Se puder dar uma olhadinha é o sprural.blo.... (não completei pra não parecer propaganda, coisa e tal...)

    Obrigado

    ResponderExcluir
  34. Olá Compulsivo!
    Te enviei um S.O.S através de um comentário anterior (hoje mesmo). Sobre os JS que não funcionavam.
    Volto a escrever antes que publique porque resolvi o problema e não quero que perca seu tempo.
    Agradeço mesmo assim, pois sei que caso não tivesse conseguido sua ajuda chegaria em logo.
    Se tiver interesse em informar seus leitores sobre o problema e solução entre em contato. Será um prazer ajudar assim como seu blog sempre me ajudou.

    Falou!

    ResponderExcluir
  35. Muito obrigado!!! Deu certo!!!
    Abç!

    ResponderExcluir
  36. @Jorge, lamento é complicado mesmo...

    []'s
    Compulsivo

    ResponderExcluir
  37. amigo, estou com um problema bem chato em meu blog: As minhas postagens mais antigas não aparecem no blog, tipo, tem a aba filmes na barra lateral do blog, eu clico nela e só aparecem 4 ou 5 filmes, sendo que eu ja postei 21, e o único jeito de acessar eles é clicando na opção "Mostrando postagens mais recentes com o marcador Filmes. Mostrar postagens mais antigas", e nem sempre o leitor ver isso, e não consigo trocar a mensagem acima entre aspas por uma barra de navegação com paginas numeradas, porisso eu queria sua ajuda. Meu blog: zonadoperigo.blogspot.com
    Sou grato à seu blog pois com ele eu resolvi várias coisas.
    Se puder responder pelo MSN eu ficaria eternamente grato: cs_nfsc@hotmail.com

    Obrigado

    ResponderExcluir
  38. Este tutorial foi de grande ajuda pra mim. Fui ver quanto tempo meu blog demorava pra carregar no Pingdom Tools e percebi que algumas linhas de javascript é que faziam demorar o carregamento. Depois de seguir a dica fiquei impressionado com a melhora!

    Ouvi muito dizer que javascript hospedado em outro site faz carregar mais rápido. Agora tenho lá minhas dúvidas.

    Marco Damaceno

    ResponderExcluir
  39. @Marco, confie na sua experiência, não no que você ouviu dizer...

    []'s
    Compulsivo

    ResponderExcluir
  40. Oi! Parabéns pelo seu trabalho.
    Eu sou leiga em JavaScript, mas personalizo alguns layouts para Blogger gratuitamente e disponibilizo com uma pequena propaganda (banner) de uma franquia online de cosméticos no rodapé. Eu queria muito saber adicionar um banner no rodapé desses layouts, com um código em que o banner pudesse ser alterado por mim quando preciso. Sei que isso é possível, mas não encontro ninguém ensinando. Você poderia me ajudar?
    Abraço!

    ResponderExcluir
  41. PNJ Sharptech offers the best Custom Website designing services in India along with digital marketing services at affordable prices. We expect to think again about your character with the target that you increase extreme mileage from the online commercial center. Lead your Business Forward with our Web design Services. For More Query Contact Us +918527749441.

    ResponderExcluir

  42. Modular Kitchen Brands in India is the new trend setter thus, select from the list given here give your kitchen a sophisticated look.

    ResponderExcluir

  43. Panache Haute Couture, a leading Indian Designer House for Indian Dresses. You can Buy Designer indian wedding dresses lehenga dresses, anarkali suits, indo western bridal gowns,
    lehenga choli online, Designer Sarees Online at Online.

    ResponderExcluir
  44. Corrugated Plastic Sheets - Corpac is India’s No.1 Plastic Corrugated Sheets & Box Manufacturer, suppliers in Qatar, New Zealand, Germany, Philippines, UK and Spain.

    ResponderExcluir
  45. Jeewangarg is a Leading Digital Marketing Company which is helping your brand to cut through the Digital Clutter with its best SEO Company in Delhi. Our range of Services includes SEO Services, PPC Services in Delhi, Website Designing Company and Social Media Marketing Services. Being a Google Partners, we provide our client with 100% satisfaction in every aspect of their marketing goals. So, what are you waiting for Connect to the team of best SEO Expert in India, Google Ads Experts, Website Designing Experts, Social Media Experts & more to boost your Digital Presence today with the high quality Digital Marketing Services.

    ResponderExcluir
  46. Plastic Corrugated Sheet - Corpac is India’s No.1 Plastic Corrugated Sheets & Box Manufacturer, suppliers in Qatar, New Zealand, Germany, Philippines, UK and Spain.

    ResponderExcluir
  47. Este comentário foi removido pelo autor.

    ResponderExcluir

  48. Servo Voltage Stabilizer
    is a prominent manufacturer, providing a wide range of Servo Stabilizer Manufacturer in India and an array starting from 5 KVA to 5000 KVA for residential, industrial and medical use. Stabilizers installed after qualifying a 35 points Checklist while undergoing Intensive Quality & Reliability inspection to withstand 170/300V besides 270/470V, manufactured in the state-of-the-art manufacturing plant with the latest cutting-edge innovative technology adopted after rigorous in-house R&D done since inception

    ResponderExcluir
  49. Roman Daniels Corporate is one of Australias favourite providers of corporate wear and we are looking forward to doing the same great job in New Zealand.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Nomes de todas as igrejas do Brasil

O que significa DVDRip, DVDScr, R5, etc?

Remover idiomas em arquivos Dual Audio