// variável global que armazena o nome atual do arquivo (utilizado ao gerar o log de erros javascript no servidor) var funcoes = 'funcoes.js'; /** * Gera o log de erro javascript no servidor * @param {string} nomePagina Nome da página onde onde o erro aconteceu * @param {string} nomeFuncao O nome da função o erro aconteceu * @param {string} mensagemErro A mensagem de erro a ser logada * @returns {undefined} */ function geraLog(nomePagina, nomeFuncao, mensagemErro) { try { // mostra o erro no console do navegador console.log(nomePagina + ' > ' + nomeFuncao + ': ' + mensagemErro); var json = { 'message': nomeFuncao + ': ' + mensagemErro, 'file': nomePagina }; // realiza o envio do relato via ajax 'tradicional' var urlLog = 'admin/cgi-bin/dispatcher.php'; var dados = 'ac=logjs/gerar/msg=' + encodeURIComponent(JSON.stringify(json)); var xmlHttp = (window.XMLHttpRequest) ? new XMLHttpRequest : new ActiveXObject('Microsoft.XMLHTTP'); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState === 4 && xmlHttp.status !== 200) { throw new Error(xmlHttp.responseText); } }; xmlHttp.open('POST', urlLog, true); xmlHttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); xmlHttp.send(dados); } catch (erro) { console.log(funcoes + ' > geraLog(): ' + erro.message); } } // geraLog() /** * Realiza uma requisição via ajax para o servidor * @param {string} metodo O método de envio dos dados (via GET ou POST) * @param {string} pagina O nome da página que se deseja buscar * @param {string} queryString O(s) valor(es) a ser(em) enviado(s) através da requisição * @returns {object} Retorna uma instância da classe jqXHR (jQuery XMLHttpRequest) */ function ajax(metodo, pagina, queryString) { try { metodo = (metodo === 'POST') ? 'POST' : 'GET'; return $.ajax({ method: metodo, async: true, cache: false, url: pagina, data: queryString }).fail(function(jqXHR) { throw new Error('Erro HTTP número ' + jqXHR.status); }); } catch (erro) { geraLog(funcoes, 'ajax()', erro.message); } } // ajax() /** * Carrega uma página HTML via ajax e a insere no conteúdo da página inicial * @param {string} pagina O nome da página que se deseja buscar * @param {string} queryString O(s) valor(es) a ser(em) enviado(s) através da requisição * @returns {object} Retorna uma instância da classe jqXHR (jQuery XMLHttpRequest) */ function carregaPagina(pagina, queryString) { try { if (pagina === '') { return false; } return $.ajax({ method: 'POST', async: true, cache: false, url: pagina, data: queryString, beforeSend: function() { $('#status, #preloader').fadeIn('fast'); } }).fail(function(jqXHR) { location.hash = (jqXHR.status == '404') ? '' : ''; }).done(function(conteudoPagina) { $('#divConteudo').html(conteudoPagina); }).always(function() { $('#status, #preloader').fadeOut('fast'); }); } catch (erro) { geraLog(funcoes, 'carregaPagina()', erro.message); } } // carregaPagina() /** * Carrega a página despachante (responsável pela comunicação entre as páginas web e o servidor) * @param {string} queryString O(s) dado(s) a ser(em) enviado(s) ao servidor * @returns {object} Retorna uma instância da classe jqXHR (jQuery XMLHttpRequest) */ function carregaDispatcher(queryString) { try { return $.ajax({ complete: function() { $('#status, #preloader').fadeOut('fast'); }, dataType: 'json', method: 'POST', async: true, cache: false, global: false, url: 'admin/cgi-bin/dispatcher.php', data: 'ac=' + encodeURIComponent(queryString) }); } catch (erro) { geraLog(funcoes, 'carregaDispatcher()', erro.message); } } // carregaDispatcher() /** * Carrega uma página html do sistema e todas as suas dependências (caso existam) * @returns {boolean} Retorna falso quando não há página a ser carregada */ function carregaModulo() { try { var pagina = pegaNmPagina(); var queryString = pegaQuerystring(); if (pagina === '') { pagina = 'html/inicio.html'; } // se a página foi carregada com sucesso, carrega o arquivo .js correspondente ao seu nome carregaPagina(pagina, queryString).done(function() { carregaArqJs(pagina); }); } catch (erro) { geraLog(funcoes, 'carregaModulo()', erro.message); } } // carregaModulo() /** * Renderiza um template utilizando o plugin mustache.js * @param {object} $elemento Um objeto Jquery representando a tag