View in Telegram
const count = 5;
// Укажите интересующие вас теги
const excludedTags = ['#тема', '#тип'];
let d = {};
const excludedFolder = '03 РАБОТА/КОНТАКТЫ'; // Убрали лишний "/"

// Функция для проверки, содержит ли заметка хотя бы один из исключённых тегов
function hasAnyExcludedTags(filePath, tagNames) {
  let fileCache = dv.app.metadataCache.getCache(filePath);
  if (!fileCache || !fileCache.tags) return false;
  
  // Извлекаем теги как массив значений
  let fileTags = fileCache.tags.map(tag => tag.tag);
  
  // Проверяем, если хотя бы один тег из excludedTags присутствует в заметке
  return tagNames.some(tagName => 
    fileTags.some(fileTag => fileTag.startsWith(tagName))
  );
}

// Функция для проверки, находится ли файл в исключённой папке
function isInExcludedFolder(filePath, folderPath) {
  return filePath.includes(folderPath); // Сравниваем путь без начального "/"
}

// Функция для обработки ссылок
function process(k, v) {
  Object.keys(v).forEach(function (x) {
    let link_x = dv.fileLink(x);
    if (d[link_x] === undefined) {
      d[link_x] = [];
    }
    // Исключаем файлы, если они находятся в запрещённой папке или содержат исключённые теги
    if (!isInExcludedFolder(x, excludedFolder) && !hasAnyExcludedTags(x, excludedTags)) {
      d[link_x].push(dv.fileLink(k));
    }
  });
}

// Обрабатываем ссылки
Object.entries(dv.app.metadataCache.resolvedLinks)
  .filter(([k, v]) => Object.keys(v).length)
  .forEach(([k, v]) => process(k, v));

// Выводим результат в таблицу
dv.table(["Имя заметки", "Ссылаются"],
  Object.entries(d)
    .filter(([k, v]) => v.length >= count)
    .sort((a, b) => b[1].length - a[1].length)
    .map(([k, v]) => [k, v.join(" • ")]));
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Find friends or serious relationships easily