/* global OverpassLayer, repositoriesGitea */ require('./addCategories.css') const tabs = require('modulekit-tabs') const weightSort = require('weight-sort') const state = require('./state') const OpenStreetBrowserLoader = require('./OpenStreetBrowserLoader') let tab function addCategoriesList (content, browser, options = {}) { content.innerHTML = ' ' + lang('loading') OpenStreetBrowserLoader.getRepositoryList(options, function (err, repoData) { if (err) { return global.alert(err) } var categoryUrl = null if (repoData.categoryUrl) { categoryUrl = OverpassLayer.twig.twig({ data: repoData.categoryUrl, autoescape: true }) } var list = {} 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 }) let menu = document.createElement('ul') menu.className = 'menu' content.appendChild(menu) let header = document.createElement('h3') header.innerHTML = lang('repositories') + ':' content.appendChild(header) while (content.lastChild) { content.removeChild(content.lastChild) } 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') a.href = '#more-categories?id=' + id li.appendChild(a) a.appendChild(document.createTextNode('name' in data ? lang(data.name) : id)) var editLink = null if (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) browser.catchLinks() }) } function addCategoriesShow (repo, browser, options={}) { const content = browser.dom let [ repoId, branchId ] = repo.split(/~/) if (!branchId) { branchId = 'master' } content.innerHTML = ' ' + lang('loading') OpenStreetBrowserLoader.getRepository(repo, options, function (err, repository) { if (err) { return global.alert(err) } const repoData = repository.data content.innerHTML = '' var categoryUrl = null if (repoData.categoryUrl) { categoryUrl = OverpassLayer.twig.twig({ data: repoData.categoryUrl, autoescape: true }) } var list = {} var backLink = document.createElement('a') backLink.className = 'back' backLink.href = '#more-categories?' backLink.innerHTML = ' ' backLink.appendChild(document.createTextNode(lang('back'))) content.appendChild(backLink) browser.catchLinks() let h = document.createElement('h2') h.appendChild(document.createTextNode(repoId)) content.appendChild(h) list = repoData.categories let menu = document.createElement('ul') menu.className = 'menu' content.appendChild(menu) let li = document.createElement('li') menu.appendChild(li) let text = document.createElement('a') text.innerHTML = lang('repo-use-as-base') text.href = '#repo=' + repo text.onclick = () => browser.close() li.appendChild(text) li = document.createElement('li') menu.appendChild(li) text = document.createElement('a') text.innerHTML = lang('reload') text.href = '#more-categories?id=' + repo + '&force=true' li.appendChild(text) if ('branches' in repoData) { let li = document.createElement('li') menu.appendChild(li) let text = document.createElement('span') text.innerHTML = lang('available_branches') + ': ' li.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) } ) li.appendChild(branchSelector) } let header = document.createElement('h3') header.innerHTML = lang('categories') + ':' content.appendChild(header) 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 }) } li = document.createElement('li') let a = document.createElement('a') a.href = '#categories=' + (repo === 'default' ? '' : repo + '/') + id a.onclick = () => browser.close() 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: repoId, categoryId: id, branchId: branchId, categoryFormat: data.format }) } 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) browser.catchLinks() }) } hooks.register('browser-more-categories', (browser, parameters) => { const content = browser.dom if (!Object.keys(parameters).length) { let block = document.createElement('div') block.setAttribute('weight', 1) content.appendChild(block) let header = document.createElement('h4') header.innerHTML = lang('repositories') block.appendChild(header) let div = document.createElement('div') block.appendChild(div) addCategoriesList(div, browser, parameters) browser.catchLinks() } else if (parameters.id) { addCategoriesShow(parameters.id, browser, parameters) } else if (parameters.repo || parameters.categories) { state.apply(parameters) browser.close() } })