mirror of
https://github.com/umap-project/umap.git
synced 2025-05-19 20:20:33 +02:00
Compare commits
No commits in common. "a442e56cbca91106ba37a6cea168479d0f60288e" and "3e9982c8cba23bcc37abdbe5adff792b61f4d19c" have entirely different histories.
a442e56cbc
...
3e9982c8cb
7 changed files with 17 additions and 57 deletions
|
@ -57,11 +57,8 @@ class uMapAlert extends uMapElement {
|
|||
this.container.dataset.duration = duration
|
||||
this.element.textContent = message
|
||||
this.setAttribute('open', 'open')
|
||||
if (this._timeoutId) {
|
||||
clearTimeout(this._timeoutId)
|
||||
}
|
||||
if (Number.isFinite(duration)) {
|
||||
this._timeoutId = setTimeout(() => {
|
||||
setTimeout(() => {
|
||||
this._hide()
|
||||
}, duration)
|
||||
}
|
||||
|
|
|
@ -249,7 +249,6 @@ export class DataLayer extends ServerStored {
|
|||
}
|
||||
|
||||
fromGeoJSON(geojson, sync = true) {
|
||||
if (!geojson) return []
|
||||
const features = this.addData(geojson, sync)
|
||||
this._geojson = geojson
|
||||
this.onDataLoaded()
|
||||
|
@ -283,10 +282,8 @@ export class DataLayer extends ServerStored {
|
|||
}
|
||||
|
||||
backupData() {
|
||||
if (this._geojson) {
|
||||
this._geojson_bk = Utils.CopyJSON(this._geojson)
|
||||
}
|
||||
}
|
||||
|
||||
reindex() {
|
||||
const features = Object.values(this._features)
|
||||
|
@ -322,9 +319,7 @@ export class DataLayer extends ServerStored {
|
|||
if (!this.isRemoteLayer()) return
|
||||
if (!this.hasDynamicData() && this.hasDataLoaded() && !force) return
|
||||
if (!this.isVisible()) return
|
||||
// Keep non proxied url for later use in Alert.
|
||||
const remoteUrl = this._umap.renderUrl(this.options.remoteData.url)
|
||||
let url = remoteUrl
|
||||
let url = this._umap.renderUrl(this.options.remoteData.url)
|
||||
if (this.options.remoteData.proxy) {
|
||||
url = this._umap.proxyUrl(url, this.options.remoteData.ttl)
|
||||
}
|
||||
|
@ -333,14 +328,6 @@ export class DataLayer extends ServerStored {
|
|||
return this._umap.formatter
|
||||
.parse(raw, this.options.remoteData.format)
|
||||
.then((geojson) => this.fromGeoJSON(geojson))
|
||||
.catch((error) => {
|
||||
Alert.error(
|
||||
translate('Cannot parse remote data for layer "{layer}" with url "{url}"', {
|
||||
layer: this.getName(),
|
||||
url: remoteUrl,
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -468,7 +455,7 @@ export class DataLayer extends ServerStored {
|
|||
// otherwise the layer becomes uneditable.
|
||||
return this.makeFeatures(geojson, sync)
|
||||
} catch (err) {
|
||||
console.debug('Error with DataLayer', this.id)
|
||||
console.log('Error with DataLayer', this.id)
|
||||
console.error(err)
|
||||
return []
|
||||
}
|
||||
|
@ -515,7 +502,7 @@ export class DataLayer extends ServerStored {
|
|||
feature = new Polygon(this._umap, this, geojson, id)
|
||||
break
|
||||
default:
|
||||
console.debug(geojson)
|
||||
console.log(geojson)
|
||||
Alert.error(
|
||||
translate('Skipping unknown geometry.type: {type}', {
|
||||
type: geometry.type || 'undefined',
|
||||
|
@ -537,9 +524,6 @@ export class DataLayer extends ServerStored {
|
|||
if (data?.length) this.isDirty = true
|
||||
return data
|
||||
})
|
||||
.catch((error) => {
|
||||
Alert.error(translate('Import failed: invalid data'))
|
||||
})
|
||||
}
|
||||
|
||||
readFile(f) {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/* Uses globals for: csv2geojson, osmtogeojson (not available as ESM) */
|
||||
import { translate } from './i18n.js'
|
||||
import { uMapAlert as Alert } from '../components/alerts/alert.js'
|
||||
|
||||
export const EXPORT_FORMATS = {
|
||||
geojson: {
|
||||
|
@ -59,7 +58,11 @@ export class Formatter {
|
|||
}
|
||||
|
||||
async fromGeoJSON(str) {
|
||||
try {
|
||||
return JSON.parse(str)
|
||||
} catch (err) {
|
||||
U.Alert.error(`Invalid JSON file: ${err}`)
|
||||
}
|
||||
}
|
||||
|
||||
async fromOSM(str) {
|
||||
|
@ -103,8 +106,8 @@ export class Formatter {
|
|||
message: err[0].message,
|
||||
})
|
||||
}
|
||||
Alert.error(message, 10000)
|
||||
console.debug(err)
|
||||
U.Alert.error(message, 10000)
|
||||
console.error(err)
|
||||
}
|
||||
if (result?.features.length) {
|
||||
callback(result)
|
||||
|
@ -124,7 +127,7 @@ export class Formatter {
|
|||
const doc = new DOMParser().parseFromString(x, 'text/xml')
|
||||
const errorNode = doc.querySelector('parsererror')
|
||||
if (errorNode) {
|
||||
Alert.error(translate('Cannot parse data'))
|
||||
U.Alert.error(translate('Cannot parse data'))
|
||||
}
|
||||
return doc
|
||||
}
|
||||
|
|
|
@ -305,7 +305,7 @@ export default class Importer extends Utils.WithTemplate {
|
|||
this.onSuccess()
|
||||
} catch (e) {
|
||||
this.onError(translate('Invalid umap data'))
|
||||
console.debug(e)
|
||||
console.error(e)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1111,7 +1111,7 @@ export default class Umap extends ServerStored {
|
|||
this._editOverlay(container)
|
||||
this._editBounds(container)
|
||||
this._editSlideshow(container)
|
||||
if (this.properties.websocketEnabled && this.id) {
|
||||
if (this.properties.websocketEnabled) {
|
||||
this._editSync(container)
|
||||
}
|
||||
this._advancedActions(container)
|
||||
|
@ -1450,7 +1450,7 @@ export default class Umap extends ServerStored {
|
|||
|
||||
removeDataLayers() {
|
||||
this.eachDataLayerReverse((datalayer) => {
|
||||
datalayer.del()
|
||||
datalayer._delete()
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ def test_umap_import_from_file(live_server, tilelayer, page):
|
|||
expect(nonloaded).to_have_count(1)
|
||||
|
||||
|
||||
@pytest.mark.skip
|
||||
def test_umap_import_from_textarea(live_server, tilelayer, page, settings):
|
||||
settings.UMAP_ALLOW_ANONYMOUS = True
|
||||
page.goto(f"{live_server.url}/map/new/")
|
||||
|
@ -122,28 +123,6 @@ def test_import_geojson_from_textarea(tilelayer, live_server, page):
|
|||
expect(paths).to_have_count(3)
|
||||
|
||||
|
||||
def test_import_invalid_data(tilelayer, live_server, page):
|
||||
uncaught_errors = []
|
||||
page.on("pageerror", lambda exc: uncaught_errors.append(exc))
|
||||
page.goto(f"{live_server.url}/map/new/")
|
||||
page.get_by_title("Open browser").click()
|
||||
layers = page.locator(".umap-browser .datalayer")
|
||||
markers = page.locator(".leaflet-marker-icon")
|
||||
paths = page.locator("path")
|
||||
expect(markers).to_have_count(0)
|
||||
expect(paths).to_have_count(0)
|
||||
expect(layers).to_have_count(0)
|
||||
button = page.get_by_title("Import data")
|
||||
expect(button).to_be_visible()
|
||||
button.click()
|
||||
textarea = page.locator(".umap-upload textarea")
|
||||
textarea.fill("invalid data")
|
||||
for format in ["geojson", "csv", "gpx", "kml", "georss", "osm", "umap"]:
|
||||
page.locator('select[name="format"]').select_option(format)
|
||||
page.get_by_role("button", name="Import data", exact=True).click()
|
||||
assert not uncaught_errors, f"Error with format {format}"
|
||||
|
||||
|
||||
def test_import_kml_from_textarea(tilelayer, live_server, page):
|
||||
page.goto(f"{live_server.url}/map/new/")
|
||||
page.get_by_title("Open browser").click()
|
||||
|
|
|
@ -503,12 +503,9 @@ def test_create_and_sync_map(new_page, asgi_live_server, tilelayer, login, user)
|
|||
# Create a syncable map with peerA
|
||||
peerA = login(user, prefix="Page A")
|
||||
peerA.goto(f"{asgi_live_server.url}/en/map/new/")
|
||||
peerA.get_by_role("link", name="Map advanced properties").click()
|
||||
expect(peerA.get_by_text("Real-time collaboration", exact=True)).to_be_hidden()
|
||||
with peerA.expect_response(re.compile("./map/create/.*")):
|
||||
peerA.get_by_role("button", name="Save Draft").click()
|
||||
peerA.get_by_role("link", name="Map advanced properties").click()
|
||||
expect(peerA.get_by_text("Real-time collaboration", exact=True)).to_be_visible()
|
||||
peerA.get_by_text("Real-time collaboration", exact=True).click()
|
||||
peerA.get_by_text("Enable real-time").click()
|
||||
peerA.get_by_role("link", name="Update permissions and editors").click()
|
||||
|
|
Loading…
Reference in a new issue