icfs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/data/icfs.js ADDED
@@ -0,0 +1,458 @@
1
+ /*************************************************************************
2
+ #
3
+ # Investigative Case File System
4
+ #
5
+ # Copyright 2019 by Graham A. Field
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License version 3.
9
+ #
10
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
11
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ #
13
+ **************************************************************************/
14
+
15
+ ///////////////////////////////////////////////
16
+ // Enable or disable a hidden div
17
+ function enaDiv(idDiv, idInp) {
18
+ var div = document.getElementById(idDiv);
19
+ var ena = document.getElementById(idInp);
20
+ if( ena.getAttribute("value") == "true" ) {
21
+ div.classList.add("hidden");
22
+ ena.setAttribute("value", "false");
23
+ } else {
24
+ div.classList.remove("hidden");
25
+ ena.setAttribute("value", "true");
26
+ }
27
+ }
28
+
29
+
30
+ ///////////////////////////////////////////////
31
+ // Delete parent div
32
+ function delDiv(btn) {
33
+ var div = btn.parentNode;
34
+ div.parentNode.removeChild(div);
35
+ }
36
+
37
+
38
+ ///////////////////////////////////////////////
39
+ // Create a delete button
40
+ function btnDelDiv(btn_class, btn_text){
41
+ var btn = document.createElement("button");
42
+ btn.setAttribute("class", btn_class);
43
+ btn.setAttribute("type", "button");
44
+ btn.setAttribute("onclick", "delDiv(this)");
45
+ btn.appendChild(document.createTextNode(btn_text));
46
+ return btn;
47
+ }
48
+
49
+
50
+ ///////////////////////////////////////////////
51
+ // Add an input to a list
52
+ function addListInput(list_id, input_class, button){
53
+ var list = document.getElementById(list_id);
54
+
55
+ var cnt_inp = list.getElementsByTagName("input")[0];
56
+ var cnt = cnt_inp.getAttribute("value");
57
+ cnt = parseInt(cnt, 10) + 1
58
+ cnt_inp.setAttribute("value", cnt);
59
+
60
+ var base = cnt_inp.getAttribute("name");
61
+
62
+ var div = document.createElement("div");
63
+ list.appendChild(div);
64
+
65
+ var inp = document.createElement("input");
66
+ inp.setAttribute("type", "text");
67
+ inp.setAttribute("class", input_class);
68
+ inp.setAttribute("name", base + "-" + cnt);
69
+ div.appendChild(inp);
70
+
71
+ if( button ){
72
+ var btn = btnDelDiv(button, "X");
73
+ div.appendChild(btn);
74
+ }
75
+
76
+ inp.focus();
77
+ }
78
+
79
+
80
+ ///////////////////////////////////////////////
81
+ // Add a tag
82
+ function addTag(id) {
83
+ addListInput(id, "form-tag", "form-del");
84
+ }
85
+
86
+
87
+ ///////////////////////////////////////////////
88
+ // Add a stat to a case
89
+ function cseAddStat() {
90
+ addListInput("cse-stat-list", "form-stat", "form-del");
91
+ }
92
+
93
+
94
+
95
+ // Case
96
+
97
+ function cseAddAcc(){
98
+ var acnt = document.getElementById("cse-acc-cnt");
99
+ var acc_cnt = acnt.getAttribute("value");
100
+ acc_cnt = parseInt(acc_cnt, 10) + 1;
101
+ acnt.setAttribute("value", acc_cnt);
102
+
103
+ var alist = document.getElementById("cse-acc-list");
104
+
105
+ var row = document.createElement("div");
106
+ row.setAttribute("class", "list-row");
107
+ alist.appendChild(row);
108
+
109
+ var inp = document.createElement("input");
110
+ inp.setAttribute("type", "hidden");
111
+ inp.setAttribute("name", "cse-acc-" + acc_cnt);
112
+ inp.setAttribute("value", "1");
113
+ row.appendChild(inp);
114
+
115
+ inp = document.createElement("input");
116
+ inp.setAttribute("type", "text");
117
+ inp.setAttribute("class", "form-perm");
118
+ inp.setAttribute("name", "cse-acc-" + acc_cnt + "-perm");
119
+ row.appendChild(inp);
120
+ inp.focus();
121
+
122
+ var glst = document.createElement("div");
123
+ row.appendChild(glst);
124
+ row.appendChild(document.createTextNode(" "));
125
+
126
+ var gnt = document.createElement("div");
127
+ glst.appendChild(gnt);
128
+
129
+ inp = document.createElement("input");
130
+ inp.setAttribute("type", "text");
131
+ inp.setAttribute("class", "form-usergrp");
132
+ inp.setAttribute("name", "cse-acc-" + acc_cnt + "-1");
133
+ glst.appendChild(inp);
134
+
135
+ inp = document.createElement("button");
136
+ inp.setAttribute("type", "button");
137
+ inp.setAttribute("class", "add-grant");
138
+ inp.setAttribute("onclick", "cseAddGrant(this)");
139
+ inp.appendChild(document.createTextNode("+"));
140
+ row.appendChild(inp);
141
+ }
142
+
143
+ function cseAddGrant(b){
144
+ var row = b.parentNode;
145
+ var cnt = row.getElementsByTagName("input")[0];
146
+ var glst = row.getElementsByTagName("div")[0];
147
+ var name = cnt.getAttribute("name");
148
+
149
+ var gcnt = cnt.getAttribute("value");
150
+ gcnt = parseInt(gcnt, 10) + 1;
151
+ cnt.setAttribute("value", gcnt);
152
+
153
+ var div = document.createElement("div");
154
+ glst.appendChild(div);
155
+
156
+ var inp = document.createElement("input");
157
+ inp.setAttribute("type", "text");
158
+ inp.setAttribute("class", "form-usergrp");
159
+ inp.setAttribute("name", name + "-" + gcnt);
160
+ div.appendChild(inp);
161
+ inp.focus();
162
+ }
163
+
164
+
165
+ // Entry
166
+
167
+ function entAddIndex(){
168
+ var ht = new XMLHttpRequest();
169
+ ht.onreadystatechange = function() {
170
+ if( this.readyState == 4 && this.status == 200) {
171
+ var jr = JSON.parse(ht.responseText);
172
+ if( jr.index != null ){
173
+ entAddIndexRaw(jr.index, jr.title);
174
+ }
175
+ }
176
+ };
177
+
178
+ var scr = document.getElementById("ent-idx-script");
179
+ scr = scr.getAttribute("value");
180
+
181
+ var cid = document.getElementById("ent-idx-caseid");
182
+ cid = cid.getAttribute("value");
183
+
184
+ var tit = document.getElementById("ent-idx-lu");
185
+ tit = encodeURIComponent(tit.value);
186
+ var url = scr + "/index_lookup?title=" + tit + "&caseid=" + cid;
187
+
188
+ ht.open("GET", url, true);
189
+ ht.send();
190
+ }
191
+
192
+ function entAddIndexRaw(num, title){
193
+ var icnt = document.getElementById("ent-idx-cnt");
194
+ var idx_cnt = icnt.getAttribute("value");
195
+ idx_cnt = parseInt(idx_cnt, 10) + 1;
196
+ icnt.setAttribute("value", idx_cnt);
197
+
198
+ var lst = document.getElementById("ent-idx-list");
199
+
200
+ var div = document.createElement("div");
201
+ lst.appendChild(div);
202
+
203
+ var inp = document.createElement("input");
204
+ inp.setAttribute("type", "hidden");
205
+ inp.setAttribute("name", "ent-idx-" + idx_cnt);
206
+ inp.setAttribute("value", num);
207
+ div.appendChild(inp);
208
+
209
+ div.appendChild(document.createTextNode(title));
210
+
211
+ var btn = btnDelDiv("form-del", "X");
212
+ div.appendChild(btn);
213
+ }
214
+
215
+
216
+ function entAddStat(){
217
+ var scnt = document.getElementById("ent-stats-cnt");
218
+ var stat_cnt = scnt.getAttribute("value");
219
+ stat_cnt = parseInt(stat_cnt, 10) + 1;
220
+ scnt.setAttribute("value", stat_cnt);
221
+
222
+ var sel = document.getElementById("ent-stat-sel");
223
+ var stat = sel.value;
224
+
225
+ var slist = document.getElementById("ent-stats-list");
226
+
227
+ var row = document.createElement("div");
228
+ row.setAttribute("class", "list-row");
229
+ slist.appendChild(row);
230
+
231
+ var inp = document.createElement("input");
232
+ inp.setAttribute("type", "hidden");
233
+ inp.setAttribute("name", "ent-stat-" + stat_cnt);
234
+ inp.setAttribute("value", "1");
235
+ row.appendChild(inp);
236
+
237
+ inp = document.createElement("input");
238
+ inp.setAttribute("type", "hidden");
239
+ inp.setAttribute("name", "ent-stat-" + stat_cnt + "-name");
240
+ inp.setAttribute("value", stat);
241
+ row.appendChild(inp);
242
+
243
+ var div = document.createElement("div");
244
+ div.setAttribute("class", "list-stat");
245
+ div.appendChild(document.createTextNode(stat));
246
+ row.appendChild(div);
247
+
248
+ inp = document.createElement("input");
249
+ inp.setAttribute("type", "text");
250
+ inp.setAttribute("class", "form-float");
251
+ inp.setAttribute("name", "ent-stat-" + stat_cnt + "-value");
252
+ row.appendChild(inp);
253
+ row.appendChild(document.createTextNode(" "));
254
+ inp.focus();
255
+
256
+ clst = document.createElement("div");
257
+ clst.setAttribute("class", "list-vert");
258
+ row.appendChild(clst);
259
+ row.appendChild(document.createTextNode(" "));
260
+
261
+ div = document.createElement("div");
262
+ clst.appendChild(div);
263
+
264
+ inp = document.createElement("input");
265
+ inp.setAttribute("type", "text");
266
+ inp.setAttribute("class", "form-usergrp");
267
+ inp.setAttribute("name", "ent-stat-" + stat_cnt + "-1");
268
+ clst.appendChild(inp);
269
+
270
+ inp = document.createElement("button");
271
+ inp.setAttribute("type", "button");
272
+ inp.setAttribute("class", "add-claim");
273
+ inp.setAttribute("onClick", "entAddClaim(this)");
274
+ inp.appendChild(document.createTextNode("+"));
275
+ row.appendChild(inp);
276
+ }
277
+
278
+
279
+ function entAddClaim(b){
280
+ var row = b.parentNode;
281
+ var cnt = row.getElementsByTagName("input")[0];
282
+ var clst = row.getElementsByTagName("div")[1];
283
+ var name = cnt.getAttribute("name");
284
+
285
+ var ccnt = cnt.getAttribute("value");
286
+ ccnt = parseInt(ccnt, 10) + 1;
287
+ cnt.setAttribute("value", ccnt);
288
+
289
+ var div = document.createElement("div");
290
+ clst.appendChild(div);
291
+
292
+ var inp = document.createElement("input");
293
+ inp.setAttribute("type", "text");
294
+ inp.setAttribute("class", "form-usergrp");
295
+ inp.setAttribute("name", name + "_" + ccnt);
296
+ div.appendChild(inp);
297
+ inp.focus();
298
+ }
299
+
300
+
301
+ function entAddPerm(){
302
+ var pcnt = document.getElementById("ent-perm-cnt");
303
+ var perm_cnt = pcnt.getAttribute("value");
304
+ perm_cnt = parseInt(perm_cnt, 10);
305
+ perm_cnt = perm_cnt + 1;
306
+ pcnt.setAttribute("value", perm_cnt);
307
+
308
+ var sel = document.getElementById("ent-perm-sel");
309
+ var perm = sel.value;
310
+
311
+ var div = document.createElement("div");
312
+
313
+ var txt = document.createTextNode(perm);
314
+ div.appendChild(txt);
315
+
316
+ var inp = document.createElement("input");
317
+ inp.setAttribute("type", "hidden");
318
+ inp.setAttribute("name", "ent-perm-" + perm_cnt);
319
+ inp.setAttribute("value", perm);
320
+ div.appendChild(inp);
321
+
322
+ var btn = btnDelDiv("form-del", "X");
323
+ document.createElement("button");
324
+ div.appendChild(btn);
325
+
326
+ var lst = document.getElementById("ent-perm-list");
327
+ lst.appendChild(div);
328
+ }
329
+
330
+
331
+ function entAddFile(){
332
+ var fcnt = document.getElementById("ent-file-cnt");
333
+ var file_cnt = fcnt.getAttribute("value");
334
+ file_cnt = parseInt(file_cnt, 10);
335
+ file_cnt = file_cnt + 1;
336
+
337
+ var div = document.createElement("div");
338
+
339
+ var inp = document.createElement("input");
340
+ inp.setAttribute("type", "text");
341
+ inp.setAttribute("name", "ent-file-" + file_cnt + "-name");
342
+ inp.setAttribute("class", "form-file-name");
343
+ div.appendChild(inp);
344
+
345
+ inp = document.createElement("input");
346
+ inp.setAttribute("type", "file");
347
+ inp.setAttribute("name", "ent-file-" + file_cnt + "-file");
348
+ inp.setAttribute("class", "form-file-upl");
349
+ div.appendChild(inp);
350
+
351
+ inp = btnDelDiv("form-del", "X");
352
+ div.appendChild(inp);
353
+
354
+ var lst = document.getElementById("ent-file-list");
355
+ lst.appendChild(div);
356
+
357
+ fcnt.setAttribute("value", file_cnt);
358
+ }
359
+
360
+
361
+ // Action
362
+
363
+ function actEnable(){
364
+ var but = document.getElementById("act-task-add");
365
+ var ena = document.getElementById("act-ena");
366
+ var tsk = document.getElementById("act-tasks");
367
+
368
+ var enabled = ena.getAttribute("value");
369
+ if( enabled == "true" ){
370
+ ena.setAttribute("value", "false");
371
+ tsk.setAttribute("class", "sect-right hidden");
372
+ but.setAttribute("class", "sect-right invisible");
373
+ } else {
374
+ ena.setAttribute("value", "true");
375
+ tsk.setAttribute("class", "sect-right");
376
+ but.setAttribute("class", "sect-right");
377
+ }
378
+ }
379
+
380
+ function actRow(label, tsk){
381
+ var row = document.createElement("div");
382
+ row.setAttribute("class", "form-row");
383
+ var div = document.createElement("div");
384
+ div.setAttribute("class", "list-label");
385
+ div.appendChild(document.createTextNode(label));
386
+ row.appendChild(div);
387
+ tsk.appendChild(row);
388
+ return row;
389
+ }
390
+
391
+ function actText(name, cl, row){
392
+ var inp = document.createElement("input");
393
+ inp.setAttribute("type", "text");
394
+ inp.setAttribute("name", name);
395
+ inp.setAttribute("class", cl);
396
+ row.appendChild(inp);
397
+ return inp;
398
+ }
399
+
400
+ function actCheck(name, cl, row){
401
+ inp = document.createElement("input");
402
+ inp.setAttribute("type", "checkbox");
403
+ inp.setAttribute("name", name);
404
+ inp.setAttribute("class", cl);
405
+ inp.setAttribute("value", "true");
406
+ inp.setAttribute("checked", "");
407
+ row.appendChild(inp);
408
+ return inp;
409
+ }
410
+
411
+ function actAddTask(){
412
+ var tasks = document.getElementById("act-tasks");
413
+ var acnt = document.getElementById("act-cnt");
414
+
415
+ var tnum = acnt.getAttribute("value");
416
+ tnum = parseInt(tnum, 10) + 1;
417
+ acnt.setAttribute("value", tnum);
418
+
419
+ var tsk = document.createElement("div");
420
+ tsk.setAttribute("class", "task");
421
+ tasks.appendChild(tsk);
422
+
423
+ var row = actRow("Tasked:", tsk);
424
+ var inp_tsk = actText("act-" + tnum + "-task", "usergrp", row);
425
+
426
+ row = actRow("Title:", tsk);
427
+ actText("act-" + tnum + "-title", "form-title", row);
428
+
429
+ row = actRow("Open:", tsk);
430
+ actCheck("act-" + tnum + "-status", "form-check", row);
431
+
432
+ row = actRow("Flag:", tsk);
433
+ actCheck("act-" + tnum + "-flag", "form-check", row);
434
+
435
+ row = actRow("Time:", tsk);
436
+ actText("act-" + tnum + "-time", "form-time", row);
437
+
438
+ row = actRow("Tags:", tsk);
439
+ var tags = document.createElement("div");
440
+ tags.setAttribute("class", "tags-list");
441
+ tags.setAttribute("id", "act-" + tnum + "-tag-list");
442
+ row.appendChild(tags);
443
+ var inp = document.createElement("input");
444
+ inp.setAttribute("type", "hidden");
445
+ inp.setAttribute("name", "act-" + tnum + "-tag");
446
+ inp.setAttribute("value", "0");
447
+ tags.appendChild(inp);
448
+ addTag("act-" + tnum + "-tag-list")
449
+ var btn = document.createElement("button");
450
+ btn.setAttribute("type", "button");
451
+ btn.setAttribute("class", "tag-add");
452
+ btn.setAttribute("onclick", "addTag(\"act-" + tnum +
453
+ "-tag-list\")");
454
+ btn.appendChild(document.createTextNode("+"));
455
+ row.appendChild(btn);
456
+
457
+ inp_tsk.focus();
458
+ }