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.

64 lines
1.7 KiB

2 months ago
2 months ago
2 months ago
2 months ago
  1. /**
  2. Implémente la télécommande JOSM
  3. Le HTML géré pourrait ressembler à :
  4. ```html
  5. <button
  6. type="button"
  7. data-controller="josm"
  8. data-action="click->josm#remoteControl"
  9. data-josm-commands-value="…"
  10. >JOSM</button>
  11. ```
  12. la valeur `commands` prend la forme dun objet JSON dont chacune des entrées
  13. représente une commande à enchaîner successivement et la clef est le chemin
  14. de la commande et la valeur un objet dont chacune des entrées représente les
  15. paramètres de la commande.
  16. Par exemple :
  17. ```json
  18. {
  19. "version": {},
  20. "imagery": {
  21. "id": "osmfr",
  22. }
  23. }
  24. ```
  25. Avec cette valeur de `commands`, les appels successifs aux endpoints `/version`
  26. puis `imagery?id=osmfr` seront effectués.
  27. Cf <https://josm.openstreetmap.de/wiki/Help/RemoteControlCommands>
  28. TODO Gérer le cas il ny a pas de JOSM en face pourrait être plus user-friendly.
  29. **/
  30. import { Controller } from '@hotwired/stimulus';
  31. export default class extends Controller {
  32. static values = {
  33. commands: String,
  34. }
  35. remoteControl() {
  36. const baseurl = 'http://localhost:8111';
  37. const _this = this, commands = JSON.parse(this.commandsValue);
  38. for (var command in commands) {
  39. var url = baseurl + '/' + command, params = new URLSearchParams();
  40. for (var name in commands[command]) {
  41. params.append(name, commands[command][name]);
  42. }
  43. if (Array.from(params.length > 0)) {
  44. url += '?' + params.toString();
  45. }
  46. fetch(url)
  47. .then(function (response) {
  48. return response.text();
  49. })
  50. .then(function (text) {
  51. });
  52. }
  53. }
  54. }