/* global OverpassLayer, repositoriesGitea */ require('./addCategories.css') const tabs = require('modulekit-tabs') const weightSort = require('weight-sort') const OpenStreetBrowserLoader = require('./OpenStreetBrowserLoader') let tab function addCategoriesShow (repo) { let content = tab.content let repoId let branchId if (repo) { [ repoId, branchId ] = repo.split(/~/) } content.innerHTML = '

' + lang('more_categories') + '

' + ' ' + lang('loading') OpenStreetBrowserLoader.getRepo(repo, {}, function (err, repoData) { if (err) { alert(err) } content.innerHTML = '

' + lang('more_categories') + '

' var categoryUrl = null if (repoData.categoryUrl) { categoryUrl = OverpassLayer.twig.twig({ data: repoData.categoryUrl, autoescape: true }) } var list = {} if (repo) { var backLink = document.createElement('a') backLink.className = 'back' backLink.href = '#' backLink.innerHTML = ' ' backLink.appendChild(document.createTextNode(lang('back'))) backLink.onclick = function () { addCategoriesShow() return false } content.appendChild(backLink) let h = document.createElement('h2') h.appendChild(document.createTextNode(repoId)) content.appendChild(h) list = repoData.categories } else { if (typeof repositoriesGitea === 'object' && repositoriesGitea.url) { let a = document.createElement('a') a.href = repositoriesGitea.url a.target = '_blank' a.innerHTML = lang('more_categories_gitea') content.appendChild(a) } list = weightSort(repoData, { key: 'timestamp', reverse: true }) } if ('branches' in repoData) { let text = document.createElement('span') text.innerHTML = lang('available_branches') + ': ' content.appendChild(text) let branchSelector = document.createElement('select') branchSelector.onchange = () => { let branch = branchSelector.value addCategoriesShow(repoId + '~' + branch) } Object.keys(repoData.branches).forEach( branch => { let option = document.createElement('option') option.value = branch option.appendChild(document.createTextNode(branch)) if (repoData.branch === branch) { option.selected = true } branchSelector.appendChild(option) } ) content.appendChild(branchSelector) } var ul = document.createElement('ul') for (var id in list) { var data = list[id] var repositoryUrl = null if (data.repositoryUrl) { repositoryUrl = OverpassLayer.twig.twig({ data: data.repositoryUrl, autoescape: true }) } var li = document.createElement('li') let a = document.createElement('a') if (repo) { a.href = '#categories=' + repo + '/' + id a.onclick = function () { addCategoriesHide() } } else { a.href = '#' a.onclick = function (id) { addCategoriesShow(id) return false }.bind(this, id) } li.appendChild(a) a.appendChild(document.createTextNode('name' in data ? lang(data.name) : id)) var editLink = null if (repo && categoryUrl) { editLink = document.createElement('a') editLink.href = categoryUrl.render({ repositoryId: repo, categoryId: id }) } if (!repo && repositoryUrl) { editLink = document.createElement('a') editLink.href = repositoryUrl.render({ repositoryId: id }) } if (editLink) { editLink.className = 'source-code' editLink.title = 'Show source code' editLink.target = '_blank' editLink.innerHTML = '' li.appendChild(document.createTextNode(' ')) li.appendChild(editLink) } ul.appendChild(li) } content.appendChild(ul) }) } function addCategoriesHide () { tab.unselect() } register_hook('init', function (callback) { tab = new tabs.Tab({ id: 'addCategories' }) global.tabs.add(tab) tab.header.innerHTML = '' tab.header.title = lang('more_categories') let initialized = false tab.on('select', () => { if (!initialized) { addCategoriesShow() initialized = true } }) })