Maurice
2c06c9904b
feat(collections): a list as a file, so it can leave the instance ( #2198 )
...
Sharing a list works between people on the same TREK. This is the other
case: giving one to somebody who runs their own, or keeping a copy. Export
sits beside Edit and Share in the list header and downloads the open list;
Import sits beside New list in the rail, reads a file, shows what is in it
and makes a new list of it. Desktop only, which the route already decides.
What travels is what somebody wrote down: the list's name, colour and
description, its labels, and each place with its address, coordinates,
notes, status, contact details, category name and labels. A file is dull
JSON on purpose, so it can be read and edited by a person.
What does not travel is everything that only means something on the instance
it came from. Ids of every kind, since the receiver issues its own and a
category crosses over by name. Star ratings and members, because a rating is
an opinion somebody gave the people on that list. Provenance into trips,
which points at rows the receiver cannot see. And an image path under
/uploads, which resolves on the sender's server: only an absolute https URL
survives.
A file is a stranger's JSON and is read as one. It is parsed in the browser
that chose it and never uploaded; the parsed list goes through the same
contract on both sides; and a link that is not http(s) arrives as nothing
rather than as an anchor. Strict where it must refuse, forgiving where it
can drop: a file that does not say what it is never reaches the importer,
while one unreadable place inside it is skipped and counted, and one bad
field on a good place costs that field alone.
An import is always a new list. Importing into an existing one would mean
deciding what happens to a place that is already there, and every answer to
that is a merge nobody asked for.
2026-09-11 14:58:34 +02:00
..
2026-08-07 21:07:14 +02:00
2026-08-07 22:18:14 +02:00
2026-09-07 14:05:33 +02:00
2026-08-07 16:00:12 +02:00
2026-09-06 15:03:13 +02:00
2026-08-22 11:33:55 +02:00
2026-08-22 11:33:55 +02:00
2026-08-07 19:58:12 +02:00
2026-08-17 14:48:23 +02:00
2026-08-22 11:33:55 +02:00
2026-08-11 20:28:49 +02:00
2026-08-23 11:59:12 +02:00
2026-09-01 17:18:10 +02:00
2026-08-13 14:06:35 +02:00
2026-08-13 14:06:35 +02:00
2026-08-10 17:08:54 +02:00
2026-06-16 22:22:45 +02:00
2026-09-09 00:11:00 +02:00
2026-08-15 16:42:27 +02:00
2026-08-15 16:42:27 +02:00
2026-08-09 20:54:39 +02:00
2026-08-10 19:54:46 +02:00
2026-09-08 20:41:57 +02:00
2026-09-01 16:19:21 +02:00
2026-08-22 11:33:55 +02:00
2026-06-16 22:22:45 +02:00
2026-07-25 15:12:38 +02:00
2026-09-01 17:18:10 +02:00
2026-09-01 17:18:10 +02:00
2026-08-17 14:48:23 +02:00
2026-08-13 14:06:35 +02:00
2026-08-28 20:11:28 +02:00
2026-07-27 22:34:41 +02:00
2026-08-23 11:59:12 +02:00
2026-09-01 17:18:10 +02:00
2026-08-28 15:23:05 +02:00
2026-08-07 15:14:14 +02:00
2026-09-07 14:05:33 +02:00
2026-08-22 11:33:55 +02:00
2026-08-22 11:33:55 +02:00
2026-08-22 11:33:55 +02:00
2026-08-09 19:46:00 +02:00
2026-09-04 12:15:38 +02:00
2026-09-08 23:15:26 +02:00
2026-08-16 23:17:50 +02:00
2026-08-22 11:33:55 +02:00
2026-09-02 21:06:51 +02:00
2026-08-10 19:54:46 +02:00
2026-07-26 15:28:55 +02:00
2026-09-06 15:02:58 +02:00
2026-08-10 19:54:46 +02:00
2026-08-12 14:14:37 +02:00
2026-09-09 00:11:00 +02:00
2026-09-06 15:02:58 +02:00
2026-08-22 11:33:55 +02:00
2026-09-11 14:58:34 +02:00
2026-08-25 19:26:38 +02:00
2026-06-16 22:22:45 +02:00
2026-09-01 17:18:10 +02:00
2026-08-10 21:49:27 +02:00
2026-07-25 18:14:37 +02:00
2026-07-25 18:14:37 +02:00
2026-08-11 22:14:12 +02:00
2026-08-11 22:14:12 +02:00
2026-09-07 18:36:54 +02:00
2026-08-07 18:42:53 +02:00
2026-08-11 22:23:51 +02:00
2026-08-22 11:33:55 +02:00
2026-08-11 16:42:49 +02:00
2026-08-11 22:23:51 +02:00
2026-08-11 11:15:32 +02:00
2026-09-08 23:15:26 +02:00
2026-09-08 23:15:26 +02:00
2026-08-11 09:58:37 +02:00
2026-09-07 09:01:56 +02:00
2026-09-01 17:18:10 +02:00
2026-08-23 11:59:12 +02:00
2026-09-08 15:24:21 +02:00
2026-08-23 11:59:12 +02:00
2026-09-03 10:47:08 +02:00
2026-09-02 21:06:42 +02:00
2026-08-20 15:43:27 +02:00
2026-09-03 10:47:08 +02:00
2026-09-03 10:47:08 +02:00
2026-08-23 11:59:12 +02:00
2026-09-03 13:59:39 +02:00
2026-08-15 16:42:27 +02:00
2026-08-15 16:42:27 +02:00
2026-09-09 19:03:00 +02:00
2026-08-15 16:42:27 +02:00
2026-08-15 16:42:27 +02:00
2026-09-07 18:36:54 +02:00
2026-09-08 20:41:57 +02:00
2026-09-09 18:55:31 +02:00
2026-09-07 18:36:54 +02:00
2026-08-10 12:24:15 +02:00
2026-09-08 20:41:57 +02:00
2026-09-07 14:05:33 +02:00
2026-09-07 18:36:54 +02:00
2026-08-10 12:24:15 +02:00
2026-09-07 14:05:33 +02:00
2026-09-08 20:41:57 +02:00
2026-09-08 20:41:57 +02:00
2026-09-07 18:36:54 +02:00
2026-08-11 22:44:20 +02:00
2026-09-07 18:36:54 +02:00
2026-08-11 23:11:34 +02:00
2026-08-23 11:59:12 +02:00
2026-08-08 22:27:56 +02:00
2026-08-10 19:54:46 +02:00
2026-09-08 15:24:21 +02:00
2026-08-08 22:27:56 +02:00
2026-08-10 13:38:26 +02:00
2026-08-22 11:33:55 +02:00
2026-09-06 15:02:58 +02:00
2026-09-06 15:02:58 +02:00
2026-08-08 12:09:56 +02:00
2026-09-06 15:02:58 +02:00
2026-09-04 12:15:53 +02:00
2026-09-04 12:15:53 +02:00
2026-08-23 11:59:12 +02:00
2026-09-04 12:15:53 +02:00
2026-08-15 16:42:27 +02:00
2026-08-15 22:48:03 +02:00
2026-08-28 20:11:28 +02:00
2026-09-02 16:21:50 +02:00
2026-09-02 16:21:50 +02:00
2026-09-02 21:06:51 +02:00
2026-08-23 11:59:12 +02:00
2026-08-23 11:59:12 +02:00
2026-08-10 17:08:54 +02:00
2026-08-22 11:33:55 +02:00
2026-08-10 19:54:46 +02:00
2026-08-10 12:24:15 +02:00
2026-09-07 14:05:33 +02:00
2026-09-07 14:05:33 +02:00
2026-09-07 14:05:33 +02:00
2026-09-07 14:05:33 +02:00
2026-09-07 14:05:33 +02:00
2026-09-07 18:36:54 +02:00
2026-09-07 18:36:54 +02:00
2026-07-30 17:07:12 +02:00
2026-08-12 17:43:22 +02:00
2026-08-29 12:22:46 +02:00
2026-08-22 11:33:55 +02:00
2026-08-28 15:23:05 +02:00
2026-08-28 15:23:05 +02:00
2026-08-28 15:23:05 +02:00
2026-08-23 11:59:12 +02:00
2026-08-19 23:36:42 +02:00
2026-08-10 19:54:46 +02:00
2026-08-09 22:43:05 +02:00
2026-08-10 21:49:27 +02:00
2026-08-23 11:59:12 +02:00
2026-09-04 19:08:15 +02:00
2026-09-10 21:40:51 +02:00
2026-09-10 21:40:51 +02:00
2026-08-23 11:59:12 +02:00
2026-09-09 14:52:50 +02:00
2026-08-15 22:48:16 +02:00
2026-08-15 16:42:27 +02:00
2026-08-27 12:06:55 +02:00
2026-08-22 11:33:55 +02:00
2026-09-11 11:01:25 +02:00
2026-09-02 21:06:42 +02:00
2026-09-09 10:11:36 +02:00
2026-08-25 19:26:38 +02:00
2026-09-08 15:24:21 +02:00
2026-06-16 22:22:45 +02:00
2026-08-15 16:42:27 +02:00
2026-08-10 19:54:46 +02:00
2026-07-26 15:28:55 +02:00
2026-08-22 11:33:55 +02:00
2026-08-09 19:13:21 +02:00
2026-08-16 23:17:50 +02:00
2026-08-28 15:23:05 +02:00
2026-08-01 12:45:35 +02:00
2026-09-07 09:01:56 +02:00
2026-08-20 18:40:21 +02:00
2026-08-22 11:33:55 +02:00
2026-08-18 22:24:29 +02:00
2026-09-07 18:36:54 +02:00
2026-08-19 23:36:42 +02:00
2026-08-09 19:13:21 +02:00
2026-08-10 19:54:46 +02:00
2026-08-10 13:38:26 +02:00
2026-08-11 16:42:49 +02:00
2026-08-10 13:38:26 +02:00
2026-08-27 12:03:04 +02:00
2026-09-01 17:18:10 +02:00
2026-09-07 18:36:54 +02:00
2026-09-01 16:19:21 +02:00
2026-08-11 16:42:49 +02:00
2026-08-22 11:33:55 +02:00
2026-08-12 00:38:41 +02:00
2026-08-28 20:11:28 +02:00
2026-08-23 11:59:12 +02:00
2026-08-15 16:42:27 +02:00
2026-08-18 22:24:29 +02:00
2026-09-01 17:18:10 +02:00
2026-08-23 11:59:12 +02:00
2026-08-10 13:38:26 +02:00
2026-08-11 09:58:37 +02:00
2026-06-16 22:22:45 +02:00