You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

260 lines
7.2 KiB

/* 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 = '<i class="fa fa-spinner fa-pulse fa-fw"></i> ' + 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 = '<i class="fa fa-file-code-o" aria-hidden="true"></i>'
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 = '<i class="fa fa-spinner fa-pulse fa-fw"></i> ' + 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 = '<i class="fa fa-chevron-circle-left" aria-hidden="true"></i> '
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 = '<i class="fa fa-file-code-o" aria-hidden="true"></i>'
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()
}
})