diff --git a/umap/static/umap/js/umap.xhr.js b/umap/static/umap/js/umap.xhr.js
deleted file mode 100644
index 453579bb..00000000
--- a/umap/static/umap/js/umap.xhr.js
+++ /dev/null
@@ -1,304 +0,0 @@
-L.U.Xhr = L.Evented.extend({
- initialize: function (ui) {
- this.ui = ui
- },
-
- _wrapper: function () {
- let wrapper
- if (window.XMLHttpRequest === undefined) {
- wrapper = () => {
- try {
- return new window.ActiveXObject('Microsoft.XMLHTTP.6.0')
- } catch (e1) {
- try {
- return new window.ActiveXObject('Microsoft.XMLHTTP.3.0')
- } catch (e2) {
- throw new Error('XMLHttpRequest is not supported')
- }
- }
- }
- } else {
- wrapper = window.XMLHttpRequest
- }
- return new wrapper()
- },
-
- _ajax: function (settings) {
- const xhr = this._wrapper(),
- id = Math.random(),
- self = this
- this.fire('dataloading', { id: id })
- const loaded = () => {
- self.fire('dataload', { id: id })
- }
-
- try {
- xhr.open(settings.verb, settings.uri, true)
- } catch (err) {
- // Unknown protocol?
- this.ui.alert({
- content: L._('Error while fetching {url}', { url: settings.uri }),
- level: 'error',
- })
- loaded()
- return
- }
-
- if (
- settings.uri.indexOf('http') !== 0 ||
- settings.uri.indexOf(window.location.origin) === 0
- ) {
- // "X-" mode headers cause the request to be in preflight mode,
- // we don"t want that by default for CORS requests
- xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')
- }
- if (settings.headers) {
- for (const name in settings.headers) {
- xhr.setRequestHeader(name, settings.headers[name])
- }
- }
-
- xhr.onreadystatechange = () => {
- if (xhr.readyState === 4) {
- if (xhr.status == 200) {
- settings.callback.call(settings.context || xhr, xhr.responseText, xhr)
- } else if (xhr.status === 403) {
- self.ui.alert({
- content: xhr.responseText || L._('Action not allowed :('),
- level: 'error',
- })
- } else if (xhr.status === 412) {
- const msg = L._(
- 'Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.'
- )
- const actions = [
- {
- label: L._('Save anyway'),
- callback: function () {
- delete settings.headers['If-Match']
- self._ajax(settings)
- },
- callbackContext: self,
- },
- {
- label: L._('Cancel'),
- },
- ]
- self.ui.alert({
- content: msg,
- level: 'error',
- duration: 100000,
- actions: actions,
- })
- } else {
- if (xhr.status === 0) {
- // 0 === request cut by user or CORS
- self.ui.alert({
- content: L._(
- 'Issue reaching that URL (network problem or CORS protection): {url}',
- { url: settings.uri }
- ),
- level: 'error',
- })
- } else {
- self.ui.alert({ content: L._('Problem in the response'), level: 'error' })
- }
- }
- loaded()
- }
- }
-
- try {
- xhr.send(settings.data)
- } catch (e) {
- // Pass
- loaded()
- console.error('Bad Request', e)
- }
- },
-
- // supports only JSON as response data type
- _json: function (verb, uri, options) {
- const args = arguments,
- self = this
- const default_options = {
- async: true,
- callback: null,
- responseType: 'text',
- data: null,
- listen_form: null, // optional form to listen in default callback
- }
- const settings = L.Util.extend({}, default_options, options)
-
- if (verb === 'POST') {
- // find a way not to make this django specific
- const token = document.cookie.replace(
- /(?:(?:^|.*;\s*)csrftoken\s*\=\s*([^;]*).*$)|^.*$/,
- '$1'
- )
- if (token) {
- settings.headers = settings.headers || {}
- settings.headers['X-CSRFToken'] = token
- }
- }
-
- const callback = function (responseText, response) {
- let data
- try {
- data = JSON.parse(responseText)
- } catch (err) {
- console.log(err)
- self.ui.alert({
- content: L._('Problem in the response format'),
- level: 'error',
- })
- return
- }
- if (data.errors) {
- console.log(data.errors)
- self.ui.alert({ content: L._('An error occured'), level: 'error' })
- } else if (data.login_required) {
- // login_required should be an URL for the login form
- if (settings.login_callback) settings.login_callback(data)
- else self.login(data, args)
- } else {
- if (settings.callback)
- L.bind(settings.callback, settings.context || this)(data, response)
- else self.default_callback(data, settings, response)
- }
- }
-
- this._ajax({
- verb: verb,
- uri: uri,
- data: settings.data,
- callback: callback,
- headers: settings.headers,
- listener: settings.listener,
- })
- },
-
- get: function (uri, options) {
- this._json('GET', uri, options)
- },
-
- post: function (uri, options) {
- this._json('POST', uri, options)
- },
-
- submit_form: function (form_id, options) {
- if (typeof options === 'undefined') options = {}
- const form = L.DomUtil.get(form_id)
- const formData = new FormData(form)
- if (options.extraFormData) formData.append(options.extraFormData)
- options.data = formData
- this.post(form.action, options)
- return false
- },
-
- listen_form: function (form_id, options) {
- const form = L.DomUtil.get(form_id),
- self = this
- if (!form) return
- L.DomEvent.on(form, 'submit', L.DomEvent.stopPropagation)
- .on(form, 'submit', L.DomEvent.preventDefault)
- .on(form, 'submit', () => {
- self.submit_form(form_id, options)
- })
- },
-
- listen_link: function (link_id, options) {
- const link = L.DomUtil.get(link_id),
- self = this
- if (link) {
- L.DomEvent.on(link, 'click', L.DomEvent.stop).on(link, 'click', () => {
- if (options.confirm && !confirm(options.confirm)) {
- return
- }
- self.get(link.href, options)
- })
- }
- },
-
- default_callback: function (data, options) {
- // default callback, to avoid boilerplate
- if (data.redirect) {
- const newPath = data.redirect
- if (window.location.pathname == newPath)
- window.location.reload() // Keep the hash, so the current view
- else window.location = newPath
- } else if (data.info) {
- this.ui.alert({ content: data.info, level: 'info' })
- this.ui.closePanel()
- } else if (data.error) {
- this.ui.alert({ content: data.error, level: 'error' })
- } else if (data.html) {
- const ui_options = { data: data }
- let listen_options
- if (options.className) ui_options.className = options.className
- this.ui.openPanel(ui_options)
- // To low boilerplate, if there is a form, listen it
- if (options.listen_form) {
- // Listen form again
- listen_options = L.Util.extend({}, options, options.listen_form.options)
- this.listen_form(options.listen_form.id, listen_options)
- }
- if (options.listen_link) {
- for (let i = 0, l = options.listen_link.length; i < l; i++) {
- // Listen link again
- listen_options = L.Util.extend({}, options, options.listen_link[i].options)
- this.listen_link(options.listen_link[i].id, listen_options)
- }
- }
- } else if (options.success) {
- // Success is called only if data contain no msg and no html
- options.success(data)
- }
- },
-
- login: function (data, args) {
- // data.html: login form
- // args: args of the first _json call, to call again at process end
- const self = this
- const proceed = () => {
- self.ui.closePanel()
- if (typeof args !== 'undefined') self._json.apply(self, args)
- else self.default_callback(data, {})
- }
- const ask_for_login = (data) => {
- self.ui.openPanel({ data: data, className: 'login-panel' })
- self.listen_form('login_form', {
- callback: function (data) {
- if (data.html) ask_for_login(data) // Problem in the login - ask again
- else proceed()
- },
- })
- // Auth links
- const links = document.getElementsByClassName('umap-login-popup')
- Object.keys(links).forEach((el) => {
- const link = links[el]
- L.DomEvent.on(link, 'click', L.DomEvent.stop).on(link, 'click', () => {
- self.ui.closePanel()
- const win = window.open(link.href)
- window.umap_proceed = () => {
- proceed()
- win.close()
- }
- })
- })
- }
- if (data.login_required) {
- this.get(data.login_required, {
- callback: function (data) {
- ask_for_login(data)
- },
- })
- } else {
- ask_for_login(data)
- }
- },
-
- logout: function (url) {
- this.get(url)
- },
-})
diff --git a/umap/static/umap/test/index.html b/umap/static/umap/test/index.html
index d802ed73..0640fb7a 100644
--- a/umap/static/umap/test/index.html
+++ b/umap/static/umap/test/index.html
@@ -35,7 +35,6 @@
-
diff --git a/umap/templates/umap/js.html b/umap/templates/umap/js.html
index 26edc820..7d7a245f 100644
--- a/umap/templates/umap/js.html
+++ b/umap/templates/umap/js.html
@@ -36,7 +36,6 @@
-