summaryrefslogtreecommitdiff
path: root/TODO.md
blob: a1e4b501ca13e90b97c30cc215bcded440fc7d4b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
* Add a link to download as CSV.

* HTTP
** Show the request too
** Render Link headers from the response

* Handle/follow redirects.

* Support basic authentication

* Support oauth authentication

* Allow the application to inline queries and templates. A collection
  can point to documents that contain queries and templates with link
  relations, the client should be able to fetch these and inline them.

  Might have to be done on the server side. Should probably make this
  an optional feature enabled with cookies or something.

* Usability: For usability for newcomers to C+J consider adding explanatory texts
  all over the application. Explain where data comes from, why
  something is missing (missing fields etc). Allow the user close
  warnings and have the browser remember which warnings has been
  silenced.

* Support uploading of c+j documents to allow people to work on
  example documents in an interactive way.

* Create a generator that users can use to create their own
  collection+json documents.

  Make interactive so people can collaborate on a single specification.

* BUG: when executing queries, the URL in the "http response" section
  is not the correct url, it's missing the query parameters.

* Add an OpenSearch document to the root page so that people can add
  the site as an search engine.

# UI

* Add a setting to optionally show the URL. Default to not showing the
  URLs to signify that the URLs are not important.

# Document features

* Automatic paging
* Inline display of images (```<img>``` style)
* CR(U)D features

# Extra services

Having a set of services that shows off what a generic client can do
would be useful to show the eneric power of hypermedia.

* An 'unroller/pager' service

  Given any c+j list and a wanted page size (possibly unlimited), walk
  all 'next' links and create a new list.

  Useful as 1) a way to show that generic formats can lead to generic
  tools. The explorer itself is one tool, this service would be
  another.

  It might be useful for tools that doesn't do paging natively, or
  some third party want to ensure that the consumer is given a
  specific chunk size of data. Example applications include mobile
  phones, simple shell scripts etc.

  TODO: Since there's no way to tell what kind of data each link will
  give strictly speaking all links has to be rewritten to point back
  to the service. This might be very unefficient so make it possible
  to give a set of relations and/or names that it will automatically
  redirect through the service and leave the rest alone.

* 'atomizer' service

  It's too bad that C+J doesn't have a way to identify 'id' or 'last
  updated' fields, but it's always possible name fields that work as
  'id' or 'published'/'updated'. Given this it's possible to rewrite
  any c+j collection to atom (and some more perhaps).

* Generator

  Create a service that takes a single collection and follows a set of
  links/queries from the collection/each item and creates a new set.

* Filter/selector/projection/map

  Take a collection and run a JS-expression on the code, return those
  who doesn't evaluate to false.

* Reduce

  Given a collection + JS function, reduce the entire collection to a
  single item.

## Example usage

# List of all events for an organization

Github doesn't have a way to get a single feed for a
user/organization. The list for a repository contains commits, issue
and other stuff.

 1. Find all repositories for an organization/user
 1. for each repo, select all commits
 1. Merge by commit date
 1. (create atom feed)

Similar for all issues.