PageRenderTime 58ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/public/js/client_app.js

https://gitlab.com/projetos-dyad/nodeengineadmin
JavaScript | 306 lines | 236 code | 48 blank | 22 comment | 26 complexity | 4fcafc583d6958eee96b7e38e9c3cb09 MD5 | raw file
  1. var lista = null;
  2. var grupos = null;
  3. var grupo_atual = null;
  4. var tplTitulo = null;
  5. var tplTabela = null;
  6. var tplForm = null;
  7. var tplAlerta = null;
  8. var tplMenu = null;
  9. var tplProgress = null;
  10. var socket = null;
  11. /**
  12. * Retona os dados da base pelo id
  13. *
  14. * @param id Nome da Bases
  15. * @returns {*} Objeto com os dados da base
  16. */
  17. function findById(id) {
  18. for (var i = 0; i < lista.length; i++) {
  19. if ( lista[i].id == id ) {
  20. return lista[i];
  21. }
  22. }
  23. return null;
  24. }
  25. function carrega_templates(){
  26. tplMenu = Handlebars.compile($("#template-menu").html());
  27. tplTitulo = Handlebars.compile($("#template-titulo").html());
  28. tplTabela = Handlebars.compile($("#template-tabela").html());
  29. tplAlerta = Handlebars.compile($("#template-alerta").html());
  30. tplForm = Handlebars.compile($("#formulario-base").html());
  31. tplProgress = Handlebars.compile($("#template-progress").html());
  32. }
  33. function func_ordena(baseA, baseB){
  34. //return (baseA.grupo + baseA.nome) > (baseB.grupo + baseB.nome);
  35. return [baseA.grupo, baseA.nome] > [baseB.grupo, baseB.nome] ? 1 : -1;
  36. }
  37. function inicializa_tela( refresh ){
  38. $.ajax({
  39. url: ( refresh ? '/refresh' : '/caches' ),
  40. dataType:"json"
  41. })
  42. .fail(function(req){
  43. console.log('Erro inicializar a tela:'+ req.responseText);
  44. showMessage('danger', 'Erro inicializar a tela:'+ req.responseText );
  45. })
  46. .done(function(caches){
  47. console.log('Recebeu a lista de caches. Montando a tela...');
  48. lista = caches;
  49. lista.sort( func_ordena );
  50. console.log('Populando o menu...');
  51. popula_menu();
  52. if ( grupo_atual ) {
  53. console.log('Filtrando bases do grupo '+ grupo_atual );
  54. filtraBases( grupo_atual );
  55. } else {
  56. console.log('Sem grupo para filtrar...');
  57. }
  58. });
  59. }
  60. function popula_menu(){
  61. if ( grupos ) {
  62. grupos.length = 0;
  63. } else {
  64. grupos = [];
  65. }
  66. for (var i = 0; i < lista.length; i++) {
  67. if ( grupos.indexOf(lista[i].grupo) < 0 ) {
  68. grupos.push( lista[i].grupo );
  69. }
  70. }
  71. $("#area-lateral").html( tplMenu( {grupos : grupos} ) );
  72. }
  73. /**
  74. * Função chamada quando o usuário seleciona um grupo no menu lateral.
  75. * Ela recebe o grupo passado por parâmetro e filtra as bases para exibição na
  76. * tabela principal.
  77. **/
  78. function filtraBases( grupo ){
  79. grupo_atual = grupo;
  80. console.log('Filtrando bases do grupo: '+ grupo);
  81. var bases = [];
  82. for (var i = 0; i < lista.length; i++) {
  83. if ( lista[i].grupo == grupo) {
  84. bases.push( lista[i] );
  85. }
  86. }
  87. bases.sort( func_ordena );
  88. $('#area-titulo').html( tplTitulo( {titulo: 'Bases '+ grupo} ) );
  89. $("#area-tabela").html( tplTabela( {bases : bases} ) );
  90. }
  91. function abrePasta( pasta ){
  92. $.post( "/folder", { folder: pasta } )
  93. .fail(function(req){
  94. console.log('Erro ao abrir a pasta:'+ req.responseText);
  95. showMessage('danger', 'Erro ao abrir a pasta:'+ req.responseText );
  96. });
  97. }
  98. /**
  99. * Abre o formulário de parametrização da base selecionada
  100. *
  101. * @param baseSelecionada
  102. */
  103. function cfgBase( id ) {
  104. var baseSelecionada = null;
  105. if ( id ) {
  106. baseSelecionada = findById( id );
  107. };
  108. var cfg = bootbox.dialog({
  109. title : 'Criação de arquivo de configuração',
  110. closeButton : false,
  111. message : tplForm,
  112. show : false,
  113. buttons : {
  114. cancel: {
  115. label: 'Cancelar',
  116. className: "btn-danger"
  117. },
  118. sucess: {
  119. label: 'Confirmar',
  120. callback: function btn_suc_callback() {
  121. var dados = $('form.configuracao').serialize();
  122. console.log("Atualizando com dados:"+ dados);
  123. // Atualização de um cache existente
  124. if ( id ) {
  125. $.ajax('/caches/'+ id, {
  126. type : 'PUT',
  127. data : dados
  128. })
  129. .fail(function caches_put_fail( response ){
  130. var decodedError = JSON.parse(response.responseText);
  131. bootbox.alert( decodedError.message );
  132. })
  133. .done(function caches_put_done( data ){
  134. recarregar();
  135. });
  136. // Criação de um novo cache
  137. } else {
  138. $.post('/caches', dados)
  139. .fail(function caches_post_fail( response ){
  140. var decodedError = JSON.parse(response.responseText);
  141. bootbox.alert( decodedError.message );
  142. })
  143. .done(function caches_post_done( data ){
  144. recarregar();
  145. });
  146. }
  147. }
  148. }
  149. }
  150. });
  151. cfg.on("shown.bs.modal", function() {
  152. if ( ! baseSelecionada ) {
  153. return;
  154. }
  155. // console.log("Parametros adicionais:"+ baseSelecionada.params);
  156. var formulario = $('form.configuracao');
  157. formulario.find( 'input[name="nome"]').val( baseSelecionada.nome );
  158. formulario.find( 'input[name="grupo"]').val( baseSelecionada.grupo );
  159. formulario.find( 'input[name="url"]').val( baseSelecionada.url );
  160. formulario.find( 'input[name="params"]').val( baseSelecionada.params );
  161. formulario.find( 'input[name="pasta"]').val( baseSelecionada.pasta );
  162. if ( !baseSelecionada.arch || baseSelecionada.arch === '64' ) {
  163. formulario.find( 'input[name="arch"]').prop('checked', false);
  164. } else {
  165. formulario.find( 'input[name="arch"]').prop('checked', true);
  166. }
  167. });
  168. cfg.modal();
  169. }
  170. function startaBase( id ){
  171. var baseSelecionada = findById(id);
  172. if ( ! baseSelecionada || baseSelecionada.nome === undefined || baseSelecionada.nome === null ) {
  173. return bootbox.dialog({
  174. title : 'Erro ao carregar o arquivo de configuração.',
  175. message : 'O arquivo de configuração não foi encontrado para esta base, deseja criá-lo ?',
  176. closeButton : false,
  177. onEscape : false,
  178. buttons : {
  179. cancel: {
  180. label : 'Cancelar',
  181. className : "btn-danger"
  182. },
  183. success : {
  184. label : "Sim, ir para criação das configurações",
  185. callback: function ( dialog ) {
  186. return cfgBase( baseSelecionada );
  187. }
  188. }
  189. }
  190. });
  191. }
  192. $.ajax("/start/"+ id)
  193. .fail(function(req){
  194. console.log('Erro ao subir a base:'+ req.responseText);
  195. showMessage('danger', 'Erro ao subir a base:'+ req.responseText );
  196. });
  197. }
  198. function recarregar(){
  199. lista = null;
  200. grupos = null;
  201. //grupo_atual = null;
  202. inicializa_tela( true );
  203. }
  204. function apagarCache( id ){
  205. if ( ! confirm('Tem certeza???') ) {
  206. return;
  207. }
  208. $.ajax("/caches/"+ id +'/all', {type:'DELETE'})
  209. .fail(function(req){
  210. showMessage('danger', 'Erro ao apagar o cache:'+ req.responseText );
  211. })
  212. .done( function(){
  213. recarregar();
  214. showMessage('info', 'Cache excluido com sucesso.');
  215. });
  216. }
  217. function descartaCache( id ){
  218. if ( ! confirm('Tem certeza???') ) {
  219. return;
  220. }
  221. $.ajax("/caches/"+ id +'/cache', {type:'DELETE'})
  222. .fail(function(req){
  223. showMessage('danger', 'Erro ao descartar o cache:'+ req.responseText );
  224. })
  225. .done(function(){
  226. showMessage('info', 'Cache descartado com sucesso.');
  227. });
  228. }
  229. function showMessage(tipo, msg){
  230. $('#area-tabela').prepend( tplAlerta( { tipo: tipo, mensagem: msg } ) );
  231. }
  232. function descartaChaves( nome ){}
  233. function conecta_websocket(){
  234. socket = io.connect('http://127.0.0.1:3000', {'force new connection': true});
  235. socket.on('connect', function(){
  236. console.log('Conectou ao server!');
  237. });
  238. socket.on('disconnect', function(){
  239. console.log('Desconectou do server!');
  240. });
  241. socket.on('error', function(){
  242. console.log('Erro!');
  243. });
  244. socket.on('downloading', function(data){
  245. var perc = JSON.parse(data).percent;
  246. if (perc < 100) {
  247. $('#area-notificacao').html(tplProgress({percent: perc}));
  248. } else {
  249. $('#area-notificacao').html('');
  250. }
  251. });
  252. }
  253. // Registra o callback de tratamento para quando o HTML da página terminar de carregar
  254. $(document).ready(function(){
  255. carrega_templates();
  256. inicializa_tela();
  257. conecta_websocket();
  258. });