/** * VD Catalog - admin tree JS (folder | product) * Atualizado: 2026-02-12 12:00 -03:00 */ jQuery(function($){ var selectedNode = null; function renderTreeHtml(nodes){ function nodeToHtml(node){ var hasChildren = node.children && node.children.length; var typeLabel = node.type === 'product' ? ' (product)' : ''; var html = '
  • '; html += ''+(hasChildren? '▾' : (node.type==='product' ? '•' : '▸'))+' '; html += ''+escapeHtml(node.title)+typeLabel+''; if(hasChildren){ html += ''; } html += '
  • '; return html; } var out = ''; return out; } function escapeHtml(text){ return String(text) .replace(/&/g,'&') .replace(//g,'>') .replace(/"/g,'"') .replace(/'/g,'''); } function loadTree(){ $('#vda-tree').hide(); $('#vda-tree-loading').show().text('Carregando árvore...'); $.post(VDA_ADMIN.ajax_url, { action: 'vda_admin_get_tree', nonce: VDA_ADMIN.nonce }, function(resp){ if(!resp || !resp.success){ $('#vda-tree-loading').text('Erro ao carregar a árvore.'); return; } var html = renderTreeHtml(resp.data); $('#vda-tree').html(html).show(); $('#vda-tree-loading').hide(); }, 'json').fail(function(){ $('#vda-tree-loading').text('Erro de rede ao carregar árvore.'); }); } $(document).on('click', '#vda-tree .vda-node-title', function(){ var $li = $(this).closest('.vda-node'); $('#vda-tree .vda-node-selected').removeClass('vda-node-selected'); $li.addClass('vda-node-selected'); selectedNode = { id: $li.data('id'), title: $(this).text(), type: $li.data('type') }; $('#vda-selected').text(selectedNode.title + ' (ID: ' + selectedNode.id + ', type:' + selectedNode.type + ')'); }); $(document).on('click', '#vda-tree .vda-node-toggle', function(){ var $li = $(this).closest('.vda-node'); $li.children('.vda-children').toggle(); $(this).text( $li.children('.vda-children').is(':visible') ? '▾' : '▸' ); }); $('#vda-create-node').on('click', function(e){ e.preventDefault(); var title = $('#vda-new-title').val().trim(); var type = $('#vda-new-type').val(); if(!title) { $('#vda-create-result').text('Digite um título.'); return; } var parent = selectedNode ? selectedNode.id : 0; $('#vda-create-result').text('Criando...'); $.post(VDA_ADMIN.ajax_url, { action: 'vda_admin_create_node', nonce: VDA_ADMIN.nonce, title: title, parent: parent, type: type }, function(resp){ if(!resp || !resp.success){ $('#vda-create-result').text('Erro: ' + (resp && resp.data ? resp.data : 'erro desconhecido')); return; } $('#vda-create-result').text('Criado ID: ' + resp.data.id); $('#vda-new-title').val(''); // se for product, abrir editor automaticamente if (resp.data.type === 'product' && resp.data.edit_url) { window.open(resp.data.edit_url, '_blank'); } loadTree(); }, 'json').fail(function(){ $('#vda-create-result').text('Falha de rede.'); }); }); $('#vda-refresh-tree').on('click', loadTree); $('#vda-open-edit').on('click', function(){ if(!selectedNode){ alert('Selecione um nó primeiro'); return; } var url = '/wp-admin/post.php?post=' + selectedNode.id + '&action=edit'; window.open(url, '_blank'); }); $('#vda-delete-node').on('click', function(){ if(!selectedNode){ alert('Selecione um nó primeiro'); return; } if(!confirm('Confirma excluir o nó "'+selectedNode.title+'" (ID:'+selectedNode.id+') ?')) return; $.post(VDA_ADMIN.ajax_url, { action: 'vda_admin_delete_node', nonce: VDA_ADMIN.nonce, id: selectedNode.id }, function(resp){ if(!resp || !resp.success){ alert('Erro: ' + (resp && resp.data ? resp.data : 'erro')); return; } alert('Excluído.'); selectedNode = null; $('#vda-selected').text('Nenhum'); loadTree(); }, 'json').fail(function(){ alert('Falha de rede'); }); }); loadTree(); });