/**
|
|
Implémente la télécommande JOSM
|
|
|
|
Le HTML géré pourrait ressembler à :
|
|
|
|
```html
|
|
<button
|
|
type="button"
|
|
data-controller="josm"
|
|
data-action="click->josm#remoteControl"
|
|
data-josm-commands-value="…"
|
|
>JOSM</button>
|
|
```
|
|
|
|
Où la valeur `commands` prend la forme d’un objet JSON dont chacune des entrées
|
|
représente une commande à enchaîner successivement et où la clef est le chemin
|
|
de la commande et la valeur un objet dont chacune des entrées représente les
|
|
paramètres de la commande.
|
|
|
|
Par exemple :
|
|
|
|
```json
|
|
{
|
|
"version": {},
|
|
"imagery": {
|
|
"id": "osmfr",
|
|
}
|
|
}
|
|
```
|
|
|
|
Avec cette valeur de `commands`, les appels successifs aux endpoints `/version`
|
|
puis `imagery?id=osmfr` seront effectués.
|
|
|
|
Cf <https://josm.openstreetmap.de/wiki/Help/RemoteControlCommands>
|
|
|
|
TODO Gérer le cas où il n’y a pas de JOSM en face pourrait être plus user-friendly.
|
|
**/
|
|
import { Controller } from '@hotwired/stimulus';
|
|
|
|
export default class extends Controller {
|
|
static values = {
|
|
commands: String,
|
|
}
|
|
|
|
remoteControl() {
|
|
const baseurl = 'http://localhost:8111';
|
|
const _this = this, commands = JSON.parse(this.commandsValue);
|
|
for (var command in commands) {
|
|
var url = baseurl + '/' + command, params = new URLSearchParams();
|
|
for (var name in commands[command]) {
|
|
params.append(name, commands[command][name]);
|
|
}
|
|
if (Array.from(params.length > 0)) {
|
|
url += '?' + params.toString();
|
|
}
|
|
fetch(url)
|
|
.then(function (response) {
|
|
return response.text();
|
|
})
|
|
.then(function (text) {
|
|
});
|
|
}
|
|
}
|
|
}
|