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

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. /* global OverpassLayer, repositoriesGitea */
  2. require('./addCategories.css')
  3. const tabs = require('modulekit-tabs')
  4. const weightSort = require('weight-sort')
  5. const state = require('./state')
  6. const OpenStreetBrowserLoader = require('./OpenStreetBrowserLoader')
  7. let tab
  8. function addCategoriesList (content, browser, options = {}) {
  9. content.innerHTML = '<i class="fa fa-spinner fa-pulse fa-fw"></i> ' + lang('loading')
  10. OpenStreetBrowserLoader.getRepositoryList(options, function (err, repoData) {
  11. if (err) {
  12. return global.alert(err)
  13. }
  14. var categoryUrl = null
  15. if (repoData.categoryUrl) {
  16. categoryUrl = OverpassLayer.twig.twig({ data: repoData.categoryUrl, autoescape: true })
  17. }
  18. var list = {}
  19. if (typeof repositoriesGitea === 'object' && repositoriesGitea.url) {
  20. let a = document.createElement('a')
  21. a.href = repositoriesGitea.url
  22. a.target = '_blank'
  23. a.innerHTML = lang('more_categories_gitea')
  24. content.appendChild(a)
  25. }
  26. list = weightSort(repoData, {
  27. key: 'timestamp',
  28. reverse: true
  29. })
  30. let menu = document.createElement('ul')
  31. menu.className = 'menu'
  32. content.appendChild(menu)
  33. let header = document.createElement('h3')
  34. header.innerHTML = lang('repositories') + ':'
  35. content.appendChild(header)
  36. while (content.lastChild) {
  37. content.removeChild(content.lastChild)
  38. }
  39. var ul = document.createElement('ul')
  40. for (var id in list) {
  41. var data = list[id]
  42. var repositoryUrl = null
  43. if (data.repositoryUrl) {
  44. repositoryUrl = OverpassLayer.twig.twig({ data: data.repositoryUrl, autoescape: true })
  45. }
  46. var li = document.createElement('li')
  47. let a = document.createElement('a')
  48. a.href = '#more-categories?id=' + id
  49. li.appendChild(a)
  50. a.appendChild(document.createTextNode('name' in data ? lang(data.name) : id))
  51. var editLink = null
  52. if (repositoryUrl) {
  53. editLink = document.createElement('a')
  54. editLink.href = repositoryUrl.render({ repositoryId: id })
  55. }
  56. if (editLink) {
  57. editLink.className = 'source-code'
  58. editLink.title = 'Show source code'
  59. editLink.target = '_blank'
  60. editLink.innerHTML = '<i class="fa fa-file-code-o" aria-hidden="true"></i>'
  61. li.appendChild(document.createTextNode(' '))
  62. li.appendChild(editLink)
  63. }
  64. ul.appendChild(li)
  65. }
  66. content.appendChild(ul)
  67. browser.catchLinks()
  68. })
  69. }
  70. function addCategoriesShow (repo, browser, options={}) {
  71. const content = browser.dom
  72. let [ repoId, branchId ] = repo.split(/~/)
  73. if (!branchId) {
  74. branchId = 'master'
  75. }
  76. content.innerHTML = '<i class="fa fa-spinner fa-pulse fa-fw"></i> ' + lang('loading')
  77. OpenStreetBrowserLoader.getRepository(repo, options, function (err, repository) {
  78. if (err) {
  79. return global.alert(err)
  80. }
  81. const repoData = repository.data
  82. content.innerHTML = ''
  83. var categoryUrl = null
  84. if (repoData.categoryUrl) {
  85. categoryUrl = OverpassLayer.twig.twig({ data: repoData.categoryUrl, autoescape: true })
  86. }
  87. var list = {}
  88. var backLink = document.createElement('a')
  89. backLink.className = 'back'
  90. backLink.href = '#more-categories?'
  91. backLink.innerHTML = '<i class="fa fa-chevron-circle-left" aria-hidden="true"></i> '
  92. backLink.appendChild(document.createTextNode(lang('back')))
  93. content.appendChild(backLink)
  94. browser.catchLinks()
  95. let h = document.createElement('h2')
  96. h.appendChild(document.createTextNode(repoId))
  97. content.appendChild(h)
  98. list = repoData.categories
  99. let menu = document.createElement('ul')
  100. menu.className = 'menu'
  101. content.appendChild(menu)
  102. let li = document.createElement('li')
  103. menu.appendChild(li)
  104. let text = document.createElement('a')
  105. text.innerHTML = lang('repo-use-as-base')
  106. text.href = '#repo=' + repo
  107. text.onclick = () => browser.close()
  108. li.appendChild(text)
  109. li = document.createElement('li')
  110. menu.appendChild(li)
  111. text = document.createElement('a')
  112. text.innerHTML = lang('reload')
  113. text.href = '#more-categories?id=' + repo + '&force=true'
  114. li.appendChild(text)
  115. if ('branches' in repoData) {
  116. let li = document.createElement('li')
  117. menu.appendChild(li)
  118. let text = document.createElement('span')
  119. text.innerHTML = lang('available_branches') + ': '
  120. li.appendChild(text)
  121. let branchSelector = document.createElement('select')
  122. branchSelector.onchange = () => {
  123. let branch = branchSelector.value
  124. addCategoriesShow(repoId + '~' + branch)
  125. }
  126. Object.keys(repoData.branches).forEach(
  127. branch => {
  128. let option = document.createElement('option')
  129. option.value = branch
  130. option.appendChild(document.createTextNode(branch))
  131. if (repoData.branch === branch) {
  132. option.selected = true
  133. }
  134. branchSelector.appendChild(option)
  135. }
  136. )
  137. li.appendChild(branchSelector)
  138. }
  139. let header = document.createElement('h3')
  140. header.innerHTML = lang('categories') + ':'
  141. content.appendChild(header)
  142. var ul = document.createElement('ul')
  143. for (var id in list) {
  144. var data = list[id]
  145. var repositoryUrl = null
  146. if (data.repositoryUrl) {
  147. repositoryUrl = OverpassLayer.twig.twig({ data: data.repositoryUrl, autoescape: true })
  148. }
  149. li = document.createElement('li')
  150. let a = document.createElement('a')
  151. a.href = '#categories=' + (repo === 'default' ? '' : repo + '/') + id
  152. a.onclick = () => browser.close()
  153. li.appendChild(a)
  154. a.appendChild(document.createTextNode('name' in data ? lang(data.name) : id))
  155. var editLink = null
  156. if (repo && categoryUrl) {
  157. editLink = document.createElement('a')
  158. editLink.href = categoryUrl.render({ repositoryId: repoId, categoryId: id, branchId: branchId, categoryFormat: data.format })
  159. }
  160. if (!repo && repositoryUrl) {
  161. editLink = document.createElement('a')
  162. editLink.href = repositoryUrl.render({ repositoryId: id })
  163. }
  164. if (editLink) {
  165. editLink.className = 'source-code'
  166. editLink.title = 'Show source code'
  167. editLink.target = '_blank'
  168. editLink.innerHTML = '<i class="fa fa-file-code-o" aria-hidden="true"></i>'
  169. li.appendChild(document.createTextNode(' '))
  170. li.appendChild(editLink)
  171. }
  172. ul.appendChild(li)
  173. }
  174. content.appendChild(ul)
  175. browser.catchLinks()
  176. })
  177. }
  178. hooks.register('browser-more-categories', (browser, parameters) => {
  179. const content = browser.dom
  180. if (!Object.keys(parameters).length) {
  181. let block = document.createElement('div')
  182. block.setAttribute('weight', 1)
  183. content.appendChild(block)
  184. let header = document.createElement('h4')
  185. header.innerHTML = lang('repositories')
  186. block.appendChild(header)
  187. let div = document.createElement('div')
  188. block.appendChild(div)
  189. addCategoriesList(div, browser, parameters)
  190. browser.catchLinks()
  191. }
  192. else if (parameters.id) {
  193. addCategoriesShow(parameters.id, browser, parameters)
  194. }
  195. else if (parameters.repo || parameters.categories) {
  196. state.apply(parameters)
  197. browser.close()
  198. }
  199. })