Browse Source

CustomCategory: re-design js classes

master
parent
commit
799c0d3f69
  1. 95
      src/customCategory.js

95
src/customCategory.js

@ -7,11 +7,11 @@ const jsonMultilineStrings = require('json-multiline-strings')
const Window = require('./Window') const Window = require('./Window')
const OpenStreetBrowserLoader = require('./OpenStreetBrowserLoader') const OpenStreetBrowserLoader = require('./OpenStreetBrowserLoader')
const cache = {}
const customCategories = []
const editors = []
class CustomCategoryRepository { class CustomCategoryRepository {
constructor () { constructor () {
this.clearCache()
} }
load (callback) { load (callback) {
@ -19,21 +19,28 @@ class CustomCategoryRepository {
} }
clearCache () { clearCache () {
this.cache = {}
}
listCategories (options, callback) {
fetch('customCategory.php?action=list')
.then(res => res.json())
.then(result => callback(null, result))
} }
getCategory (id, options, callback) { getCategory (id, options, callback) {
if (id in cache) {
return callback(null, yaml.load(cache[id]))
if (id in this.cache) {
return callback(null, yaml.load(this.cache[id]))
} }
fetch('customCategory.php?id=' + id) fetch('customCategory.php?id=' + id)
.then(res => res.text()) .then(res => res.text())
.then(result => {
.then(content => {
let data let data
cache[id] = result
this.cache[id] = content
try { try {
data = yaml.load(result)
data = yaml.load(content)
} }
catch (e) { catch (e) {
return global.alert(e) return global.alert(e)
@ -43,42 +50,36 @@ class CustomCategoryRepository {
data.name = 'Custom ' + id.substr(0, 6) data.name = 'Custom ' + id.substr(0, 6)
} }
callback(null, data)
callback(null, data, content)
}) })
} }
saveCategory (body, options, callback) {
const id = md5(body)
this.cache[id] = body
fetch('customCategory.php?action=save', {
method: 'POST',
body
})
}
getTemplate (id, options, callback) { getTemplate (id, options, callback) {
callback(null, '') callback(null, '')
} }
} }
class CustomCategory {
constructor () {
customCategories.push(this)
class CustomCategoryEditor {
constructor (repository) {
this.repository = repository
editors.push(this)
} }
load (id, callback) { load (id, callback) {
this.id = id
fetch('customCategory.php?id=' + id)
.then(res => res.text())
.then(result => {
let data
cache[id] = result
this.content = result
try {
data = yaml.load(result)
}
catch (e) {
return global.alert(e)
}
if (Object.is(data) && !('name' in data)) {
data.name = 'Custom ' + id.substr(0, 6)
}
callback(null, data)
this.repository.getCategory(id, {},
(err, category, content) => {
this.content = content
callback(err, content)
}) })
} }
@ -134,10 +135,7 @@ class CustomCategory {
applyContent (content) { applyContent (content) {
this.content = content this.content = content
fetch('customCategory.php?action=save', {
method: 'POST',
body: this.content
})
this.repository.saveCategory(this.content, {}, () => {})
if (this.textarea) { if (this.textarea) {
this.textarea.value = content this.textarea.value = content
@ -145,7 +143,6 @@ class CustomCategory {
const id = md5(content) const id = md5(content)
this.id = id this.id = id
cache[id] = content
if (this.category) { if (this.category) {
this.category.remove() this.category.remove()
@ -167,16 +164,16 @@ class CustomCategory {
function editCustomCategory (id, category) { function editCustomCategory (id, category) {
let done = customCategories.filter(customCategory => {
if (customCategory.id === id) {
customCategory.edit()
let done = editors.filter(editor => {
if (editor.id === id) {
editor.edit()
return true return true
} }
}) })
if (!done.length) { if (!done.length) {
const customCategory = new CustomCategory()
customCategory.load(id, (err) => {
const editor = new CustomCategoryEditor(repository)
editor.load(id, (err) => {
if (err) { return global.alert(err) } if (err) { return global.alert(err) }
customCategory.category = category customCategory.category = category
customCategory.edit() customCategory.edit()
@ -203,8 +200,8 @@ hooks.register('browser-more-categories', (browser, parameters) => {
a.innerHTML = lang('customCategory:create') a.innerHTML = lang('customCategory:create')
a.href = '#' a.href = '#'
a.onclick = (e) => { a.onclick = (e) => {
const category = new CustomCategory()
category.edit()
const editor = new CustomCategoryEditor(repository)
editor.edit()
browser.close() browser.close()
e.preventDefault() e.preventDefault()
} }
@ -229,9 +226,8 @@ hooks.register('browser-more-categories', (browser, parameters) => {
function customCategoriesList (browser, options) { function customCategoriesList (browser, options) {
browser.dom.innerHTML = '<i class="fa fa-spinner fa-pulse fa-fw"></i> ' + lang('loading') browser.dom.innerHTML = '<i class="fa fa-spinner fa-pulse fa-fw"></i> ' + lang('loading')
fetch('customCategory.php?action=list')
.then(res => res.json())
.then(result => {
repository.listCategories({},
(err, result) => {
browser.dom.innerHTML = '' browser.dom.innerHTML = ''
const ul = document.createElement('ul') const ul = document.createElement('ul')
@ -260,8 +256,9 @@ function customCategoriesList (browser, options) {
}) })
} }
const repository = new CustomCategoryRepository()
hooks.register('init', () => { hooks.register('init', () => {
OpenStreetBrowserLoader.registerRepository('custom', new CustomCategoryRepository())
OpenStreetBrowserLoader.registerRepository('custom', repository)
}) })
hooks.register('category-overpass-init', (category) => { hooks.register('category-overpass-init', (category) => {
@ -325,7 +322,7 @@ hooks.register('category-overpass-init', (category) => {
category.tabClone.on('select', () => { category.tabClone.on('select', () => {
category.tabClone.unselect() category.tabClone.unselect()
const clone = new CustomCategory()
const clone = new CustomCategoryEditor(repository)
clone.edit() clone.edit()
category.repository.file_get_contents(category.data.fileName, {}, category.repository.file_get_contents(category.data.fileName, {},

Loading…
Cancel
Save