diff options
| -rw-r--r-- | data_store/tags.csv | 102 | ||||
| -rw-r--r-- | db.json | 309 | ||||
| -rw-r--r-- | index.js | 28 | ||||
| -rw-r--r-- | load_spreadsheet.js | 4 | ||||
| -rw-r--r-- | public/assets/css/css.css | 13 | ||||
| -rw-r--r-- | public/assets/img/clock/clock.jpg | bin | 0 -> 692731 bytes | |||
| -rw-r--r-- | public/assets/img/clock/clock.png | bin | 0 -> 754166 bytes | |||
| -rw-r--r-- | public/assets/img/clock/hour.png | bin | 0 -> 39419 bytes | |||
| -rw-r--r-- | public/assets/img/clock/minute.png | bin | 0 -> 47487 bytes | |||
| -rw-r--r-- | public/assets/img/clock/second.png | bin | 0 -> 36025 bytes | |||
| -rw-r--r-- | src/graph.js | 18 | ||||
| -rw-r--r-- | src/views/Clock.js | 108 | ||||
| -rw-r--r-- | src/views/Clocks.js | 15 | ||||
| -rw-r--r-- | src/views/Detail.js | 5 | ||||
| -rw-r--r-- | src/views/Legend.js | 17 |
15 files changed, 395 insertions, 224 deletions
diff --git a/data_store/tags.csv b/data_store/tags.csv index d6a3716..a4738d7 100644 --- a/data_store/tags.csv +++ b/data_store/tags.csv @@ -1,51 +1,51 @@ -Title,Index,IDK,No6092,1620s,painting,blunt,National Gallery of Canada,AGO,courtauld,intervensions,connsoeurship,double agent,forensics,black box,Stankievech
-01 Poussin: No6092,1,x,x,x,x,x,x,,,,x,,x,x,
-02 No6092: Xray,2,x,x,,,,x,,,,,,x,,
-03 Blunt: Apollo,3,,x,,,x,,,,,,,,,
-04 Blunt: McCurry's Visit ,4,,x,,,x,x,,,,,,,,
-05 Blunt: Telegram ,5,,x,,,x,x,,,,,,,,
-06 NGC: Record ,6,,x,,,,x,,,,,,x,,
-07 NGC: Receiving ,7,,x,,,,x,,,,,,,,
-08 Mahon to Hubbard,8,,x,,,,x,,,,,,,,
-09 Hubbard to Mahon ,9,,x,,,,x,,,,,,,,
-10 No6092: Label ,10,,x,,,,x,,,,,,x,,
-11 Mahon to Hubbard,11,,x,,,,x,,,,,,,,
-12 Laskin: Note,12,,x,,,,x,,,,,,,,
-13 Laskin to Oberhuber ,13,,x,,,,x,,,,,,,,
-14 Laskin to Gerdts ,14,,x,,,,x,,,,,,,,
-15 Miles to d'Argencourt ,15,,x,,,,x,,,,,,,,
-16 Lavin to Laskin ,16,,x,,,,x,,,,,,,,
-17 Laskin to Lavin ,17,,x,,,,x,,,,,,,,
-18 NGC: Italian Memo,18,,x,,,,x,,,,,,,,
-19 Laskin to Oberhuber ,19,,x,,,,x,,,,,,,,
-20 Rees: Xrays,20,,x,,,,,,x,,,,x,,
-21 Poussin: Xray,21,,,,x,,x,,,,,,x,,
-22 Courbet: Painting,22,,,,x,x,,x,,,,,,,
-23 Moore: Painting I,23,,,,x,x,,x,x,,,,,,
-24 Moore: Painting II,24,,,,x,x,,x,x,,,,,,
-25 Chu: Courbet Signature,25,,,,,,,x,,,,,x,,
-26 Fernier: Courbet Signatures,26,,,,,,,x,,,,,x,,
-27 Courbet: Signature,27,,,,,,,x,,,,,x,,
-28 AGO: Blunt Lecture ,28,,,,,x,,x,,,,,,,
-29 Blunt: AGO Opening,29,,,,,x,,x,,,,,,,
-30 Stankievech: An Apology ,30,,,,,x,,,,x,,,,,x
-31 Stankievech: Courtauld Cocktail ,31,,,,,,,,x,x,,x,,,x
-32 Burgess to Blunt,32,,,,,x,,,,,,x,,,
-33 Stankievech: Secret Agent ,33,,,,,,,,,x,,x,,,x
-34 Blunt: Warburg Journal,34,,,,,x,,,x,,,x,,,
-35 Lewis: Secret Agents ,35,,,,,x,,,x,,x,x,,,
-36 Blunt: BBC ,36,,,,,x,,,,,x,x,,x,
-37 Ruiz: L'Hypothèse du tableau volé ,37,,,,x,,,,,,x,x,,,
-38 Benjamin: Mondrian,38,,,,x,,,,,,x,x,,,
-39 Broodthaers: Atlas,39,,,,,,,,,,x,x,,,
-40 Warburg: Mnemosyne Atlas ,40,,,,,,,,x,,x,x,x,,
-41 Mancini: Pittura,41,,,x,x,,,,,,x,x,x,,
-42 Stankievech: Mancini / Warburg,42,,,x,,,,,,x,x,,x,,x
-43 Ruebens to Nicolas-Claude ,43,,,x,x,,,,,,,x,,,
-44 Poe: Purloined Letter,44,,,,,,,,,,,x,x,x,
-45 Lacan: Purloined Letter,45,,x,,,x,,,,,,x,x,x,
-46 MI6: Zinoviev Letter,46,,,,,,,,,,,x,,x,
-47 UN: Vienna Convention,47,,,x,,x,,,,,,,,x,
-48 Wittgenstein Key,48,,,,,,,,,,,x,,x,
-49 Stankievech: Purloined Letter,49,,x,,,,,,,x,,,,x,x
-50 Arendt: Freeport ,50,,,,,,,,,,,,,x,
+,,1620s,painting,blunt,National Gallery of Canada,Art Gallery of Ontario,Courtauld Institute,Stankievech,connsoeurship,double agent,forensics ,black box,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+01 Poussin: No6092,1,x,x,x,x,,,,x,,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+02 No6092: Xray,2,,,,x,,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+03 Blunt: Apollo,3,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+04 Blunt: McCurry's Visit ,4,,,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+05 Blunt: Telegram ,5,,,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+06 NGC: Record ,6,,,,x,,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+07 NGC: Receiving ,7,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+08 Mahon to Hubbard,8,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+09 Hubbard to Mahon ,9,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+10 No6092: Label ,10,,,,x,,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+11 Mahon to Hubbard,11,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+12 Laskin: Note,12,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+13 Laskin to Oberhuber ,13,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+14 Laskin to Gerdts ,14,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+15 Miles to d'Argencourt ,15,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+16 Lavin to Laskin ,16,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+17 Laskin to Lavin ,17,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+18 NGC: Italian Memo,18,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+19 Laskin to Oberhuber ,19,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+20 Rees: Xrays,20,,,,,,x,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+21 Poussin: Xray,21,,x,,x,,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+22 Courbet: Painting,22,,x,x,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+23 Moore: Painting I,23,,x,x,,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+24 Moore: Painting II,24,,x,x,,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+25 Chu: Courbet Signature,25,,,,,x,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+26 Fernier: Courbet Signatures,26,,,,,x,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+27 Courbet: Signature,27,,,,,x,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+28 AGO: Blunt Lecture ,28,,,x,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+29 Blunt: AGO Opening,29,,,x,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+30 Stankievech: An Apology ,30,,,x,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+31 Stankievech: Courtauld Cocktail ,31,,,,,,x,x,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+32 Burgess to Blunt,32,,,x,,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+33 Stankievech: Secret Agent ,33,,,,,,,x,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+34 Blunt: Warburg Journal,34,,,x,,,x,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+35 Lewis: Secret Agents ,35,,,x,,,x,,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+36 Blunt: BBC ,36,,,x,,,,,x,x,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+37 Ruiz: L'Hypothèse du tableau volé ,37,,x,,,,,,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+38 Benjamin: Mondrian,38,,x,,,,,,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+39 Broodthaers: Atlas,39,,,,,,,,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+40 Warburg: Mnemosyne Atlas ,40,,,,,,x,,x,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+41 Mancini: Pittura,41,x,x,,,,,,x,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+42 Stankievech: Mancini / Warburg,42,x,,,,,,x,x,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+43 Ruebens to Nicolas-Claude ,43,x,x,,,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+44 Poe: Purloined Letter,44,,,,,,,,,x,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+45 Lacan: Purloined Letter,45,,,x,,x,,,,x,x,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+46 MI6: Zinoviev Letter,46,,,,,,,,,x,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+47 UN: Vienna Convention,47,x,,x,,,,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+48 Wittgenstein Key,48,,,,,,,,,x,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+49 Stankievech: Purloined Letter,49,,,,,,,x,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+50 Arendt: Freeport ,50,,,,,,,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@@ -9,10 +9,10 @@ "tag_1": 2, "tag_2": 3, "tag_3": 4, - "tag_4": 5, - "tag_5": 9, - "tag_6": 11, - "tag_7": 12, + "tag_4": 8, + "tag_5": 11, + "tag_6": 0, + "tag_7": 0, "tag_8": 0, "images": [ { @@ -39,9 +39,9 @@ "id": "page_1", "title": "<i>Augustus and Cleopatra </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, - "tag_2": 11, + "tag_0": 4, + "tag_1": 0, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -73,8 +73,8 @@ "id": "page_2", "title": "A Newly Discovered Poussin", "type": "image", - "tag_0": 1, - "tag_1": 4, + "tag_0": 3, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -135,9 +135,9 @@ "id": "page_3", "title": "<i>Note on Mr. McCurry's Visit</i>", "type": "image", - "tag_0": 1, + "tag_0": 3, "tag_1": 4, - "tag_2": 5, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -169,9 +169,9 @@ "id": "page_4", "title": "<i>Telegram: Send Express Poussin </i>", "type": "image", - "tag_0": 1, + "tag_0": 3, "tag_1": 4, - "tag_2": 5, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -203,9 +203,9 @@ "id": "page_5", "title": "<i>Record of Work Done on Pictures </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, - "tag_2": 11, + "tag_0": 4, + "tag_1": 0, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -237,8 +237,8 @@ "id": "page_6", "title": "<i>Receiving and Shipping Picture</i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -278,8 +278,8 @@ "id": "page_7", "title": "<i>Letter to Robert H. Hubbard Requesting Photo of Label </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -312,8 +312,8 @@ "id": "page_8", "title": "<i>Letter to Denis Mahon with Polaroid Photo of Label </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -353,9 +353,9 @@ "id": "page_9", "title": "<i>Close Up of no6092 Label </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, - "tag_2": 11, + "tag_0": 4, + "tag_1": 0, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -394,8 +394,8 @@ "id": "page_10", "title": "<i>Letter to Robert H. Hubbbard </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -435,8 +435,8 @@ "id": "page_11", "title": "<i>Note on Two Paintings </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -469,8 +469,8 @@ "id": "page_12", "title": "<i>Letter to Konrad Oberhuber </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -503,8 +503,8 @@ "id": "page_13", "title": "<i>Letter to William H. Gerdts</i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -537,8 +537,8 @@ "id": "page_14", "title": "<i>Letter to Louise d'Argencourt </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -578,8 +578,8 @@ "id": "page_15", "title": "<i>Letter to Myron Laskin, Jr. </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -612,8 +612,8 @@ "id": "page_16", "title": "<i>Letter to Marilyn Lavin </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -646,8 +646,8 @@ "id": "page_17", "title": "<i>Memo: Italian School 17th Century, no6092 </i>", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -680,8 +680,8 @@ "id": "page_18", "title": "Correspondence with Konrad Oberhuber ", "type": "image", - "tag_0": 1, - "tag_1": 5, + "tag_0": 4, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -728,9 +728,9 @@ "id": "page_19", "title": "Notes on Radiographs of Five Paintings by Poussin", "type": "image", - "tag_0": 1, - "tag_1": 7, - "tag_2": 11, + "tag_0": 6, + "tag_1": 0, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -781,11 +781,10 @@ { "__index": 20, "id": "page_20", - "title": "21 Poussin: Xray", "type": "image", - "tag_0": 3, - "tag_1": 5, - "tag_2": 11, + "tag_0": 2, + "tag_1": 4, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -798,9 +797,9 @@ "id": "page_21", "title": "<i>Woman Painted at Palavas </i>", "type": "image", - "tag_0": 3, - "tag_1": 4, - "tag_2": 6, + "tag_0": 2, + "tag_1": 3, + "tag_2": 5, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -830,12 +829,11 @@ { "__index": 22, "id": "page_22", - "title": "23 Moore: Painting I", "type": "image", - "tag_0": 3, - "tag_1": 4, - "tag_2": 6, - "tag_3": 7, + "tag_0": 2, + "tag_1": 3, + "tag_2": 5, + "tag_3": 6, "tag_4": 0, "tag_5": 0, "tag_6": 0, @@ -845,12 +843,11 @@ { "__index": 23, "id": "page_23", - "title": "24 Moore: Painting II", "type": "image", - "tag_0": 3, - "tag_1": 4, - "tag_2": 6, - "tag_3": 7, + "tag_0": 2, + "tag_1": 3, + "tag_2": 5, + "tag_3": 6, "tag_4": 0, "tag_5": 0, "tag_6": 0, @@ -862,8 +859,8 @@ "id": "page_24", "title": "<i>Email RE: Toronto Courbet question (4.5.2015) </i>", "type": "image", - "tag_0": 6, - "tag_1": 11, + "tag_0": 5, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -896,8 +893,8 @@ "id": "page_25", "title": "<i>Courbet Signatures</i>", "type": "image", - "tag_0": 6, - "tag_1": 11, + "tag_0": 5, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -930,8 +927,8 @@ "id": "page_26", "title": "<i>Woman Painted at Palavas (detail) </i>", "type": "image", - "tag_0": 6, - "tag_1": 11, + "tag_0": 5, + "tag_1": 0, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -964,8 +961,8 @@ "id": "page_27", "title": "Invitation to Blunt Lecture (16.12.1965)", "type": "image", - "tag_0": 4, - "tag_1": 6, + "tag_0": 3, + "tag_1": 5, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -998,8 +995,8 @@ "id": "page_28", "title": "Letter from Sir Anthony Blunt to William J. Withrow re: Stage I opening ceremonies (8.4.1974) ", "type": "image", - "tag_0": 4, - "tag_1": 6, + "tag_0": 3, + "tag_1": 5, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -1032,9 +1029,9 @@ "id": "page_29", "title": "<i>An Apology for Poussin’s Augustus and Cleopatra: Sir Anthony Blunt’s Farewell Lecture at the Courtauld Institute of Art, 8 April 1974</i>", "type": "video", - "tag_0": 4, - "tag_1": 8, - "tag_2": 13, + "tag_0": 3, + "tag_1": 7, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -1053,7 +1050,7 @@ "author": "CHARLES STANKIEVECH", "threeObject": { "path": "data_store/30-Apology/", - "file": "textured_output.obj" + "file": "Projector.obj" } }, { @@ -1061,10 +1058,10 @@ "id": "page_30", "title": "<i>Courtauld Cocktail </i>", "type": "video", - "tag_0": 7, - "tag_1": 8, - "tag_2": 10, - "tag_3": 13, + "tag_0": 6, + "tag_1": 7, + "tag_2": 9, + "tag_3": 0, "tag_4": 0, "tag_5": 0, "tag_6": 0, @@ -1079,15 +1076,19 @@ ], "citation": "2016 <br>\nMixed Media <br>\n5 x 5 x 30cm <br>\nCourtesy the Artist <br>\n", "description": "<p>\nIn 1937 at the Courtauld Institute of Art, Stephen Rees Jones discovered that chemicals in the laboratory were being stolen to create improvised explosives to throw at fascist marches. The term ‘Molotov Cocktail’ comes from the Finnish resistance a few years later but, stemming from their use in the Spanish Civil War earlier in the decade, the British Home Guard disseminated information on how to make such guerilla weapons in case of an invasion in the impending war. One strategy utilized film strips as the fuse because, at the time, the nitrate base of film stock made it highly flammable. \n</p>\n\n", - "author": "CHARLES STANKIEVECH " + "author": "CHARLES STANKIEVECH ", + "threeObject": { + "path": "data_store/31-Cocktail/", + "file": "Charles_MoltovLowres.obj" + } }, { "__index": 31, "id": "page_31", "title": "<i>Letter to Anthony Blunt about BBC Broadcast (22.7.1938) </i>", "type": "image", - "tag_0": 4, - "tag_1": 10, + "tag_0": 3, + "tag_1": 9, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -1118,26 +1119,30 @@ { "__index": 32, "id": "page_32", - "title": "33 Stankievech: Secret Agent ", - "type": "image", - "tag_0": 8, - "tag_1": 10, - "tag_2": 13, + "type": "video", + "tag_0": 7, + "tag_1": 9, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, "tag_6": 0, "tag_7": 0, - "tag_8": 0 + "tag_8": 0, + "images": [], + "threeObject": { + "path": "data_store/33-Agent/", + "file": "Charles_Clock.obj" + } }, { "__index": 33, "id": "page_33", "title": "<i>The Criminal-King in the 19th Century Novel</i>", "type": "image", - "tag_0": 4, - "tag_1": 7, - "tag_2": 10, + "tag_0": 3, + "tag_1": 6, + "tag_2": 9, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -1183,10 +1188,10 @@ "id": "page_34", "title": "<i>Connoisseurs and Secret Agents</i> ", "type": "image", - "tag_0": 4, - "tag_1": 7, - "tag_2": 9, - "tag_3": 10, + "tag_0": 3, + "tag_1": 6, + "tag_2": 8, + "tag_3": 9, "tag_4": 0, "tag_5": 0, "tag_6": 0, @@ -1231,10 +1236,10 @@ "id": "page_35", "title": "BBC Panorama: The Queen's Gallery ", "type": "video", - "tag_0": 4, - "tag_1": 9, - "tag_2": 10, - "tag_3": 12, + "tag_0": 3, + "tag_1": 8, + "tag_2": 9, + "tag_3": 11, "tag_4": 0, "tag_5": 0, "tag_6": 0, @@ -1262,9 +1267,9 @@ "id": "page_36", "title": "<i>L'Hypothèse du tableau volé </i>", "type": "video", - "tag_0": 3, - "tag_1": 9, - "tag_2": 10, + "tag_0": 2, + "tag_1": 8, + "tag_2": 9, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -1293,9 +1298,9 @@ "id": "page_37", "title": "Mondrian 63-96 ", "type": "video", - "tag_0": 3, - "tag_1": 9, - "tag_2": 10, + "tag_0": 2, + "tag_1": 8, + "tag_2": 9, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -1324,8 +1329,8 @@ "id": "page_38", "title": "<i>The conquest of space, Atlas for the use of artists and the military </i>", "type": "video", - "tag_0": 9, - "tag_1": 10, + "tag_0": 8, + "tag_1": 9, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -1342,17 +1347,21 @@ ], "citation": "1975 <br>\nArtist Book <br>\n4.2 x 2.9 x 1 cm <br>\nPrivate Collection <br>\n", "description": "<p>\nMarcel Broodthaers was perhaps the first artist to colonize the role of the curator as an artwork, in his project <i>Museum of Eagles</i>. While maintaining his obsessions with surrealism, his work, over time, took on a role more critical of the history of European colonialism. The last artist book he made was the ridiculously small<i> The conquest of space, Atlas for the use of artists and the military</i>. \n</p>\n\n", - "author": "MARCEL BROODTHAERS " + "author": "MARCEL BROODTHAERS ", + "threeObject": { + "path": "data_store/39-Broodthaers/", + "file": "Charles_AtlasBook.obj" + } }, { "__index": 39, "id": "page_39", "title": "<i>Der Bildatlas Mnemosyne (Taflen No79)</i>", "type": "image", - "tag_0": 7, - "tag_1": 9, - "tag_2": 10, - "tag_3": 11, + "tag_0": 6, + "tag_1": 8, + "tag_2": 9, + "tag_3": 0, "tag_4": 0, "tag_5": 0, "tag_6": 0, @@ -1383,11 +1392,11 @@ "id": "page_40", "title": "Considerazioni sulla pittura ", "type": "image", - "tag_0": 2, - "tag_1": 3, - "tag_2": 9, - "tag_3": 10, - "tag_4": 11, + "tag_0": 1, + "tag_1": 2, + "tag_2": 8, + "tag_3": 9, + "tag_4": 0, "tag_5": 0, "tag_6": 0, "tag_7": 0, @@ -1417,11 +1426,11 @@ "id": "page_41", "title": "<i>Mancini's Caratteri / Warburg's Atlas</i>", "type": "image", - "tag_0": 2, - "tag_1": 8, - "tag_2": 9, - "tag_3": 11, - "tag_4": 13, + "tag_0": 1, + "tag_1": 7, + "tag_2": 8, + "tag_3": 0, + "tag_4": 0, "tag_5": 0, "tag_6": 0, "tag_7": 0, @@ -1451,9 +1460,9 @@ "id": "page_42", "title": "Letter to Nicolas-Claude Fabri De Peiresc", "type": "image", - "tag_0": 2, - "tag_1": 3, - "tag_2": 10, + "tag_0": 1, + "tag_1": 2, + "tag_2": 9, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -1492,9 +1501,9 @@ "id": "page_43", "title": "<i>The Purloined Letter</i>", "type": "image", - "tag_0": 10, + "tag_0": 9, "tag_1": 11, - "tag_2": 12, + "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -1687,11 +1696,11 @@ "id": "page_44", "title": "<i>Seminar on The Purloined Letter </i>", "type": "image", - "tag_0": 1, - "tag_1": 4, - "tag_2": 10, + "tag_0": 3, + "tag_1": 5, + "tag_2": 9, "tag_3": 11, - "tag_4": 12, + "tag_4": 0, "tag_5": 0, "tag_6": 0, "tag_7": 0, @@ -1756,8 +1765,8 @@ "id": "page_45", "title": "<i>Zinoviev Letter </i>", "type": "image", - "tag_0": 10, - "tag_1": 12, + "tag_0": 9, + "tag_1": 11, "tag_2": 0, "tag_3": 0, "tag_4": 0, @@ -1804,9 +1813,9 @@ "id": "page_46", "title": "<i>Vienna Convention On Diplomatic Relations</i>", "type": "image", - "tag_0": 2, - "tag_1": 4, - "tag_2": 12, + "tag_0": 1, + "tag_1": 3, + "tag_2": 11, "tag_3": 0, "tag_4": 0, "tag_5": 0, @@ -1851,27 +1860,31 @@ { "__index": 47, "id": "page_47", - "title": "48 Wittgenstein Key", - "type": "image", - "tag_0": 10, - "tag_1": 12, + "type": "video", + "tag_0": 9, + "tag_1": 11, "tag_2": 0, "tag_3": 0, "tag_4": 0, "tag_5": 0, "tag_6": 0, "tag_7": 0, - "tag_8": 0 + "tag_8": 0, + "images": [], + "threeObject": { + "path": "data_store/48-Wittgenstein/", + "file": "Charles_Key.obj" + } }, { "__index": 48, "id": "page_48", "title": "<i>no6092: The Purloined Letter </i>", "type": "video", - "tag_0": 1, - "tag_1": 8, - "tag_2": 12, - "tag_3": 13, + "tag_0": 7, + "tag_1": 11, + "tag_2": 0, + "tag_3": 0, "tag_4": 0, "tag_5": 0, "tag_6": 0, @@ -1899,7 +1912,7 @@ "id": "page_49", "title": "<b>The Luxembourg Freeport: The Instruction Manual </b>", "type": "image", - "tag_0": 12, + "tag_0": 11, "tag_1": 0, "tag_2": 0, "tag_3": 0, @@ -8,21 +8,19 @@ const __dirname = path.resolve(); var isProduction = process.env.OK_PRODUCTION === "true"; // Charles' types from the spreadsheet -var tagTypes = [ +var categories = [ "(none)", - "No6092", "1620s", "painting", "blunt", "National Gallery of Canada", - "AGO", - "courtauld", - "intervensions", + "Art Gallery of Ontario", + "Courtauld Institute", + "Stankievech", "connsoeurship", "double agent", "forensics", "black box", - "Stankievech", ].map((type, index) => [index, type]); var app = okcms @@ -48,15 +46,15 @@ var app = okcms description: { type: "text" }, thumbnail: { type: "image" }, images: { type: "gallery" }, - tag_0: { type: "enum", options: tagTypes, alias: "Tag #1" }, - tag_1: { type: "enum", options: tagTypes, alias: "Tag #2" }, - tag_2: { type: "enum", options: tagTypes, alias: "Tag #3" }, - tag_3: { type: "enum", options: tagTypes, alias: "Tag #4" }, - tag_4: { type: "enum", options: tagTypes, alias: "Tag #5" }, - tag_5: { type: "enum", options: tagTypes, alias: "Tag #6" }, - tag_6: { type: "enum", options: tagTypes, alias: "Tag #7" }, - tag_7: { type: "enum", options: tagTypes, alias: "Tag #8" }, - tag_8: { type: "enum", options: tagTypes, alias: "Tag #9" }, + tag_0: { type: "enum", options: categories, alias: "Tag #1" }, + tag_1: { type: "enum", options: categories, alias: "Tag #2" }, + tag_2: { type: "enum", options: categories, alias: "Tag #3" }, + tag_3: { type: "enum", options: categories, alias: "Tag #4" }, + tag_4: { type: "enum", options: categories, alias: "Tag #5" }, + tag_5: { type: "enum", options: categories, alias: "Tag #6" }, + tag_6: { type: "enum", options: categories, alias: "Tag #7" }, + tag_7: { type: "enum", options: categories, alias: "Tag #8" }, + tag_8: { type: "enum", options: categories, alias: "Tag #9" }, hidden: { type: "flag" }, }, ui: { diff --git a/load_spreadsheet.js b/load_spreadsheet.js index a7f1793..689b9d8 100644 --- a/load_spreadsheet.js +++ b/load_spreadsheet.js @@ -11,7 +11,7 @@ import sizeOf from "image-size"; const datasheetFile = "./data_store/tags.csv"; const dbFile = "./db.json"; -var tagTypes = "No6092,1620s,painting,blunt,National Gallery of Canada,AGO,courtauld,intervensions,connsoeurship,double agent,forensics,black box,Stankievech".split( +var categories = "1620s,painting,blunt,National Gallery of Canada,Art Gallery of Ontario,Courtauld Institute,Stankievech,connsoeurship,double agent,forensics,black box".split( "," ); @@ -46,7 +46,7 @@ async function main() { }; // loop over the tags... let tagIndex = 0; - tagTypes.forEach((type, tagId) => { + categories.forEach((type, tagId) => { if (row[type] === "x") { record["tag_" + tagIndex] = tagId + 1; tagIndex += 1; diff --git a/public/assets/css/css.css b/public/assets/css/css.css index fddad92..fc05db2 100644 --- a/public/assets/css/css.css +++ b/public/assets/css/css.css @@ -32,7 +32,7 @@ body { background: rgba(0, 0, 0, 0.5); color: #fff; transition: opacity 0.2s; - text-transform: capitalize; + text-transform: lowercase; font-variant: small-caps; } .legend .category { @@ -169,3 +169,14 @@ body { width: 100%; height: 100%; } + +/** Clocks */ + +.clocks { + display: flex; + flex-direction: row; + width: 100%; + height: calc(100vh - 12rem); + align-items: center; + justify-content: space-evenly; +} diff --git a/public/assets/img/clock/clock.jpg b/public/assets/img/clock/clock.jpg Binary files differnew file mode 100644 index 0000000..2ed2b10 --- /dev/null +++ b/public/assets/img/clock/clock.jpg diff --git a/public/assets/img/clock/clock.png b/public/assets/img/clock/clock.png Binary files differnew file mode 100644 index 0000000..c1d3e86 --- /dev/null +++ b/public/assets/img/clock/clock.png diff --git a/public/assets/img/clock/hour.png b/public/assets/img/clock/hour.png Binary files differnew file mode 100644 index 0000000..b8fd5d3 --- /dev/null +++ b/public/assets/img/clock/hour.png diff --git a/public/assets/img/clock/minute.png b/public/assets/img/clock/minute.png Binary files differnew file mode 100644 index 0000000..1dc5df0 --- /dev/null +++ b/public/assets/img/clock/minute.png diff --git a/public/assets/img/clock/second.png b/public/assets/img/clock/second.png Binary files differnew file mode 100644 index 0000000..9b2b854 --- /dev/null +++ b/public/assets/img/clock/second.png diff --git a/src/graph.js b/src/graph.js index a210f23..3a0e8a1 100644 --- a/src/graph.js +++ b/src/graph.js @@ -3,7 +3,9 @@ import ForceGraph3D from "3d-force-graph"; import SpriteText from "three-spritetext"; import { union } from "./utils/set_utils.js"; -const IMG_SCALE = 20; +const IMG_SCALE = 16; +const MAIN_IMG_SCALE = 80; +const OBJECT_SCALE = 10; export default function buildGraph({ db, objects, handlers }) { const linkable = {}; @@ -85,7 +87,7 @@ export default function buildGraph({ db, objects, handlers }) { var center = new THREE.Vector3(); box.getCenter(center); object.position.sub(center); - object.scale.set(100, 100, 100); + object.scale.set(OBJECT_SCALE, OBJECT_SCALE, OBJECT_SCALE); return object; } else if (node.data.thumbnail?.uri) { if (node.data.thumbnail.type === "video") { @@ -103,7 +105,11 @@ export default function buildGraph({ db, objects, handlers }) { const aspect = node.data.thumbnail.width / node.data.thumbnail.height; material = new THREE.SpriteMaterial({ map: texture }); sprite = new THREE.Sprite(material); - sprite.scale.set(IMG_SCALE, IMG_SCALE / aspect); + if (node.id === 0) { + sprite.scale.set(MAIN_IMG_SCALE, MAIN_IMG_SCALE / aspect); + } else { + sprite.scale.set(IMG_SCALE, IMG_SCALE / aspect); + } return sprite; } else { sprite = new SpriteText( @@ -117,6 +123,12 @@ export default function buildGraph({ db, objects, handlers }) { }) .onNodeClick(handlers.click); + // TrackballControls + graph.controls().addEventListener("change", () => { + const position = graph.cameraPosition(); + // console.log(position); + }); + const initialZoom = () => { const distance = 20000; let angle = 0; diff --git a/src/views/Clock.js b/src/views/Clock.js new file mode 100644 index 0000000..a394b62 --- /dev/null +++ b/src/views/Clock.js @@ -0,0 +1,108 @@ +/** + * Analog Clock + */ + +import React, { useState, useEffect } from "react"; + +const clock = { + width: "20vw", + height: "20vw", + background: "url(assets/img/clock/clock.png)", + backgroundSize: "contain", + backgroundPosition: "center center", + backgroundRepeat: "no-repeat", + position: "relative", +}; + +const handStyle = { + position: "absolute", + top: "0%", + left: "0%", +}; + +const hourStyle = { + ...handStyle, + height: "calc(540 / 1268 * 10vw)", + transformOrigin: "45.46% 96.62%", +}; + +const minuteStyle = { + ...handStyle, + height: "calc(795 / 1268 * 10vw)", + transformOrigin: "50% 84.05%", +}; + +const secondStyle = { + ...handStyle, + height: "calc(993 / 1268 * 10vw)", + transformOrigin: "45.83% 76.63%", +}; + +const hourTransform = + "translateX(10.45vw) translateY(10vw) translateX(-100%) translateY(-100%) "; +const minuteTransform = + "translateX(10.45vw) translateY(10.8vw) translateX(-100%) translateY(-100%) "; +const secondTransform = + "translateX(10.2vw) translateY(11.5vw) translateX(-100%) translateY(-100%) "; + +export default function Clock({ utc }) { + const [hour, setHour] = useState({}); + const [minute, setMinute] = useState({}); + const [second, setSecond] = useState({}); + + useEffect(() => { + const update = () => { + const time = new Date(); + const hours = utc ? time.getUTCHours() : time.getHours(); + const minutes = time.getMinutes(); + const seconds = time.getSeconds(); + const ms = time.getMilliseconds(); + setHour({ + ...hourStyle, + transform: + hourTransform + + "rotate(" + + (((hours % 12) + minutes / 60 + seconds / 3600) / 12) * 360 + + "deg)", + }); + setMinute({ + ...minuteStyle, + transform: + minuteTransform + + "rotate(" + + (minutes / 60 + seconds / 3600) * 360 + + "deg)", + }); + setSecond({ + ...secondStyle, + transform: + secondTransform + + "rotate(" + + (seconds / 60 + ms / 60000) * 360 + + "deg)", + }); + }; + update(); + const intervalId = setInterval(update, 50); + return () => clearInterval(intervalId); + }, []); + + return ( + <div style={clock}> + <img src="assets/img/clock/hour.png" style={hour} /> + <img src="assets/img/clock/minute.png" style={minute} /> + <img src="assets/img/clock/second.png" style={second} /> + </div> + ); +} + +// ratio: 500 / 1268 +// hour: 540 +// minute: 795 +// second: 993 + +// hour transform origin: 40 x 515 // 88 / 533 +// minute transform origin: 37 x 622 // 72 x 740 +// second transform origin: 11 x 751 // 24 x 980 + +const rand = (n) => Math.random() * n; diff --git a/src/views/Clocks.js b/src/views/Clocks.js new file mode 100644 index 0000000..d984f7b --- /dev/null +++ b/src/views/Clocks.js @@ -0,0 +1,15 @@ +/** + * Two clocks + */ + +import React from "react"; +import Clock from "./Clock.js"; + +export default function Clocks() { + return ( + <div className="clocks"> + <Clock /> + <Clock utc /> + </div> + ); +} diff --git a/src/views/Detail.js b/src/views/Detail.js index ff6a6a5..b1c4dcf 100644 --- a/src/views/Detail.js +++ b/src/views/Detail.js @@ -5,6 +5,7 @@ import React from "react"; import Gallery from "./Gallery.js"; +import Clocks from "./Clocks.js"; import Vimeo from "@u-wave/react-vimeo"; export default function Detail({ node, visible, onClose }) { @@ -39,7 +40,9 @@ export default function Detail({ node, visible, onClose }) { <div className="buttons close"> <img src="/assets/img/close.svg" onClick={onClose} /> </div> - {data.type === "video" ? ( + {index === 33 ? ( + <Clocks /> + ) : data.type === "video" ? ( visible && ( <div className="video"> <Vimeo diff --git a/src/views/Legend.js b/src/views/Legend.js index fe7db4d..411ca81 100644 --- a/src/views/Legend.js +++ b/src/views/Legend.js @@ -4,9 +4,20 @@ import React, { useState, useEffect } from "react"; -const categories = "No6092,1620s,painting,blunt,National Gallery of Canada,AGO,courtauld,intervensions,connsoeurship,double agent,forensics,black box,Stankievech".split( - "," -); +var categories = [ + // tag ID = array offset + 1 + "1620s", + "painting", + "blunt", + "National Gallery of Canada", + "Art Gallery of Ontario", + "Courtauld Institute", + "Stankievech", + "connsoeurship", + "double agent", + "forensics", + "black box", +]; export default function Legend({ visible, selected, onSelect }) { return ( |
