-
Notifications
You must be signed in to change notification settings - Fork 18
/
Things.d.ts
136 lines (124 loc) · 3.98 KB
/
Things.d.ts
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/**
* # Things
*
*/
/**
* # TJSContainer
*
* Wraps an array of todo and/or project items and encodes them into a URL for use to send the request to Things.
*
* ## Things Integration Notes
*
* * [Things](https://culturedcode.com/things/) is a popular task and project management app from Cultured Code. Things supports advanced URL schemes (required Things v3.4 or greater on iOS) which can accept multiple todos, projects, headings in a single call to the app. The scripting interfaces below are convenience wrappers that allow easy creation and encoding of the URLs needed to pass this type of information to Things.
*
* The TJS\* JavaScript objects are wrappers around an [open source Swift library](https://github.com/culturedcode/ThingsJSONCoder) provided by Cultured Code, with a few modifications to work in JavaScript. In all cases, nothing is committed to Things until the the items are wrapped in a TJSContainer, and the URL it generates called to send the data to Things. This is best done with Drafts’ `CallbackURL` object (see example below).
*
* For more information about what values Things understands in these objects, refer to [their URL scheme documenation](https://support.culturedcode.com/customer/en/portal/articles/2803573).
*
* ### Example
*
* ```javascript
* // create a Things Project
* var project = TJSProject.create();
* project.title = "My Project From Drafts";
* project.notes = "Let's do this stuff";
*
* // create and add a heading to the project
* var heading = TJSHeading.create();
* heading.title = "First Heading";
* project.addHeading(heading);
*
* // add todos to the project
* var todo1 = TJSTodo.create();
* todo1.title = "My first todo";
* todo1.when = "today";
* project.addTodo(todo1);
*
* var todo2 = TJSTodo.create();
* todo2.title = "My second todo";
* todo2.when = "tomorrow";
* project.addTodo(todo2);
*
* // create a container to handle creation of Things URL
* var container = TJSContainer.create([project]);
*
* // Use CallbackURL object to open URL in Things.
* var cb = CallbackURL.create();
* cb.baseURL = container.url;
* var success = cb.open();
* if (success) {
* console.log("Project created in Things");
* }
* else {
* context.fail();
* }
* ```
*/
declare class TJSContainer {
static create(items: Array<TJSProject | TJSTodo>): TJSContainer
/**
* The full URL with encoded TJSContainer parameters.
*/
url: string
}
/**
* # TJSProject
*
* Represents a Things project, with headings and todo items. See [[TJSContainer]] documentation for details on making requests to Things.
*/
declare class TJSProject {
static create(): TJSProject
title: string
notes: string
when: string
deadline: string
areaID: string
area: string
completed: boolean
canceled: boolean
tags: string[]
addTag(tag: string): void
addTodo(todo: TJSTodo): void
addHeading(heading: TJSHeading): void
}
/**
* # TJSHeading
*
* Represents a Things heading within a project. See [[TJSContainer]] documentation for details on making requests to Things.
*/
declare class TJSHeading {
static create(): TJSHeading
title: string
archived: boolean
}
/**
* # TJSTodo
*
* Represents a Things todo item. Todos can be added a project or directly to a container. See [[TJSContainer]] documentation for details on making requests to Things.
*/
declare class TJSTodo {
static create(): TJSTodo
title: string
notes: string
when: string
deadline: string
listID: string
list: string
tags: string[]
heading: string
completed: boolean
canceled: boolean
addChecklistItem(item: TJSChecklistItem): void
addTag(tag: string): void
}
/**
* # TJSChecklistItem
*
* Represents a Things check list item, which can be added to a Todo. See [[TJSContainer]] documentation for details on making requests to Things.
*/
declare class TJSChecklistItem {
static create(): TJSChecklistItem
title: string
completed: boolean
canceled: boolean
}