|
1 | 1 | # iHW Project Design Specifications |
2 | 2 |
|
3 | | -*In order to make the iHW project more coordinated, unified, and better overall, I think that it’s a good idea for us to write up exactly how we are going about creating the two phone apps and web app. If we use this document to communicate our goals and ideas for the project, we can more effectively create a unified experience for the app across platforms. Please add or edit anything you want in any of the sections below, or even add new sections—this is our space to share ideas. Thanks!* |
| 3 | +*In order to make the iHW project more coordinated, unified, and better |
| 4 | +overall, I think that it’s a good idea for us to write up exactly how we |
| 5 | +are going about creating the two phone apps and web app. If we use this |
| 6 | +document to communicate our goals and ideas for the project, we can more |
| 7 | +effectively create a unified experience for the app across platforms. |
| 8 | +Please add or edit anything you want in any of the sections below, or |
| 9 | +even add new sections—this is our space to share ideas. Thanks!* |
4 | 10 |
|
5 | 11 | ## Required Features - View |
6 | 12 |
|
|
14 | 20 |
|
15 | 21 | ### Schedule View |
16 | 22 |
|
17 | | -- Shows one day at a time, with the ability to swipe left and right to see different days. |
| 23 | +- Shows one day at a time, with the ability to swipe left and right to |
| 24 | + see different days. |
18 | 25 |
|
19 | 26 | - Shows date, day of week, and day number (if applicable). |
20 | 27 |
|
21 | 28 | - Shows a list of periods in the day. |
22 | 29 |
|
23 | | -- For each period, shows course name (or "X"), start and end times, and period number (if applicable). |
| 30 | +- For each period, shows course name (or "X"), start and end times, |
| 31 | + and period number (if applicable). |
24 | 32 |
|
25 | | -- For each period, lists the notes the user has added to the period and always has an empty box to add an additional note. |
| 33 | +- For each period, lists the notes the user has added to the period |
| 34 | + and always has an empty box to add an additional note. |
26 | 35 |
|
27 | | -- Ability to show/hide a checkbox for any note or mark it as important (makes it bigger/bolder and moves it to the top) or unimportant (restores font and moves it to the bottom) |
| 36 | +- Ability to show/hide a checkbox for any note or mark it as important |
| 37 | + (makes it bigger/bolder and moves it to the top) or unimportant |
| 38 | + (restores font and moves it to the bottom) |
28 | 39 |
|
29 | | -- Shows a countdown timer next to the period title if the period will start soon. |
| 40 | +- Shows a countdown timer next to the period title if the period will |
| 41 | + start soon. |
30 | 42 |
|
31 | | -- Has a button to jump to the current day and a button to choose a date to show. |
| 43 | +- Has a button to jump to the current day and a button to choose a |
| 44 | + date to show. |
32 | 45 |
|
33 | 46 | ### Courses Editor |
34 | 47 |
|
|
42 | 55 |
|
43 | 56 | - Has text boxes for course name and period. |
44 | 57 |
|
45 | | -- Validates the period text box as you type (doesn't let you type anything besides valid period numbers) |
| 58 | +- Validates the period text box as you type (doesn't let you type |
| 59 | + anything besides valid period numbers) |
46 | 60 |
|
47 | 61 | - Has a drop-down field to choose the term. |
48 | 62 |
|
49 | | -- Has a grid of checkboxes with three rows (period before, this period, period after) to select class meetings. |
| 63 | +- Has a grid of checkboxes with three rows (period before, this |
| 64 | + period, period after) to select class meetings. |
50 | 65 |
|
51 | 66 | - Has buttons to delete this course or save it. |
52 | 67 |
|
53 | | -- Rejects courses that do not have a name or at least one class meeting. |
| 68 | +- Rejects courses that do not have a name or at least one class |
| 69 | + meeting. |
54 | 70 |
|
55 | 71 | ## Required Features - Model |
56 | 72 |
|
57 | 73 | - Loads curriculum JSON when user selects a campus during first-run |
58 | 74 |
|
59 | | -- Reloads curriculum JSON on app launch every time there's an internet connection available |
| 75 | +- Reloads curriculum JSON on app launch every time there's an internet |
| 76 | + connection available |
60 | 77 |
|
61 | 78 | - Loads year JSON and cycle 0 on app launch |
62 | 79 |
|
63 | | -- Loads cycle JSON files as needed (preloading at least one day before and after the currently selected day) |
| 80 | +- Loads cycle JSON files as needed (preloading at least one day before |
| 81 | + and after the currently selected day) |
64 | 82 |
|
65 | | -- Loads the currently selected day, then preloads day(s) before and after it in the background |
| 83 | +- Loads the currently selected day, then preloads day(s) before and |
| 84 | + after it in the background |
66 | 85 |
|
67 | | -- Saves notes when the user is done editing a note, when a note option is changed, and when the user leaves the day where the notes are written. |
| 86 | +- Saves notes when the user is done editing a note, when a note option |
| 87 | + is changed, and when the user leaves the day where the notes are |
| 88 | + written. |
68 | 89 |
|
69 | 90 | - Saves courses whenever the user leaves the edit course view. |
70 | 91 |
|
|
84 | 105 |
|
85 | 106 | ## Communications / JSON / Saving / etc. |
86 | 107 |
|
87 | | -- Schedule JSON: contains all of the data (one year, one campus) that is not specific to any one particular user |
| 108 | +- Schedule JSON: contains all of the data (one year, one campus) that |
| 109 | + is not specific to any one particular user |
88 | 110 |
|
89 | 111 | - Format: |
90 | 112 |
|
|
101 | 123 | “specialDays”: {...} //maps dates to day objects |
102 | 124 | } |
103 | 125 |
|
104 | | -- Year JSON (badly named): contains course information and other general information specific to the user |
| 126 | +- Year JSON (badly named): contains course information and other |
| 127 | + general information specific to the user |
105 | 128 |
|
106 | 129 | - Format: |
107 | 130 |
|
|
117 | 140 |
|
118 | 141 | - Week numbers are as follows: |
119 | 142 |
|
120 | | - - The partial week between July 1 and the first Sunday after July 1 has week number 0. |
| 143 | + - The partial week between July 1 and the first Sunday after |
| 144 | + July 1 has week number 0. |
121 | 145 |
|
122 | | - - On and after the first Sunday after July 1, the week number is: (number of days since the first Sunday after July 1 / 7)+1. |
| 146 | + - On and after the first Sunday after July 1, the week number |
| 147 | + is: (number of days since the first Sunday after July 1 / |
| 148 | + 7)+1. |
123 | 149 |
|
124 | 150 | - Format: |
125 | 151 |
|
126 | 152 | <!-- --> |
127 | 153 |
|
128 | 154 | { |
129 | 155 | “number”: 1, |
130 | | - “notes”: {...} //maps "date.period" to arrays of notes |
| 156 | + “notes”: {...} //maps “<date>.<period>" to arrays of notes |
131 | 157 | } |
132 | 158 |
|
133 | 159 | - Date Format for JSON: `“M/D/YYYY”` e.g. `“9/16/2012”` |
134 | 160 |
|
135 | | -- Time Format for JSON: `“H:M”` e.g. `“8:0”` or `“14:30”` (use 24 hour time) |
| 161 | +- Time Format for JSON: `“H:M”` e.g. `“8:0”` or `“14:30”` (use 24 |
| 162 | + hour time) |
136 | 163 |
|
137 | 164 | - Course Format for JSON: |
138 | 165 |
|
|
145 | 172 | “meetings”: [1,1,1,1,0] |
146 | 173 | } |
147 | 174 |
|
148 | | -- Note Format for JSON: (IMPORTANT: period is NOT the same as “periodNum” in the Period JSON! periodNum can be any number, but period is the index of the period within the day [-1 for additional notes at the bottom of every day]) |
| 175 | +- Note Format for JSON: (IMPORTANT: period is NOT the same as |
| 176 | + “periodNum” in the Period JSON! “periodNum" can be any number, but |
| 177 | + “period" is the INDEX of the period within the day [-1 for |
| 178 | + additional notes at the bottom of every day]) |
149 | 179 |
|
150 | 180 | <!-- --> |
151 | 181 |
|
152 | 182 | { |
153 | | - “text”: “Hello, World!”, |
154 | | - “isChecked”: false, |
155 | | - “isImportant”: false, |
156 | | - “isToDo”: false |
| 183 | + "text": "Hello, World!", |
| 184 | + "isChecked": false, |
| 185 | + "isImportant": false, |
| 186 | + "isToDo": false |
157 | 187 | "period": 1 |
158 | 188 | } |
159 | 189 |
|
160 | | -- Normal Day (with break) Format for JSON (day number 0 for no day number): |
| 190 | +- Normal Day (with break) Format for JSON (day number 0 for no day |
| 191 | + number): |
161 | 192 |
|
162 | 193 | <!-- --> |
163 | 194 |
|
|
171 | 202 | "periodsBeforeBreak": 2, |
172 | 203 | "type": "normal", |
173 | 204 | "date": "9/12/2012", |
174 | | - "hasBreak": true |
| 205 | + "hasBreak": true, |
| 206 | + "breakIsFree": true, |
| 207 | + "caption": "A.P. English Exam today 8:00-10:30", |
| 208 | + "captionLink": "http://www.google.com/" |
175 | 209 | } |
176 | 210 |
|
177 | | -- Normal Day (without break) Format for JSON (day number 0 for no day number): |
| 211 | +- Normal Day (without break) Format for JSON (day number 0 for no day |
| 212 | + number): |
178 | 213 |
|
179 | 214 | <!-- --> |
180 | 215 |
|
|
184 | 219 | "numPeriods": 8, |
185 | 220 | "type": "normal", |
186 | 221 | "date": "9/12/2012", |
187 | | - "hasBreak": false |
| 222 | + "hasBreak": false, |
| 223 | + "caption": "A.P. English Exam today 8:00-10:30", |
| 224 | + "captionLink": "http://www.google.com/" |
188 | 225 | } |
189 | 226 |
|
190 | | -- Test Day (i.e. Custom Day) Format for JSON: |
| 227 | +- Test Day (aka Custom Day) Format for JSON (“tests” refers to an |
| 228 | + array of “period” objects): |
191 | 229 |
|
192 | 230 | <!-- --> |
193 | 231 |
|
194 | 232 | { |
195 | 233 | "date": "10/6/2012", |
196 | 234 | "tests": [...], |
197 | | - "type": "test" |
| 235 | + "type": "test", |
| 236 | + "caption": "A.P. English Exam today 8:00-10:30", |
| 237 | + "captionLink": "http://www.google.com/" |
198 | 238 | } |
199 | 239 |
|
200 | 240 | - Holiday Format for JSON: |
|
204 | 244 | { |
205 | 245 | "date": "10/22/2012", |
206 | 246 | "name": "Mid-Semester Break", |
207 | | - "type": "holiday" |
| 247 | + "type": "holiday", |
| 248 | + "caption": "A.P. English Exam today 8:00-10:30", |
| 249 | + "captionLink": "http://www.google.com/" |
208 | 250 | } |
209 | 251 |
|
210 | | -- Period format for JSON: (IMPORTANT: periodNum is NOT the same as “period” in the Note JSON! periodNum can be any number, but period is the index of the period within the day.) |
| 252 | +- Period format for JSON: (IMPORTANT: periodNum is NOT the same as |
| 253 | + “period” in the Note JSON! periodNum can be any number, but period |
| 254 | + is the index of the period within the day.) |
211 | 255 |
|
212 | 256 | <!-- --> |
213 | 257 |
|
|
216 | 260 | "startTime": "8:0", |
217 | 261 | "name": "Period Name", |
218 | 262 | "date": "11/3/2012", |
219 | | - "endTime": "14:30" |
| 263 | + "endTime": "14:30”, |
| 264 | + “isFreePeriod”: false, |
220 | 265 | } |
221 | 266 |
|
222 | 267 | - Constants: |
|
0 commit comments